變量和標(biāo)號的屬性

發(fā)布時(shí)間:2024-02-23
1. 標(biāo)號由一組放在語句前頭的標(biāo)識符后跟一個(gè) : 來定義,用以指定相應(yīng)程序段在內(nèi)存的首地址位置。
任何一個(gè)標(biāo)號一經(jīng)定義就具有 3 種屬性:
標(biāo)號的段地址;
標(biāo)號的偏移地址;
標(biāo)號的類型; 1 ) near-- 該標(biāo)號只能在段內(nèi)轉(zhuǎn)移; 2 ) far-- 在段間使用;
標(biāo)號和名字一經(jīng)定義便具有以下兩類三種屬性:
① 段值
標(biāo)號和名字對應(yīng)存儲單元的段地址
② 偏移值
標(biāo)號和名字對應(yīng)存儲單元的偏移地址
③ 類型
標(biāo)號、子程序名的類型可以是 near (近)和 far (遠(yuǎn)),分別表示段內(nèi)或段間
2 . 變量的屬性:
變量一經(jīng)定義,通常具有 5 種屬性(即特征):
1 ) 變量的段地址( seg ); 2 ) 變量的偏移地址( offset );
3 ) 變量類型( type ):所定義變量所占字節(jié)數(shù);由 db 、 dw 、 dd 、 dq 、 dt 偽指令定義的變量類型分別為 1 , 2 , 4 , 8 , 10 。前 3 種類型又分別稱為 byte 類、 word 類、 dword 類。
4 ) 變量長度( length ):所定義變量的個(gè)數(shù);
5 ) 變量大小( size ):定義中分配給同一變量名所有變量的總字節(jié)數(shù);
變量定義實(shí)質(zhì)上是對數(shù)據(jù)區(qū)內(nèi)存的一種安排,這種安排對匯編語言編程是非常重要的,它是在匯編過程中完成的。編寫程序時(shí),直接引用變量的名字,而匯編過程中,對任何變量的引用,都自動轉(zhuǎn)換為變量相應(yīng)的偏移地址。
變量名的類型可以是 byte (字節(jié))、 word (字)和 dword (雙字)等
地址操作符
取得名字或標(biāo)號的段地址和偏移地址兩個(gè)屬性
[ ] 將括起的表達(dá)式作為存儲器地址
$ 當(dāng)前偏移地址
: 采用指定的段地址寄存器
offset 名字 / 標(biāo)號
返回名字或標(biāo)號的偏移地址
seg 名字 / 標(biāo)號
返回名字或標(biāo)號的段地址
org $+10
array db 45,45h
.code
mov ax,seg array
mov ds,ax
mov bx,offset array
; 等價(jià)于 lea bx,array
mov cl,array+4
; 等效于 mov cl,array[4]
mov ax,es:[2000h]
mov al,byte ptr w_var ;w_var 是一個(gè)字變量
jmp far ptr n_label ;n_label 是一個(gè)標(biāo)號
使用 ptr 操作符,可以臨時(shí)改變名字或標(biāo)號的類型
this 類型名
利用 this 說明的操作數(shù)具有匯編時(shí)的當(dāng)前邏輯地址,但具有指定的類型
b_var equ this byte
; 按字節(jié)訪問變量 b_var ,但與 w_var 的地址相同
w_var dw 10 dup(0) ; 按字訪問變量 w_var
f_jump equ this far
; 用 f_jump 為段間轉(zhuǎn)移( f_jump label far )
n_jump: mov ax,w_var
; 用 n_jump 為段內(nèi)近轉(zhuǎn)移,但兩者指向同一條指令
label 偽指令的功能等同于“ equ this ”
short 標(biāo)名
指定標(biāo)號作為 -128 ~ +127 字節(jié)范圍內(nèi)的短轉(zhuǎn)移
jmp short n_jump
當(dāng)然,如果標(biāo)號實(shí)際上超出了這個(gè)范圍,則出錯(cuò)。
type 名字 / 標(biāo)名
返回表明名字或標(biāo)號類型的一個(gè)字量數(shù)值
對字節(jié)、字和雙字變量依次返回 1 、 2 和 4 ;
對短、近和遠(yuǎn)轉(zhuǎn)移依次返回 ff01h 、 ff02h 和 ff05h
mov ax,type w_var ; 匯編結(jié)果為 mov ax,2
mov ax,type n_jump
; 匯編結(jié)果為 mov ax,0ff02h ( near 標(biāo)號)
操作符 sizeof 返回整個(gè)變量占用的字節(jié)數(shù)
lengthof 返回整個(gè)變量的數(shù)據(jù)項(xiàng)數(shù)(即元素?cái)?shù))
sizeof = lengthof × type
.model small
.stack
.data
v_byte equ this byte
;v_byte 是字節(jié)類型,與變量 v_word 的地址相同
v_word dw 3332h,3735h
;v_word 是字類型的變量
target dw 5 dup(20h)
; 分配數(shù)據(jù)空間 2 × 5 = 10 字節(jié)
crlf db 0dh,0ah,'$'
flag db 0
n_point dw offset s_label
; 取得標(biāo)號 s_label 的偏移地址
例:屬性及其應(yīng)用
.code
.startup
mov al,byte ptr v_word
; 用 ptr 改變 v_word 的類型,否則類型不匹配
dec al
mov v_byte,al
; 對 v_word 的頭一個(gè)字節(jié)操作,原為 32h 、現(xiàn)為 31h
n_label: cmp flag,1
jz s_label ;flag 單元為 1 轉(zhuǎn)移
inc flag
jmp short n_label ; 進(jìn)行短轉(zhuǎn)移
s_label: cmp flag,2
jz next ;flag 單元為 2 轉(zhuǎn)移
inc flag
jmp n_point
; 段內(nèi)的存儲器間接尋址,轉(zhuǎn)移到 s_label 標(biāo)號處
next: mov ax,type v_word
; 匯編結(jié)果為 mov ax,2
mov cx,lengthof target
; 匯編結(jié)果為 mov cx,5
mov si,offset target
w_again: mov [si],ax ; 對字單元操作
inc si ;si 指針加 2
inc si
loop w_again ; 循環(huán)
mov cx,sizeof target
; 匯編結(jié)果為 mov cx,0ah
mov al,'?'
mov di,offset target
b_again: mov [di],al ; 對字節(jié)單元操作
inc di ;di 指針加 1
loop b_again ; 循環(huán)
mov dx,offset v_word
; 顯示結(jié)果: 1357
mov ah,9
int 21h
.exit 0
end
上一個(gè):RC1206JR-072K2L,1206 2.2KΩ 5% 1/4W 電阻
下一個(gè):硬盤hdd和不是HDD的區(qū)別

廣東4日游 廣東4日自駕游攻略
主板支持win11(asrock主板裝win10)
特殊建筑物的防雷措施
廣州筆記本樂園論壇(廣州電腦城的電腦可靠嗎)
這幾年的模擬量總結(jié)
新疆楊吉丁蟲防治
交流電焊變壓器與普通變壓器有何不同?
元器件在線商城引領(lǐng)電子零部件行業(yè)的新興趨勢
電梯光幕是什么?
oppoa55好不好用(oppoa55到底好不好)
十八禁 网站在线观看免费视频_2020av天堂网_一 级 黄 色 片免费网站_绝顶高潮合集Videos