2 尋址方式與匯編語(yǔ)言程序的組織
2.1 匯編語(yǔ)言
2.11 機(jī)器語(yǔ)言
-CPU能直接識(shí)別并遵照?qǐng)?zhí)行的指令稱(chēng)為機(jī)器指令。
-機(jī)器指令一般由操作碼和操作數(shù)兩部分構(gòu)成,操作碼在前,操作數(shù)在后。
-操作碼指出要進(jìn)行的操作或運(yùn)算叙量,如加、減九串、傳送等绞佩。
-操作數(shù)指出參與操作或運(yùn)算的對(duì)象寺鸥,也指出操作或運(yùn)算結(jié)果存放的位置,如CPU的寄存器品山、存儲(chǔ)單元和數(shù)據(jù)等胆建。
-機(jī)器語(yǔ)言是CPU能直接識(shí)別的唯一語(yǔ)言。
-有如下缺點(diǎn):不能用人們熟悉的形式來(lái)描述計(jì)算機(jī)要執(zhí)行的任務(wù)肘交;編寫(xiě)程序是十分困難笆载,易出錯(cuò);有錯(cuò)涯呻,難發(fā)現(xiàn)凉驻,即調(diào)試?yán)щy。
2.12 匯編語(yǔ)言
-匯編語(yǔ)言是為了克服機(jī)器語(yǔ)言的缺點(diǎn)而產(chǎn)生的复罐。
-為了克服機(jī)器語(yǔ)言的缺點(diǎn)沿侈,采用便于記憶和描述指令功能的符號(hào)來(lái)表示指令的操作碼。
-用指令助記符市栗、地址符號(hào)等符號(hào)表示的指令稱(chēng)為匯編格式指令。
-匯編語(yǔ)言是匯編格式指令咳短、偽指令的集合及其表示填帽、使用這些指令的一組規(guī)則。
2.2 尋址方式
-計(jì)算機(jī)指令是由操作碼字段和操作數(shù)地址碼字段兩部分組成的咙好,操作碼字段指示計(jì)算機(jī)要執(zhí)行的操作篡腌,操作數(shù)地址碼字段則指出在指令執(zhí)行操作的過(guò)程中所需要操作數(shù)的地址。
例:將BX寄存器中的數(shù)據(jù)傳送到AX寄存器中去的指令為:
MOV AX BX
操作碼 目的操作數(shù) 源操作數(shù)
地址碼 地址碼
-操作數(shù)地址碼字段除使用立即數(shù)外勾效,給出的是操作數(shù)的存放地址嘹悼,如內(nèi)存單元地址或寄存器或I/O地址。
2.2.1 數(shù)據(jù)尋找方式
立即尋址
-指令中的操作數(shù)為常數(shù)层宫,則存儲(chǔ)時(shí)緊跟在操作碼之后杨伙,作為指令的一部分存在代碼段里,這種操作數(shù)稱(chēng)為立即數(shù)萌腿。
MOV AL ,05H ;執(zhí)行后(AL)=05H
MOV AX 洒缀,1234H 衷佃;執(zhí)行后(AX)=1234H
-分號(hào)表示對(duì)指令的注釋。
-字節(jié)的存放按照“高高低低”原則贮庞,高位字節(jié)存放在高地址中峦筒,地位字節(jié)存放在地址中。
-立即數(shù)尋找方式用于給寄存器或存儲(chǔ)單元賦初值窗慎,只能用于源操作數(shù)字段物喷,不能用于目的操作數(shù)數(shù)字段。
寄存器尋址
-操作數(shù)在CPU內(nèi)部的寄存器中,指令中指定寄存器名脯丝,寄存器可以是8位商膊、16位或32位的。
MOV AX 宠进,01E0H 晕拆;(AX)<—01E0H
-指令中源操作耍是立即尋址,目的操作數(shù)是寄存器尋址材蹬。
MOV AX , BX 实幕;(AX)<—(BX)
-指令中源操作數(shù)和目的操作數(shù)都是寄存器尋址。這鐘情況下堤器,兩個(gè)寄存器的長(zhǎng)度必須一樣昆庇。
-這種尋址方式的指令執(zhí)行速度最快,是由于操作數(shù)在CPU內(nèi)部的寄存器中闸溃,不需要通過(guò)訪問(wèn)存儲(chǔ)器來(lái)取得操作數(shù)整吆。
直接尋址
-操作數(shù)的偏移地址稱(chēng)為有效地址EA(Effictive Address)
-有效地址EA在指令中直接給出,它存放在代碼段中指令操作碼之后辉川,但操作數(shù)一般存放在數(shù)據(jù)段(DS)中表蝙,所以必須先求出操作數(shù)的物理地址,然后在訪問(wèn)存儲(chǔ)器才能取得操作數(shù)乓旗。
例如:
MOV AX,[1200H]
-指令中直接給出了源操作數(shù)存放在數(shù)據(jù)段中府蛇,有效地址EA=1200H,設(shè)DS=2000H屿愚,則物理地址為:
PA=(DS)*10H+EA=20000H+1200H=21200H
-可以用符號(hào)地址代替數(shù)值地址汇跨,如:
MOV AX,VALUE
-若要指定段時(shí)妆距,要指定段跨越前綴穷遂、如:
MOV AX,ES:VALUE
寄存器間接尋址
操作數(shù)的有效地址在基址寄存器BX娱据、BP或變址寄存器SI塞颁、DI中,而操作數(shù)在存儲(chǔ)器中吸耿。
-書(shū)寫(xiě)格式是寄存器加上方括號(hào)祠锣,例如:
MOV AX ,[SI]
-指令的功能是數(shù)據(jù)段中以SI寄存器的內(nèi)容為偏移地址的字存儲(chǔ)單元(即SI指向的存儲(chǔ)單元)內(nèi)容傳送給AX寄存器。
操作數(shù)的物理地址為:
PA=10H(DS)+(BX)
PA=10H(DS)+(SI)
PA=10H(DS)+(DI)
PA=10H(SS)+(BP)
寄存器相對(duì)尋址
-操作數(shù)的有效地址是一個(gè)基址或變址寄存器的內(nèi)容和指令中指定的8位或16位的位移量之和咽安。即:
EA=(寄存器)+位移量
-在實(shí)模式下伴网,除有段跨越前綴者外,對(duì)于寄存器為BX妆棒、SI澡腾、DI的情況沸伏,段寄存器用DS,而寄存器用BP动分,則使用SS段寄存器的內(nèi)容作為段地址毅糟。
物理地址=10H(DS)+(BX)或(DI)或(SI)+8或16位位移量
或
物理地址=10H(SS)+(BP)
-書(shū)寫(xiě)格式如:
MOV AX,COUNT[BX]
其中澜公,COUNT可以是符號(hào)地址姆另,也可以是常數(shù)。
基址加變址尋址
操作數(shù)的有效地址是一個(gè)基址寄存器和一個(gè)變址寄存器的內(nèi)容之和坟乾。
物理地址=10H(DS)+(BX)+(DI)或(SI)
或
物理地址=10H(SS)+(BP)+(DI)或(SI)
-書(shū)寫(xiě)格式如:
MOV AX迹辐,[BX][SI]
相對(duì)基址加變址尋址
操作數(shù)的有效地址是一個(gè)基址寄存器和一個(gè)變址寄存器的內(nèi)容和8位或16位位移量之和。
物理地址=10H(DS)+(BX)+(DI)或(SI)+8或16位位移量
或
物理地址=10H(SS)+(BP)+(DI)或(SI)+8或16位位移量
-書(shū)寫(xiě)格式如:
MOV AX甚侣,ARRAY[BX][SI]
比例變址尋址
比例變址是指一對(duì)寄存器中的第二用比例因子2明吩、4或8來(lái)乘,產(chǎn)生操作數(shù)的內(nèi)存地址殷费。
例如:
MOV EDX印荔,[EAX+4*EBX]
-指令將由EAX加上4倍EBX尋址的數(shù)據(jù)段存儲(chǔ)單元的內(nèi)容裝入EDX。
2.2.2程序存儲(chǔ)器尋址
直接(程序存儲(chǔ)器)尋址跨段直接尋址
轉(zhuǎn)換的段地址和偏移地址是直接由指令提供的详羡。
操作:
(CS) = FAR_LABEL的段地址
(IP) = FAR_LABEL的偏移地址
例子:
JMP FAR PTR FAR_LABEL
FAR_LABEL 是遠(yuǎn)標(biāo)號(hào), 代表目標(biāo)地址躏鱼。
相對(duì)(程序存儲(chǔ)器)尋址 移位相對(duì)IP。
操作:
(IP) = (IP)+ 8 位位移(短轉(zhuǎn)換)
(IP) = (IP)+ 16 位位移(近轉(zhuǎn)換)
JMP SHORT LABEL8 ;短轉(zhuǎn)換
JMP NEAR PTR LABEL16 ;近轉(zhuǎn)換
JMP $+ shift
;LABEL8 是8位移位,LABEL16i是16位移位
間接(程序存儲(chǔ)器)尋址段內(nèi)間接尋址
要轉(zhuǎn)移去的目的的偏移地址殷绍,存儲(chǔ)在任何16位寄存器或者內(nèi)存單元中
有兩種類(lèi)型的(程序存儲(chǔ)器)間接尋址方式
**寄存器間接尋址 **
內(nèi)存間接尋址
堆棧尋址
CALL 指令保存程序的返回地址,
RET (return) 指令從堆棧中取出返回地址。
在實(shí)模式下,
SP常常指向最后入棧的元素鹊漠。
實(shí)模式下, 棧結(jié)尾的物理地址:
** PA = (SS)10H+(SP)*
例(a) :
PUSH BX
操作:
(SP)=(SP)-2
((SP)+1)=(BH)
((SP))=(BL)
例(b) :
POP CX
操作:
(CL)=((SP))
(CH)=((SP)+1)
(SP)=(SP)+2
SP常常指向下一個(gè)即將要出棧的元素.
PA= (SS)*10H+(SP)