文章出處

 

尋址方式:

[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)=01011000B
 
SI為源變址寄存器,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操作系統 。 此外還發現了電子波動性, 發明了信息論, 組織發射了第一顆通信衛星, 鋪設了第一條商用光纖等。
 

文章列表


不含病毒。www.avast.com
arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()