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