汇编基础(二)
80486尋址方式
操作數是指令額操作對象,尋址方式與地址碼有密切關系。形成操作數地址碼的過程就是尋址。
尋址方式:意思是用什么方式才能獲得操作數
?
80486有3類7種尋址方式
立即尋址方式:獲得立即數
寄存器尋址方式:獲得寄存器操作數
存儲器操作數尋址方式:獲得內存操作數,1.直接尋址2.寄存器間接尋址3.基址尋址4.變址尋址5.基址加變址尋址
?
1.立即尋址方式:這種尋址方式所提供的操作數直接放在指令中,緊跟在操作碼的后面,與操作碼一起放在代碼段區域中。立即數可以是8、16、32位.立即尋址主要是用來給寄存器賦初值.?
如:
MOV?EAX?,?12345678H
MOV?BL?,?10101010B?? ;AAH?->?BL
MOV?CL?,-4 ;FCH?->CL
MOV?DL?,?‘A’ ;41H?->DL
ADD?AL?,?0C8H
MOV?SI,?3*5 ;15?->SI
?
2.寄存器尋址:操作數在CPU的某個寄存器中,符號指令中直接寫出寄存器名稱。
如:??
MOV?AX?,?DS ;DS內容→?AX?
INC?SI? ;SI+1->SI?(Increase??增量)
DEC?DI ;DI-1->DI?(Decrease??減量)
?
3.直接尋址:
地址表達式的格式1:段寄存器:[偏移地址]
如:MOV?AL,?ES:[2CH] ;從ES附加段偏移地址為2CH的單元取數->AL
如:MOV?AX,?DS:[2000H] ;從數據段偏移地址為2000H的單元取一字->AX
這種格式很少使用,程序員不知道某單元的偏移地址?
?
地址表達式的格式2:?段寄存器:變量名 ;用變量名代表存儲單元的有效地址
設數據段XX字節單元的內容為11H
ES附加段YY字單元的內容為2233H
MOV?AL,?DS:XX?? ??;取數據段XX字節單元的內容->AL
或MOV?AL,?XX??????;?所以AL=11H
?
MOV?AX,?ES:YY ?;取ES附加段YY字單元的內容->AX
或MOV?AX,?YY????;所以AX=2233H
?
4.寄存器間接尋址
間接尋址的地址表達式:段寄存器:[間址寄存器]
下面給出間接寄存器和訪問約定的邏輯段
?
堆棧段:SP
數據段:DS
?
舉例:設數據段BUF字節單元的內容為55H,取出該數->AL
解:
用BX間址
MOV?DS?,數據段段基址
MOV?BX?,?BUF單元的有效地址
MOV?AL?,?DS:[BX]?????????;AL=55H
等價于:?MOV?AL?,?[BX]??
由于BX間址,約定訪問的是數據段,所以”DS:”可省
?
5.基址尋址
該尋址方式的有效地址由兩部分組成。一部分在基址寄存器中,另一部分為常量?。
基址尋址的地址表達式:段寄存器:[基址寄存器+位移量]
下面給出基址寄存器和約定訪問的邏輯段
?
?舉例:設數據段BUF單元依次有:78H,56H,34H,12H
則:MOV?DS?,?數據段段基址
MOV?BX?,?BUF單元有效地址
MOV?DH?,?[BX+1]??????;DH=56H
MOV?DX?,?[BX+2]??????;DX=1234
?
6.變址尋址
有比例因子的變址尋址其地址表達式為:段寄存器:[比例因子*變址寄存器+位移量]
下面給出有比例因子變址寄存器和約定訪問的邏輯段
?
MOV?AL?,?[8*SI+15]????;非法,16位尋址不能使用比例因子?
MOV?AL?,?[10*ESI+5]???;非法指令,比例因子錯了
MOV?AL?,?ES:[SI]???????;訪問附加段
MOV?AL?,?[SI]?????????;訪問數據段
?
7.基址加變址尋址
表達式:MOV?AX?,?[基址寄存器?+?變址寄存器?+?偏移量]
?
下面給出網友給出的總結:
立即尋址?MOV?AX?,?常數?
直接尋址?MOV?AX?,?[常數]?;加上中括號?或?MOV?AX?,?變量名或標號?
寄存器尋址?MOV?AX?,?通用寄存器?
寄存器間接尋址?MOV?AX?,?[(BX,BP,SI,DI)中的一個]?;以下四行均需加上中括號?
寄存器相對尋址?MOV?AX?,?[(BX,BP,SI,DI)中的一個?+?偏移量]?
基址變址尋址?MOV?AX?,?[基址寄存器?+?變址寄存器]?
相對基址變址尋址?MOV?AX?,?[基址寄存器?+?變址寄存器?+?偏移量]?
總結
- 上一篇: WEB安全基础-URL跳转漏洞
- 下一篇: HTML作业-潮流服装网页