文章出處
文章列表
尋址方式:
[idata]
[BX]與寄存器間接尋址
[BX/SI/DI+idata]
[BX+SI/DI]
[BX+SI/DI+idata]
這些尋址方式可以分別對應于, 一維數組, 二位數組, 結構體, 結構體數組的尋址等。 即在一定程度上, 匯編語言已經為高級語言提供了各種結構的原理和基礎。
INC指令
格式:inc 操作數
▫功能:將操作數的值加1
▫說明:操作數可以是寄存器,也可以是內存單元
DEC指令
格式:dec 操作數
功能:將操作數的值減1
說明:操作數可以是寄存器,也可以是內存單元
AND :邏輯與指令
格式:AND 目的操作數,源操作數
操作:按位進行與運算,結果放到目的操作數
例如: mov al, 01100011B
and al, 00111011B
執行后 (AL)=00100011B
OR :邏輯或指令
格式:OR 目的操作數,源操作數
操作:按位進行或運算,結果放到目的操作數
例如: mov al, 01100011B
or al, 00111011B
執行后 (AL)=01111011B
NOT:邏輯非(按位取反)
格式:NOT 操作數
功能:按位進行非運算
例如: mov al, 01100011B
not al
執行后, (AL)=10011100B
XOR:邏輯異或(相同為0,不同為1)
格式:XOR 目的操作數,源操作數
功能:按位進行異或運算
例如: mov al, 01100011B
xor al, 00111011B
執行后, (AL)=01011000BSI為源變址寄存器,DI為目的變址寄存器,一般用于串處理操作。
SI和DI不能分成兩個8 位寄存器來使用,但可以和BX一樣,實現寄存器間接尋址。
B80100 |
mov ax, 1 |
CPU內部,指令緩沖器中 |
89D8 |
mov ax, bx |
CPU內部,BX寄存器中 |
A10000 |
mov ax, ds:[0] |
內存DS:0字單元 |
58 |
pop ax |
內存SS:IP字單元 |
E520 |
in ax, 20H |
20H端口 |
BP:基址指針寄存器,用作內存單元尋址時和BX類似,但默認段地址在SS中,可以用來直接存取堆棧中的數據。
說明:在[…] 中,BX、SI、DI、BP可以單個出現,或只能以BX+SI、BX+DI、BP+SI、BP+DI四種組合形式出現。
DIV指令
格式:DIV REG/MEM(除數)
功能:用顯式操作數去除隱含操作數,商和余數按下表的對應關系存放。
除數位數 |
被除數 |
商 |
余數 |
8 |
AX |
AL |
AH |
16 |
DX-AX |
AX |
DX |
例如:
div bx
div bl
div byte ptr ds:[0]
div word ptr es:[0]
轉移指令與程序邏輯控制
操作符OFFSET
無條件轉移指令JMP
段內直接短/近轉移
段間直接遠轉移
段內/段間間接轉移
條件轉移指令JCXZ
匯編語言的程序邏輯控制主要通過修改CS、IP寄存器值實現,對應指令統稱為轉移指令。
無條件轉移指令JMP
條件轉移指令,如JCXZ
循環指令,如LOOP
過程調用、中斷
名稱 |
格式 |
段內直接短轉移 |
JMP SHORT 標號 |
段內直接近轉移 |
JMP NEAR PTR 標號 |
段間直接遠轉移 |
JMP FAR PTR 標號 |
段內間接轉移 |
JMP 16位寄存器 JMP WORD PTR 內存單元地址 |
段間間接轉移 |
JMP DWORD PTR 內存單元地址 |
LOOP循環程序框架
mov cx,循環次數
s: 循環執行的程序段
;;;;;;;
loop s
一段安全的內存空間
在一般PC機的DOS方式下,DOS和其它合法程序一般都不會使用0:200~0:2FF的256 個字節的內存空間,所以使用這段空間是安全的。
RET指令:用棧中的數據修改IP的內容,從而實現近轉移。
(IP):=((SS)*16+(SP)) ;POP IP
(SP):=(SP)+2
RETF指令:用棧中的數據修改CS和IP的內容,實現遠轉移。
(IP):=((SS)*16+(SP)) ;POP IP
(SP):=(SP)+2
(CS):=((SS)*16+(SP)) ;POP CS
(SP):=(SP)+2
CALL指令的執行過程為:
將當前的 IP 或 CS和IP 壓入棧中;
轉移。
根據轉移距離和是否使用標號,CALL指令具有如下形式:
CALL 標號
CALL FAR PTR 標號
CALL reg
CALL WORD PTR mem
CALL DWOED PTR mem
說明:CALL指令不能實現短轉移。
標志寄存器(FLAG):8086 CPU的標志寄存器共16位,其中存儲的信息通常被稱為程序狀態字(PSW)。
其他寄存器是用來存放數據的,整個寄存器具有一個含義;FLAG是按位起作用的,它的每一位都有專門的含義,記錄特定的信息。
FLAG寄存器的作用:
存儲相關指令的某些執行結果;
為CPU執行相關指令提供行為依據;
控制CPU的相關工作方式。
標志位 |
取值為1的標記 |
取值為0的標記 |
OF |
OV |
NV |
DF |
DN |
UP |
SF |
NG |
PL |
ZF |
ZR |
NR |
PF |
PE |
PO |
CF |
CY |
NC |
ZF標志
類型:狀態標志。
功能:記錄相關指令執行后,結果是否為0,若結果為0,ZF=1,否則ZF=0。
PF標志
類型:狀態標志。
功能:記錄相關指令執行后,結果的所有二進制位中1的個數是否為偶數,是則PF=1,否則PF=0。
SF標志
類型:狀態標志。
功能:它記錄相關指令執行后,有符號運算結果是否為負,若結果為負,則SF=1,否則SF=0。
CF標志
類型:狀態標志。
功能:在進行無符號數運算的時候,CF記錄了運算結果的最高有效位向更高位的進位值,或從更高位的借位值。
DF標志
類型:控制標志。
功能:在串處理指令中,控制每次操作后SI、DI的遞變方式(同增或同減)。
DF=0,每次操作后SI、DI遞增
DF=1,每次操作后SI、DI遞減
ADC指令
格式:ADC 操作對象1,操作對象2
功能:
帶進位加法指令 ,利用了CF位記錄的進位值;
操作對象1=操作對象1+操作對象2+CF。
說明:
在8086CPU的指令集中,有的指令的執行會影響FLAG,如ADD、SUB、MUL、DIV、INC、OR、AND等,它們大都是運算指令,進行邏輯或算術運算;
有的指令的執行對FLAG沒有影響,如MOV、PUSH、POP等,它們大都是傳送指令。
在使用一條指令的時候,要注意這條指令的全部功能,包括執行結果會對FLAG的哪些標志位造成影響。
SBB指令
格式:SBB 操作對象1,操作對象2
功能:
帶借位減法指令 ,利用了CF位記錄的借位值;
操作對象1=操作對象1-操作對象2-CF。
PS: Intel 格式的匯編碼和ATT格式的匯編碼略有不同。 例如 Intel中的 mov 是 ATT 中的 movl 等。
ATT 是根據 AT&T(美國電話電報公司)命名的,AT&T運營貝爾實驗室多年, 貝爾實驗室是歷史上最大, 最成功的私有實驗室。 在這里, 著名的發明除了電話,還有射電天文望遠鏡, 晶體管, 數字交換機, C語言, Unix操作系統 。 此外還發現了電子波動性, 發明了信息論, 組織發射了第一顆通信衛星, 鋪設了第一條商用光纖等。
文章列表
全站熱搜