菜鷄日記——《彙編與介面技術》第3-3章 80X86指令系統 之 資料傳送指令
第3-3章 80X86指令系統
(能被CPU直接執行的指令組成的有機整體)
包括:
- 資料傳送指令
- 算術指令
- 邏輯指令
- 串處理指令
- 控制轉移指令
- 處理機控制與雜項操作指令
重點關注:
彙編格式、基本功能、支援的定址方式、對標誌位的影響、特殊要求
彙編格式
操作碼 | [(目標)運算元] | [(源)運算元] | …… | [(源)運算元] |
如:1)MOV AH, [2000H]
2)PUSH [2000H]
3)RET
資料傳送指令
- 通用資料傳輸指令(通用暫存器都可以用,如AX,AL,SP等):MOV、PUSH、POP、XCHG
傳送指令:MOV DST,SRC 執行操作:(DST)←(SRC)
1)DST、SRC不能同時為段暫存器(DS、ES等)
2)立即數不能直接送段暫存器 MOV DS,1234H ×
3)不允許使用AX、CX、DX存放EA(有效地址),BX允許
4)DST不能是立即數和CS暫存器
5)DST、SRC不能同時為儲存器定址(儲存器單元不能直接傳送資料,因為位寬不一定能匹配)
不影響標誌位
進棧指令、出棧指令:PUSH SRC 執行操作:先SP←SP-2,後(SP+1),(SP)←(SRC)
POP DST 執行操作:先(DST)←(SP+1),(SP),後SP←SP+2
1)堆疊是作業系統分配的先進後出的儲存區,段地址存放在SS暫存器中
2)低地址靠近棧頂,高地址靠近棧底
3)SP暫存器在任何時候都指向棧頂,進出棧後自動修改SP
4)堆疊操作必須以字為單位(即SP每次移動2位元組,要修改單位元組時運用AH、AL)
5)DST不能是CS暫存器,SRC和DST都不能是立即數 PUSH 1234H × POP 1234H ×
不影響標誌位
交換指令:XCHG OPR1,OPR2 執行操作:(OPR1)↔(OPR2)
1)不允許使用段暫存器
2)兩個運算元至少有一個在暫存器中,不能都是記憶體(記憶體間不能直接傳送資料)
不影響標誌位
- 累加器專用傳送指令(只限定使用AX暫存器):IN、OUT、XLAT
輸入指令:AX是目標運算元,源運算元是PORT(I/O裝置埠號的8位立即數)或DX,執行操作為:CPU←I/O
長格式:IN AL,PORT 執行操作:AL←(PORT) 位元組
IN AX,PORT 執行操作:AX←(PORT+1),(PORT) 字
短格式:IN AL,DX 執行操作:AL←(DX) 位元組
IN AX,DX 執行操作:AX←(DX+1),(DX) 字
(測試埠27H的第2位是否為1:
IN AL,27H
TEST AL,00000100B (與運算後更新標誌暫存器,00000001B時測試第0位)
JNZ ERROR)
輸出指令:目標運算元是PORT或DX,AX是源運算元,執行操作為:I/O←CPU
長格式:OUT PORT,AL 執行操作:(PORT)←AL 位元組
OUT PORT,AX 執行操作:(PORT+1),(PORT)←AX 字
短格式:OUT DX,AL 執行操作:(DX)←AL 位元組
OUT DX,AX 執行操作:(DX+1),(DX)←AX 字
(輸入指令與輸出指令都要注意)
1)通過指定的埠號從I/O裝置輸入或輸出資料
2)前256個埠號00H~0FFH可直接用長格式指定(PORT限定8位)
3)埠號大於0FFH則要儲存到DX中,再用短格式指定
不影響標誌位
換碼指令:XLAT 或 XLAT OPR 執行操作:AL←(BX+AL)
BX暫存器中存放表格的首地址,將該首地址偏移AL後的記憶體內容賦給AL
(例:MOV BX,OFFSET TABLE ;將變數TABLE的偏移地址送到BX,等價於LEA BX,TABLE
MOV AL,3
XLAT
AL的內容從3對映到了表格的3號位的內容)
1)位元組表格(長度<=256)
2)首地址→BX,偏移量→AL
3)有運算元時,自動將OPR賦給BX
不影響標誌位
- 地址傳送指令:LEA、LDS、LES
有效地址送暫存器指令:LEA REG,SRC 執行操作:REG←SRC
指標送暫存器和DS指令:LDS REG,SRC 執行操作:REG←(SRC),同時DS←(SRC+2)
指標送暫存器和ES指令:LES REG,SRC 執行操作:REG←(SRC),同時ES←(SRC+2)
都要注意:
1)地址MEM長為16位,用兩個位元組儲存
2)指標佔4位元組,高位的2位元組16位的儲存段地址,低2位16位的儲存偏移地址
3)REG不能是段暫存器,SRC必須是暫存器定址方式
不影響標誌位
- 標誌暫存器傳送指令:LAHF、SAHF、PUSHF、POPF
標誌傳送AH指令:LAHF 執行操作:AH←(FLAGS的低位元組)
根據第2章標誌暫存器的結構可知,該指令將SF、ZF、AF、PF、CF五個標誌位傳至AH的第7、 6、4、2、0位,第5、3、1位未定義
AH送標誌暫存器指令:SAHF 執行操作:(FLAGS的低位元組)←AH
標誌進棧指令:PUSHF 執行操作:先SP←SP-2,後(SP+1),(SP)←(FLAGS)
標誌出戰指令:POPF 執行操作:先(FLAGS)←(SP+1),(SP),後SP←SP+2
影響標誌位
- 其他