小弟初學(xué)匯編。剛學(xué)到寄存器和尋址方式。整理了點(diǎn)筆記,拿出來給跟我同樣初學(xué)的弟兄分享。:o:
一、寄存器
總共有14個(gè)16位寄存器,8個(gè)8位寄存器
通用寄存器:
數(shù)據(jù)寄存器:
AH(8位) AL(8位) AX(16位) (AX和AL又稱累加器)
BH(8位) BL(8位) BX(16位) (BX又稱基址寄存器,唯一作為存儲(chǔ)器指針使用寄存器)
CH(8位) CL(8位) CX(16位) (CX用于字符串操作,控制循環(huán)的次數(shù),CL用于移位)
DH(8位) DL(8位) DX(16位) (DX一般用來做32位的乘除法時(shí)存放被除數(shù)或者保留余數(shù))
指針寄存器:
SP 堆棧指針 (存放棧頂?shù)刂?
BP 基址指針 (存放堆?;菲?
變址寄存器:主要用于存放某個(gè)存儲(chǔ)單元地址的偏移,或某組存儲(chǔ)單元開始地址的偏移,
即作為存儲(chǔ)器(短)指針使用。作為通用寄存器,它們可以保存16位算術(shù)邏輯運(yùn)算中的操
作數(shù)和運(yùn)算結(jié)果,有時(shí)運(yùn)算結(jié)果就是需要的存儲(chǔ)單元地址的偏移.
SI 源地址 (源變址寄存器)
DI 目的地址 (目的變址寄存器)
控制寄存器:
IP 指令指針
FLAG 標(biāo)志寄存器
?、?nbsp;進(jìn)位標(biāo)志 CF,記錄運(yùn)算時(shí)最高有效位產(chǎn)生的進(jìn)位值。
② 符號(hào)標(biāo)志 SF,記錄運(yùn)算結(jié)果的符號(hào)。結(jié)果為負(fù)時(shí)置1,否則置0。
③ 零標(biāo)志 ZF,運(yùn)算結(jié)果為0時(shí)ZF位置1,否則置0。
④ 溢出標(biāo)志 OF,在運(yùn)算過程中,如操作數(shù)超出了機(jī)器可表示數(shù)的范圍稱為溢出。溢出時(shí)OF位置1,否則置0。
⑤ 輔助進(jìn)位標(biāo)志 AF,記錄運(yùn)算時(shí)第3位(半個(gè)字節(jié))產(chǎn)生的進(jìn)位值。
⑥ 奇偶標(biāo)志 PF,用來為機(jī)器中傳送信息時(shí)可能產(chǎn)生的代碼出錯(cuò)情況提供檢驗(yàn)條件。當(dāng)結(jié)果操作數(shù)中1的個(gè)數(shù)為偶數(shù)時(shí)置1,否則置0。
段寄存器
CS 代碼段 IP
DS 數(shù)據(jù)段
SS 堆棧段 SP BP
ES 附加段
二、七種尋址方式:
1、立即尋址方式:
操作數(shù)就包含在指令中。作為指令的一部分,跟在操作碼后存放在代碼段。
這種操作數(shù)成為立即數(shù)。立即數(shù)可以是8位的,也可以是16位的。
例如:
指令: MOV AX,1234H
則: AX = 1234H
2、寄存器尋址方式:
操作數(shù)在CPU內(nèi)部的寄存器中,指令指定寄存器號(hào)。
對(duì)于16位操作數(shù),寄存器可以是:AX、BX、CX、DX、SI、DI、SP和BP等。
對(duì)于8位操作數(shù),寄存器可以是AL 、AH、BL、BH、CL、CH、DL、DH。
這種尋址方式由于操作數(shù)就在寄存器中,不需要訪問存儲(chǔ)器來取得操作數(shù)
因而可以取得較高的運(yùn)算數(shù)度。
3、直接尋址方式:
操作數(shù)在寄存器中,指令直接包含有操作數(shù)的有效地址(偏移地址)
注:操作數(shù)一般存放在數(shù)據(jù)段
所以操作數(shù)的地址由DS加上指令中直接給出的16位偏移得到。如果采用
段超越前綴,則操作數(shù)也可含在數(shù)據(jù)段外的其他段中。
例如:
MOV AX,[8054]
如(DS) = 2000H,
則執(zhí)行結(jié)果為(AX) = 3050H
(物理地址=20000+8054=28054H)
28054H里的內(nèi)容為3050H
在匯編語言指令中,可以用符號(hào)地址代替數(shù)值地址
如:MOV AX,VALUE
此時(shí)VALUE為存放操作數(shù)單元的符號(hào)地址。
如寫成:MOV AX,[VALUE]也是可以的,兩者是等效的。
如VALUE在附加段中,則應(yīng)指定段超越前綴如下:
MOV AX,ES:VALUE 或 MOV AX,ES:[VALUE]
4、寄存器間接尋址方式:
操作數(shù)在寄存器中,操作數(shù)有效地址在SI、DI、BX、BP
這四個(gè)寄存器之一中。在一般情況下,如果有效地址在
SI、DI和BX中,則以DS段寄存器中的內(nèi)容為段值。如果
有效地址在BP中,則以SS段寄存器中的內(nèi)容為段值
例如:
MOV AX,[SI]
如果(DS) = 5000H (SI) = 1234H
則物理地址 = 50000 + 1234 = 51234H
51234H地址中的內(nèi)容為:6789H
執(zhí)行該指令后,(AX) = 6789H
5、寄存器相對(duì)尋址方式:
操作數(shù)在存儲(chǔ)器中,操作數(shù)的有效地址是一個(gè)基址寄存器(BX、BP)
或變址寄存器(SI、DI)的內(nèi)容加上指令中給定的8位或16位位移量之和
BX 8位 位移量
EA(有效地址) = BP +
SI 16位 位移量
DI
在一般情況下,如果SI、DI、或BX中的內(nèi)容作為有效地址的一部分,那么
引用的段寄存器是DS;如果BP中的內(nèi)容作為有效地址的一部分,那么引用的
段寄存器是SS。
物理地址 = 16d × (DS) + (BX) + 8
或(SI)或16位位移量
或(DI)
物理地址 = 16d × (SS) + (BP) + 8位位移量
或16位位移量
在指令中給定的8位或16位位移量采用補(bǔ)碼形式表示。在計(jì)算有效地址時(shí),如
位移量是8位,則被帶符號(hào)擴(kuò)展成16位。
例如:
MOV AX,[DI+1223H]
假設(shè),(DS) = 5000H,(DI) = 3678H
則物理地址 = 50000 + 3678 + 1233 = 5489BH
5489BH地址中的內(nèi)容:55AAH
執(zhí)行該指令后AX = 55AAH
下面指令中,源操作數(shù)采用寄存器相對(duì)尋址,引用的段寄存器是SS: MOV BX,[BP-4]
下面指令中,目的操作數(shù)采用寄存器相對(duì)尋址,引用的段寄存器是ES: MOV ES:[BX+5],AL
指令:MOV AX,[SI+3]與MOV AX,3[SI]是等價(jià)的
6、基址加變址尋址方式:
操作數(shù)在寄存器中,操作數(shù)的有效地址由:
基址寄存器之一的內(nèi)容與變址寄存器之一的內(nèi)容相加
BX SI
即: EA = +
BP DI
在一般情況下,如果BP之內(nèi)容作為有效地址的一部分,則以SS之內(nèi)容為段值,否則已DS
為段值。
例如:
MOV AX,[BX][DI]
如:(DS)=2100H,
(BX)=0158H,
(DI)=10A5H
則EA=0158 + 10A5 = 11FD
物理地址=21000 + 11FD = 221FDH
221FDH地址中的內(nèi)容:1234H
執(zhí)行該指令后AX = 1234H
下面指令中,目的操作數(shù)采用基址加變址尋址,
引用的段寄存器是DS: MOV DS:[BP+SI],AL
下面指令中,源操作數(shù)采用基址加變址尋址,
引用的段寄存器ES: MOV AX,ES:[BX+SI]
這種尋址方式使用與數(shù)組或表格處理。用基址寄存器存放數(shù)組首地址,而用變地寄存器
來定位數(shù)組中的各元素,或反之。由于兩個(gè)寄存器都可改變,所以能更加靈活地訪問數(shù)
組或表格中的元素。
下面的兩種表示方法是等價(jià)的:
MOV AX,[BX+DI]
MOV AX,[DI][BX]
7、相對(duì)基址加變址尋址方式:
操作數(shù)在存儲(chǔ)器中,操作數(shù)的有效地址由于基址寄存器之一的內(nèi)容與變址寄存器之一的
內(nèi)容及指令中給定的8位或16位位移量相加得到。
BX SI 8位
即: EA = + + 位移量
BP DI 16位
在一般情況下,如果BP中的內(nèi)容作為有效地址的一部分,則以SS段寄存器中的內(nèi)容為段
值,否則以DS段寄存器中的內(nèi)容為段值。
在指令中給定的8位或16位位移量采用補(bǔ)碼形式表示。
在計(jì)算有效地址時(shí),如果位移量是8位,那么被帶符號(hào)擴(kuò)展成16位。
當(dāng)所得的有效地址操作FFFFH時(shí),就取其64K的模
例如:
MOV AX,[BX+DI-2]
假設(shè),(DS) = 5000H, (BX) = 1223H, DI = 54H, (51275) = 54H, (51276) = 76H
物理地址= 50000 + 1223 + 0054 + FFFE(-2 各位取反末位加一) = 51275H
執(zhí)行該指令后 (AX) = 7654H
相對(duì)基址加變址這種尋址方式的表示方法多種多樣,以下四種方法均是等價(jià)的:
MOV AX,[BX+DI+1234H], MOV AX,1234H[BX][DI]
MOV AX 1234H[BX+DI], MOV AX,1234H[DI][BX]
本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)
點(diǎn)擊舉報(bào)。