1.mov在上篇文章中已經介紹
2.PUSH和PoP指令都必鬚根據當前SP的內容來確定進棧或出棧的儲存單元,而且必須及時修改指標,以保證(SP)指向當前的棧頂。
(1) 堆棧的存取必須以字為單位,(IBM PC中不允許位元組堆棧),所以PUSH和POP指令只能作字操作。
(2) 它們可以使用初立即數以外的其他定址方式。
(3) 指令也可以指定段寄存器作為運算元,注意POP絕對不能使用程式碼片段(CS)寄存器。
(4) 這兩條指令不影響標誌位。
利用堆棧進行現場保護:
push AX
push BX
.
.其他要執行的程式
.
pop BX
pop AX
注意進出棧的順序。
3.
XCHG交換指令
格式為 XCHG OPRl, OPR2
執行操作: (OPRl) 〈一一〉 (OPR2)其中OPR表示運算元。該指令的兩個運算元中必須有一個在寄存器中,因此,它可以是寄存器之間;寄存器和儲存空間之間交換資訊,注意不能使用段寄存器。指令允許字和位元組操作,且不會影響標誌位。
4.累加器專用傳送指令
IN (input) 輸入
OUT (output) 輸出
XLAT(Translate) 換碼
這組指令只限於使用累加器AX和AL傳送資訊。
注意:
(1) 所有的I/O連接埠與CPU之間的通訊都由IN和OUT指令來完成。其中IN完成從I/O到CPU的資訊傳送,而OUT完成從CPU到I/O的資訊傳送。
(2) CPU只和累加器(AX或AL)進行接收或發送資訊,外部最多可以有64K個連接埠,連接埠號碼為0000H – FFFFH。
(3) 長格式:對於前256個連接埠,可以在指令中直接指定,這就是常格式的連接埠(PORT)。
(4) 短格式:當連接埠號碼大於等於256時,則必須先將連接埠號碼置於DX寄存器中,然後再利用IN或OUT進行資訊的傳遞。
(5) 注意,在利用IN/OUT進行資訊傳遞時,所有的連接埠號碼(或DX的內容)均為地址,而傳送的均為連接埠號碼的內容。
輸入、輸出指令不影響標誌位。
例 IN AX,28H
MOV DATA_WORD , AX
這兩條指令把地口28的內容經過AX傳送到儲存單元DATA_WORD中。
例 MOV DX,3FCH
IN AX,DX
從連接埠03FCH送一個字到AX寄存器中。
例 OUT 5, AL
從AL寄存器輸出一個位元組到連接埠5
5.XLAT換碼指令
格式為; XLAT OPR
或 XLAT
執行的操作: (AL) 〈一 ((BX)十(AL))
功能:將一種代碼轉換為另一種代碼。
在使用這條指令之前,應該先建立一個位元組表格,表格的首地址提前存入BX寄存器,需要轉換的代碼應該是相對於表格首地址的位移量也提前存放在AL寄存器中,表格的內容則是需要轉換的代碼,該指令執行後就可在AL中得到轉換後的代碼。
該指令可以使用XLAT或XLAT OPR兩種格式中的任一種,使用XLAT OPR時,OPR為表格的首地址(一般為符號地址),但在這裡的OPR只是為提高程式的可讀性而設定的,指令執行時只使用預先已存入BX中的表格首地址,而並不用彙編格式中指定的值。該指令不影后標誌位。
例 如(BX) = 0040H,(AL)=0FH,(Ds)=F000H
指令 XLAT
把 F0000H+0040H+0FH的內容送AL,所以指令執行後:(AL) = 2CH
即指令把AL中的代碼0FH轉換為2CH。
必須注意,由於AL為8位二進位位,所以表格的最大長度不能超過256。
6.地址傳送指令
LEA 有效地址送寄存器
LDS 指標送寄存器和DS
LES 指標送寄存器和ES
這一組指令完成把地址送到指定寄存器的功能。
1.LEA 有效地址送寄存器
格式: LEA REG,SRC
執行過程: (REG)<- SRC
完成功能: 指令將有效地址送到指定的寄存器中。
2.LDS 指標送寄存器和DS
格式: LDS REG,SRC
執行的操作:(REG)〈一(SRC)
(DS)〈- (SRC十2)
把源運算元指定的4個相繼位元組送到由指令指定的寄存器及DS寄存器中。該指令通常用來指定SI寄存器。
3.LES 指標送寄存器和ES
格式: LES REG,SRC
執行的操作:(REG)〈一(SRC)
(ES)〈- (SRC十2)
把源運算元指定的4個相繼位元組送到由指令指定的寄存器及ES寄存器中。該指令通常用來指定DI寄存器。
注意:以上三條指令,不能指定段寄存器,指令操作不影響標誌位
本組指令把變數的位移地址(LEA)或段地址和位移地址(LDS和LES)送給寄存器,以提供訪問變數的工具。
例 : LEA BX,[BX十SI十0F62H]
如指令執行前 (BX)=0400H,(SI)=003CH
則指令執行後 (BX)=0400十003C十0F62=139EH
必須注意,在這裡BX寄存器得到的是位移地址而不是該儲存單元的內容。
例: LDS SI,[10H]
如指令執行前 (DS)=C000H,(C0010H)=0180H,(C0012H)=2000H
則指令執行後 (S1)=0180H,(DS)=2000H
例 LES DI,[BX]
如指令執行前 (DS)=B000H,(BX)=080AH,(0B080AH)=05AEH,(0B080CH)=4000H
則指令執行後 (D1)=05AEH, (ES)=4000H
7. 標誌位寄存器傳送指令
LAHF 標誌寄存器的低位元組送AH
SAHF AH送標誌寄存器的低位元組
PUSHF 標誌進棧
POPF 標誌出棧
1.LAHF 標誌送AH指令
格式為: LAHF
執行的操作: (AH)〈- (PSW寄存器的低位元組)
2.SAHF AH送標誌寄存器指令
格式為: SAHF
執行的操作:(PSW的低位元組)一〉(AH)
3.PUSHF 標誌進棧指令
格式為; PUSHF
執行的操作: (SP) 〈- (SP)-2
((SP)+1,(SP))〈- (PSW)
4.POPF 標誌出棧
格式為:POPF
執行過程為: (PSW) 〈-- ((SP)十1,(SP))
(SP) 〈一 (SP)十2
這組指令中的LAHF和PUSHF不影響標誌位。SAHF相POPF則由裝入的值來確定標誌位的值