?? 指令.txt
字號:
標志寄存器
標志寄存器又稱程序狀態寄存器PSW (Program Status Word).
各機型標志寄存器的內容如下:
OF overflow flag 溢出標志 操作數超出機器能表示的范圍表示溢出,溢出時為1.
SF sign Flag 符號標志 記錄運算結果的符號,結果負時為1.
ZF zero flag 零標志 運算結果等于0時為1,否則為0.
CF carry flag 進位標志 最高有效位產生進位時為1,否則為0.
AF auxiliary carry flag 輔助進位標志 運算時,第3位向第4位產生進位時為1,否則為0.
PF parity flag 奇偶標志 運算結果操作數位為1的個數為偶數個時為1,否則為0.
DF direcion flag 方向標志 用于串處理.DF=1時,每次操作后使SI和DI減小.DF=0時則增大.
IF interrupt flag 中斷標志 IF=1時,允許CPU響應可屏蔽中斷,否則關閉中斷.
TF trap flag 陷阱標志 用于調試單步操作.
IOPL I/O privilege level I/O特權級 在保護模式下,用于控制對I/O地址空間的訪問.
NT nested task 嵌套任務標志
RF resume flag 重新啟動標志
VM virtual_8086 mode 虛8086模式位 VM=1時,可模擬8086處理器的程序設計環境.
AC alignment check mode 對準檢查方式位
VIF virtual interrupt flag 虛擬中斷標志
VIP virtual interrupt pending flag 虛擬中斷未決標志
ID identification flag 標識標志
DEBUG中標志位的符號表示:
FLAG NAME FLAG == TRUE (1) FLAG == FALSE (0)
OF 溢出(是/否) OV OVerflow NV Not oVerflow
DF 方向(減量/增量) DN DowN UP UP
IF 中斷(允許/關閉) EI Enable Interrupt DI Disable Interrupt
SF 符號(負/正) NG NeGative PL PLus
ZF 零(是/否) ZR ZeRo NZ Not Zero
AF 輔助進位(是/否) AC Auxiliary Carry NA Not Auxiliary
PF 奇偶(是/否) PE Parity Even PO Parity Odd
CF 進位(是/否) CY CarrY NC Not Carry
過程設計
--------------------------------------------------------------------------------
過程定義語句:PROC 和ENDP必須有名字,兩者成對出現.
procedure_name PROC [ NEAR | FAR ] ;要說明是NEAR過程或FAR過程.
...
RET ;RET 返回指令必須與[ NEAR | FAR ] 對應
procedure_name ENDP
注:主程序和所調用的過程在同一代碼段中,則定義說明為NEAR屬性
主程序和所調用的過程不在同一代碼段中,則定義說明為FAR屬性
過程文檔說明:
1.過程名
2.功能說明
3.占用寄存器、工作單元說明
4.輸入參數說明
5.輸出參數說明
現場保護及現場恢復的兩種方法:
1.利用PUSH指令將過程要占用的寄存器的內容保存在堆棧中,恢復時用POP指令從棧中取出.
如果在主程序用PUSH指令保護寄存器,則要在主程序中用POP指令恢復寄存器.
如果在過程中用PUSH指令保護寄存器,則要在過程中用POP指令恢復寄存器.
SUB1 PROC NEAR ;本例在過程中使用PUSH和POP
PUSH AX ;入棧保護 [into stack to protect]
PUSH BX
PUSH DX
...
POP DX ;出棧恢復 [out stack to restore]
POP BX
POP AX
RET
SUB1 ENDP
2.利用數據傳送指令將過程要占用的寄存器的內容保存到指定的內存單元,恢復時再取回到相應的寄存器中.
BUFFER DW 10 DUP(?) ;指定的內存單元 [specified memory block]
...
SUB1 PROC NEAR
MOV DI , OFFSET BUFFER ;將寄存器存入到內存單元保護 [save memory block to protecte register]
MOV [DI] , AX
MOV [DI+2] , BX
MOV [DI+4] , DX
...
MOV SI , OFFSET BUFFER ;從內存單元取回到相應的寄存器[restored register from memory block]
MOV AX , [SI]
MOV BX , [SI+2]
MOV DX , [SI+4]
RET
SUB1 ENDP
主程序和過程間參數傳遞的三種方法:寄存器傳遞、堆棧傳遞、存儲器傳遞
調用過程前,必須把操作中的加工處理數據傳送給過程,這些加工處理數據稱為輸入參數.
返回主程序前,把本次操作的最終結果傳遞給主程序,這些加工處理所得的結果稱為輸出參數.
尋址
--------------------------------------------------------------------------------
當操作數存放在存儲器時,存儲單元的物理地址有兩部分:段地址和偏移地址.
指令中操作數也可以不在基本規定的段區內,必須在指令中指定段寄存器,即段超越.
存取的約定段及段超越(可修改段),如下所示 :
存取方式 默認段 偏移地址 段超越
取指令 CS IP - - - -
堆棧操作 SS SP - - - -
源串 DS SI CS,ES,SS
目的串 ES DI - - - -
BP SS (EA) CS,DS,ES
一般數據 DS (EA) CS,ES,SS
注:EA=Effect Address即有效地址, - - - -表示不可以段超越
基址寄存器: BX , BP
變址寄存器: SI , DI
除基址BX , BP和變址SI , DI這四個寄存器可間接尋址外(即加上中括號[ ]),其它寄存器一律不準間接尋址.
與數據有關的尋址方式:
立即尋址 MOV AX , 常數
直接尋址 MOV AX , [常數] ;加上中括號 或 MOV AX , 變量名或標號
寄存器尋址 MOV AX , 通用寄存器
寄存器間接尋址 MOV AX , [(BX,BP,SI,DI)中的一個] ;以下四行均需加上中括號
寄存器相對尋址 MOV AX , [(BX,BP,SI,DI)中的一個 + 偏移量]
基址變址尋址 MOV AX , [基址寄存器 + 變址寄存器]
相對基址變址尋址 MOV AX , [基址寄存器 + 變址寄存器 + 偏移量]
與轉移地址有關的尋址方式(CALL指令也可用下列四種中任何一種尋址):
尋址方式 格式 轉移的有效地址
段內直接尋址 JMP SHORT 標號 IP=標號, CS值不變
段內間接尋址 JMP WORD PTR 標號[基/變址寄存器] IP=(EA), CS值不變
段間直接尋址 MP FAR PTR 標號 IP=標號的偏移地址,CS=標號的段對址
段間間接尋址 JMP DWORD PTR 標號[基/變址寄存器] IP=(EA) , CS=(EA-2)
數據傳送指令
MOV指令為雙操作數指令,兩個操作數中必須有一個是寄存器.
MOV DST , SRC // Byte / Word
執行操作: dst = src
1.目的數可以是通用寄存器, 存儲單元和段寄存器(但不允許用CS段寄存器).
2.立即數不能直接送段寄存器
3.不允許在兩個存儲單元直接傳送數據
4.不允許在兩個段寄存器間直接傳送信息
PUSH入棧指令及POP出棧指令: 堆棧操作是以"后進先出"的方式進行數據操作.
PUSH SRC //Word
入棧的操作數除不允許用立即數外,可以為通用寄存器,段寄存器(全部)和存儲器.
入棧時高位字節先入棧,低位字節后入棧.
POP DST //Word
出棧操作數除不允許用立即數和CS段寄存器外, 可以為通用寄存器,段寄存器和存儲器.
執行POP SS指令后,堆棧區在存儲區的位置要改變.
執行POP SP 指令后,棧頂的位置要改變.
XCHG(eXCHanG)交換指令: 將兩操作數值交換.
XCHG OPR1, OPR2 //Byte/Word
執行操作: Tmp=OPR1 OPR1=OPR2 OPR2=Tmp
1.必須有一個操作數是在寄存器中
2.不能與段寄存器交換數據
3.存儲器與存儲器之間不能交換數據.
XLAT(TRANSLATE)換碼指令: 把一種代碼轉換為另一種代碼.
XLAT (OPR 可選) //Byte
執行操作: AL=(BX+AL)
指令執行時只使用預先已存入BX中的表格首地址,執行后,AL中內容則是所要轉換的代碼.
地址傳送指令: LEA,LDS和LES
LEA(Load Effective Address) 有效地址傳送寄存器指令
LEA REG , SRC //指令把源操作數SRC的有效地址送到指定的寄存器中.
執行操作: REG = EAsrc
注: SRC只能是各種尋址方式的存儲器操作數,REG只能是16位寄存器
MOV BX , OFFSET OPER_ONE 等價于 LEA BX , OPER_ONE
MOV SP , [BX] //將BX間接尋址的相繼的二個存儲單元的內容送入SP中
LEA SP , [BX] //將BX的內容作為存儲器有效地址送入SP中
LDS(Load DS with pointer)指針送寄存器和DS指令
LDS REG , SRC //常指定SI寄存器。
執行操作: REG=(SRC), DS=(SRC+2) //將SRC指出的前二個存儲單元的內容送入指令中指定的寄存器中,后二個存儲單元送入DS段寄存器中。
LES (Load ES with pointer) 指針送寄存器和ES指令
LES REG , SRC //常指定DI寄存器
執行操作: REG=(SRC) , ES=(SRC+2) //與LDS大致相同,不同之處是將ES代替DS而已.
標志寄存器傳送指令: LAHF,SAHF,PUSHF和POPF
LAHF ( Load AH with Flags ) 標志位送AH指令
LAHF //將PSW寄存器中的低8位的狀態標志(條件碼)送入AH的相應位, SF送D7位, ZF送D6位......
執行操作: AH=PSW的低位字節。
SAHF ( Store AH into Flags ) AH送標志寄存器指令
SAHF //將AH寄存器的相應位送到PSW寄存器的低8位的相應位, AH的D7位送SF, D6位送ZF......
執行操作: PSW的低位字節=AH。
PUSHF ( PUSH the Flags) 標志進棧指令
PUSHF //將標志寄存器的值壓入堆棧頂部, 同時棧指針SP值減2
執行操作: SP=SP-1,(SP)=PSW的高8位, SP=SP-1, (SP)=PSW的低8位
POPF ( POP the Flags ) 標志出棧指令
POPF //與PUSHF相反, 從堆棧的頂部彈出兩個字節送到PSW寄存器中, 同時堆棧指針值加2
執行操作: PSW低8位=(SP), SP=SP+1, PSW高8位=(SP) , SP=SP+1
輸入輸出指令(IN,OUT):只限于使用累加器AX或AL與外部設備的端口傳送信息.
IN (INput)輸入指令:信息從I/O通過累加器傳送到CPU
IN AL , PORT //直接的字節輸入,PORT是外設端口編號(即端口地址),只能取 00H ~ 0FFH共256個端口地址.
IN AX , PORT //直接的字輸入,AX存儲連續兩個端口地址PORT+1,PORT
IN AL , DX //間接的字節輸入,端口地址范圍可通過DX設置為0000H ~ 0FFFFH共65536個端口地址
IN AX , DX //間接的字輸入
OUT( OUTput)輸出指令 :信息從CPU通過累加器傳送到I/O
OUT PORT , AL //直接的字節輸出,PORT規定與IN指令相同.
OUT PORT , AX
OUT DX , AL //間接的字節輸出
OUT DX , AX
MOV AL,05H OUT 27H, AL //將字節05H傳送到地址27H的端口
加法運算指令
ADD(ADD)加法指令
ADD DST , SRC //Byte/Word
執行操作: dst=dst+src
1.兩個存儲器操作數不能通過ADD指令直接相加, 即DST 和SRC必須有一個是通用寄存器操作數.
2.段寄存器不能作為SRC 和DST.
3.影響標志位Auxiliary Crray Flag ,Carry Flag, Overflow Flag, Parity Flag, Sign Flag 和Zero Flag ,如下所示:
CF 根據最高有效位是否有進(借)位設置的:有進(借)位時CF=1, 無進(借)位時CF=0.
OF 根據操作數的符號及其變化來設置的:若兩個操作數的符號相同,而結果的符號與之相反時OF=1, 否則為0.
ZF 根據結果來設置:不等于0時ZF=0, 等于0時ZF=1
SF 根據結果的最高位來設置:最高位為0, 則SF=0.
AF 根據相加時D3是否向D4進(借)位來設置:有進(借)位時AF=1, 無進(借)位時AF=0
PF 根據結果的1的個數時否為奇數來設置:1的個數為奇數時PF=0, 為偶數時PF=1
ADC( ADd with Carry)帶進位加法指令
ADC DST , SRC //Byte/Word
執行操作: dst=dst+src+CF //與ADD不同之處是還要加上進位標志位的值.
INC ( INCreament) 加1指令
INC OPR //Byte/Word
執行操作: OPR=OPR+1
1.OPR可以是寄存器和存儲器操作數, 但不能是立即數和段寄存器
2.影響標志位OF,SF,ZF,PF 和AF,不影響CF.
減法運算指令
SUB ( SUBtract ) 不帶借位的減法指令
SUB DST , SRC //Byte/Word
執行操作:dst=dst - src
1.DST和SRC尋址方式及規定與ADD相同.
2.影響全部標志位.(判斷標志位參見ADD)
SBB ( SuBtract with Borrow) 帶借位減法指令
SBB DST , SRC //Byte/Word
執行操作:dst= dst - src - CF
DEC ( DECrement ) 減1指令
DEC OPR //Byte/Word
執行操作:OPR = OPR - 1 //除CF標志位, 其余標志位都受影響.
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -