電工學習網

 找回密碼
 立即注冊

變量和標號的屬性

2015-3-22 09:04| 編輯:電工學習網| 查看: 8770| 評論: 0

摘要: 1. 標號由一組放在語句前頭的標識符后跟一個 " : " 來定義,用以指定相應程序段在內存的首地址位置。 任何一個標號一經定義就具有 3 種屬性: 標號的段地址; 標號的偏移地址; 標號的類型; 1 ) NEAR-- 該標 ...
1. 標號由一組放在語句前頭的標識符后跟一個 " : " 來定義,用以指定相應程序段在內存的首地址位置。
任何一個標號一經定義就具有 3 種屬性:
標號的段地址;
標號的偏移地址;
標號的類型; 1 ) NEAR-- 該標號只能在段內轉移; 2 ) FAR-- 在段間使用;
標號和名字一經定義便具有以下兩類三種屬性:
① 段值
標號和名字對應存儲單元的段地址
② 偏移值
標號和名字對應存儲單元的偏移地址
③ 類型
標號、子程序名的類型可以是 NEAR (近)和 FAR (遠),分別表示段內或段間

2 . 變量的屬性:
     變量一經定義,通常具有 5 種屬性(即特征):
1 ) 變量的段地址( SEG );     2 ) 變量的偏移地址( OFFSET );
3 ) 變量類型( TYPE ):所定義變量所占字節數;由 DB 、 DW 、 DD 、 DQ 、 DT 偽指令定義的變量類型分別為 1 , 2 , 4 , 8 , 10 。前 3 種類型又分別稱為 BYTE 類、 WORD 類、 DWORD 類。
4 ) 變量長度( LENGTH ):所定義變量的個數;
5 ) 變量大小( SIZE ):定義中分配給同一變量名所有變量的總字節數;
     變量定義實質上是對數據區內存的一種安排,這種安排對匯編語言編程是非常重要的,它是在匯編過程中完成的。編寫程序時,直接引用變量的名字,而匯編過程中,對任何變量的引用,都自動轉換為變量相應的偏移地址。
變量名的類型可以是 BYTE (字節)、 WORD (字)和 DWORD (雙字)等
地址操作符
取得名字或標號的段地址和偏移地址兩個屬性
[ ] 將括起的表達式作為存儲器地址
$ 當前偏移地址
: 采用指定的段地址寄存器
OFFSET 名字 / 標號
返回名字或標號的偏移地址
SEG 名字 / 標號

返回名字或標號的段地址
org $+10
array db 45,45h
.code
mov ax,seg array
mov ds,ax
mov bx,offset array
; 等價于 lea bx,array
mov cl,array+4
; 等效于 mov cl,array[4]
mov ax,es:[2000h]
mov al,byte ptr w_var ;w_var 是一個字變量
jmp far ptr n_label ;n_label 是一個標號
使用 PTR 操作符,可以臨時改變名字或標號的類型
THIS 類型名
利用 THIS 說明的操作數具有匯編時的當前邏輯地址,但具有指定的類型
b_var equ THIS byte
; 按字節訪問變量 b_var ,但與 w_var 的地址相同
w_var dw 10 dup(0) ; 按字訪問變量 w_var
f_jump equ THIS far
; 用 f_jump 為段間轉移( f_jump label far )
n_jump: mov ax,w_var
; 用 n_jump 為段內近轉移,但兩者指向同一條指令
LABEL 偽指令的功能等同于“ EQU THIS ”
SHORT 標名
指定標號作為 -128 ~ +127 字節范圍內的短轉移
jmp short n_jump
當然,如果標號實際上超出了這個范圍,則出錯。
TYPE 名字 / 標名
返回表明名字或標號類型的一個字量數值
對字節、字和雙字變量依次返回 1 、 2 和 4 ;
對短、近和遠轉移依次返回 ff01h 、 ff02h 和 ff05h
mov ax,TYPE w_var ; 匯編結果為 mov ax,2
mov ax,TYPE n_jump
; 匯編結果為 mov ax,0ff02h ( near 標號)
操作符 SIZEOF 返回整個變量占用的字節數
LENGTHOF 返回整個變量的數據項數(即元素數)
SIZEOF = LENGTHOF × TYPE
.model small
.stack
.data
v_byte equ this byte
;v_byte 是字節類型,與變量 v_word 的地址相同
v_word dw 3332h,3735h
;v_word 是字類型的變量
target dw 5 dup(20h)
; 分配數據空間 2 × 5 = 10 字節
crlf db 0dh,0ah,'$'
flag db 0
n_point dw offset s_label
; 取得標號 s_label 的偏移地址
例:屬性及其應用
.code
.startup
mov al,byte ptr v_word
; 用 PTR 改變 v_word 的類型,否則類型不匹配
dec al
mov v_byte,al
; 對 v_word 的頭一個字節操作,原為 32H 、現為 31H
n_label: cmp flag,1
jz s_label ;flag 單元為 1 轉移
inc flag
jmp short n_label ; 進行短轉移
s_label: cmp flag,2
jz next ;flag 單元為 2 轉移
inc flag
jmp n_point
; 段內的存儲器間接尋址,轉移到 s_label 標號處
next: mov ax,type v_word
; 匯編結果為 mov ax,2
mov cx,lengthof target
; 匯編結果為 mov cx,5
mov si,offset target
w_again: mov [si],ax ; 對字單元操作
inc si ;SI 指針加 2
inc si
loop w_again ; 循環
mov cx,sizeof target
; 匯編結果為 mov cx,0ah
mov al,'?'
mov di,offset target
b_again: mov [di],al ; 對字節單元操作
inc di ;DI 指針加 1
loop b_again ; 循環
mov dx,offset v_word
; 顯示結果: 1357??????????
mov ah,9
int 21h
.exit 0
End

看過《變量和標號的屬性》的人還看了以下文章:

發表評論

最新評論

|電工學習網 ( )

GMT+8, 2020-3-30 17:42

Powered by © 2011-2020 www.jeefkt.live 版權所有 免責聲明 不良信息舉報

技術驅動未來! 電工學習網—專業電工基礎知識電工技術學習網站。

欄目導航: 工控家園 | 三菱plc | 西門子plc | 歐姆龍plc | plc視頻教程

返回頂部
黑龙江快乐10分开奖查询 期如意期货配资APP 星悦浙江麻将hd苹果版 中国国家男子篮球队 长春棋牌游戏 fiba世界杯 四川熊猫麻将官方网 股票视频教程 江苏省快3 股指期货与股票涨跌 北京赛车pk10助赢软件 河南麻将朋友局破解版 股票指数投资策略主要包括完全复制法 北京快3形态走势图 丰城期货配资 星悦.云南麻将 科乐长春麻将下载