彙編語言重點總結(三)

一、通用數據傳送指令

1、傳送指令 MOV (move)

指令的彙編格式:MOV DST,SRC

指令的基本功能:(DST)

指令支持的尋址方式:目的操作數和源操作數不能同時用存儲器尋址方式,這個限制適用於所有指令。指令的執行對標誌位的影響:不影響標誌位。

指令的特殊要求:目的操作數DST和源操作數SRC不允許同時為段寄存器;

目的操作數DST不能是CS,也不能用立即數方式。

2、進棧指令 PUSH (push onto the stack)

出棧指令 POP (pop from the stack)

指令的彙編格式:PUSH SRC ;POP DST

指令的基本功能:PUSH指令在程序中常用來暫存某些數據,而POP指令又可將這些數據恢復。PUSH SRC (SP)

POP DST (DST)

指令支持的尋址方式:push 和 pop指令不能不能使用立即數尋址方式。

指令對標誌位的影響:PUSH 和 POP指令都不影響標誌位。

指令的特殊要求:PUSH 和 POP指令只能是字操作,因此,存取字數據後,SP的修改必須是+2 或者 -2; POP指令的DST不允許是CS寄存器;

3、交換指令 XCHG (exchange)

指令的彙編格式:XCHG OPR1,OPR2

指令的基本功能:(OPR1)(OPR2)

指令支持的尋址方式:一個操作數必須在寄存器中,另一個操作數可以在寄存器或存儲器中。

指令對標誌位的影戲:不影響標誌位。

指令的特殊要求:不允許使用段寄存器。

二、累加器專用傳送指令

4、輸入指令 IN (input)

輸出指令 OUT (output)

指令的彙編格式:IN ac,port port<=0FFH

IN ac,DX port>0FFH

OUT port,ac port<=0FFH

OUT DX,ac port>0FFH

指令的基本功能:對8086及其後繼機型的微處理機,所有I/O端口與CPU之間的通信都由輸入輸出指令IN和OUT來完成。IN指令將信息從I/O輸入到CPU,OUT指令將信息從CPU輸出到I/O端口,因此,IN和OUT指令都要指出I/O端口地址。

IN ac,port port<=0FFH (AL)

IN ac,DX port>0FFH (AL)

OUT port,ac port<=0FFH (port)

OUT DX,ac port>0FFH (DX)

指令對標誌位的影響:不影響標誌位。指令的特殊要求:只限於在AL或AX與I/O端口之間傳送信息。傳送16位信息用AX,傳送8位信息用AL,這取決於外設端口的寬度。

5、換碼指令 XLAT (translate)

指令的彙編格式:XLAT opr 或 XLAT

指令的基本功能:這條指令根據AL寄存器提供的位移量,將BX指使的字節表格中的代碼換存在AL中。 (AL)

指令對標誌位的影響:不影響標誌位。

指令的特殊要求:所建字節表格的長度不能超過256字節,因為存放位移量的是8位寄存器AL。opr為表格的首地址,因為opr所表示的偏移地址已存入BX寄存器,所以opr在換碼指令中可有可無,有則提高程序的可讀性。

三、地址傳送指令

6、有效地址傳送器 LEA (load effective address)

指令的彙編格式:LEA reg,src

指令的基本功能:LEA指令把源操作數的有效地址送到指定的寄存器,這個有效地址是由src選定的一種存儲器尋址方式確定的。

指令支持的尋址方式:各種存儲器尋址方式。

指令對標誌位的影響:不影響標誌位。

指令的特出要求:指令中reg不能是段寄存器;

7、指針送寄存器和DS LDS (load DS with point)

指針送寄存器和ES LES (load ES with point)

指令的彙編格式:LDS reg,src LES reg,src

指令的基本功能:LDS和LES指令把確定內存單元位置的偏移地址送寄存器,段地址DS或ES。這個偏移地址和段地址(也稱地址指針)是由src指定的兩個相繼字單元提供的。

LDS reg,src (reg)

LES reg,src (reg)

指令支持的尋址方式:src必須為存儲器尋址方式

指令對標誌位的影響:不影響標誌位。

指令的特殊要求:指令中REG不能是段寄存器;

四、標誌寄存器傳送指令

8、標誌寄存器的低字節送AH LAHF (load AH with FLAGS)

指令的彙編格式:LAHF

指令的基本功能:(AH)

指令對標誌位的影響:不影響標誌位

9、AH送標誌寄存器低字節 SAHF(store AH into FLAGS)

指令的格式:SAHF

指令的基本功能:(FLAGS)0-7

指令對標誌位的影響:由裝入值來確定標誌位的值。

10、標誌進棧 PUSHF (push the flags)

指令的彙編格式:PUSHF

指令的基本功能:(SP)

指令對標誌位的影響:不影響標誌位。

11、標誌出棧 POPF (pop the FLAGES)

指令的彙編格式:POPF

指令的基本功能:(FLAGS)0-15

指令對標誌位的影響:由裝入值來確定標誌位的值。

[算術指令]

一、加法指令

12、加法指令 ADD (addition)

指令的彙編格式:add dst,src

指令的基本功能:(dst)

指令支持的尋址方式:他們兩個操作數不能同時為存儲器尋址。即為除源操作數為立即數的情況外,源操作數和目地操作數必須有一個寄存器尋址方式。

指令對標誌位的影響:SF=1 加法結果為負數(符號位為1)

SF=0 加法結果為正數(符號位為0)

ZF=1 加法結果為零

ZF=0 加法結果不為零

CF=1 最高有效位向高位有進位

CF=0 最高有效位向高位無進位

OF=1 兩個同符號數相加(正數+正數或負數+負數),結果符號與其相反。

OF=0 兩個不同符號數相加,或同符號數相加,結果符號與其相同。

13、帶進為加法指令 ADC (add with carry)

指令的彙編格式:ADD dst,src

指令的基本功能:(dst)

指令支持的尋址方式:他們兩個操作數不能同時為存儲器尋址。即為除源操作數為立即數的情況外,源操作數和目地操作數必須有一個寄存器尋址方式。

指令對標誌位的影響:SF=1 加法結果為負數

SF=0 加法結果為正數

ZF=1 加法結果為零

ZF=0 加法結果不為零

CF=1 最高有效位向高位有進位

CF=0 最低有效位相高位無進位

OF=1 兩個同符號數相加,結果符號與其相反,

OF=0 兩個同符號數相加,或同符號相加,結果符號與其相同

14、加1指令 INC (increament)

指令的彙編格式:INC opr

指令的基本功能:(opr)

指令支持的尋址方式 可以使用除立即數方式外的任何尋址方式

指令對標誌位的影響:SF=1 加法結果為負數

SF=0 加法結果為正數

ZF=1 加法結果為零

ZF=0 加法結果不為零

OF=1 兩個同符號數相加,結果符號與其相反,

OF=0 兩個同符號數相加,或同符號相加,結果符號與其相同。

二、減法指令

15、減法指令 SUB (subtract)

指令的彙編格式:SUB dst,src

指令的基本功能:(dst)

指令支持的尋址方式:他們兩個操作數不能同時為存儲器尋址。即為除源操作數為立即數的情況外,源操作數和目地操作數必須有一個寄存器尋址方式。

指令對標誌位的影響:SF=1 減法結果為負數(符號位為1)

SF=0 減法結果為正數(符號位為0)

ZF=1 減法結果為零

ZF=0 減法結果不為零

CF=1 二進制減法運算中最高有效位向高位有借位(被減數小於減數,不夠減的情況)

CF=0 二進制減法運算中最高有效為向高位無借位(被減數〉=減數,夠減的情況)

OF=1 兩數符號相反(正數-負數,或負數-正數),而結果符號與減數相同。

OF=0 同符號數相減時,或不同符號數相減,其結果符號與減數不同。

16、帶借位減法指令 SBB (subtract with borrow)

指令的彙編格式:SBB dst,src

指令的基本功能:(dst)

指令支持的尋址方式:他們兩個操作數不能同時為存儲器尋址。即為除源操作數為立即數的情況外,源操作數和目地操作數必須有一個寄存器尋址方式。

指令對標誌位的影響:SF=1 減法結果為負數(符號位為1)

SF=0 減法結果為正數(符號位為0)

ZF=1 減法結果為零

ZF=0 減法結果不為零

CF=1 二進制減法運算中最高有效位向高位有借位(被減數小於減數,不夠減的情況)

CF=0 二進制減法運算中最高有效為向高位無借位(被減數〉=減數,夠減的情況)

OF=1 兩數符號相反(正數-負數,或負數-正數),而結果符號與減數相同。

OF=0 同符號數相減時,或不同符號數相減,其結果符號與減數不同。

17、減1指令 DEC (decrement)

指令的彙編格式:DEC opr

指令的基本功能:(opr)

指令支持的尋址方式:可以使用除立即數方式外的任何尋址方式。

指令對標誌位的影響:SF=1 減法結果為負數(符號位為1)

SF=0 減法結果為正數(符號位為0)

ZF=1 減法結果為零

ZF=0 減法結果不為零

OF=1 兩數符號相反(正數-負數,或負數-正數),而結果符號與減數相同。

OF=0 同符號數相減時,或不同符號數相減,其結果符號與減數不同。

18、比較指令 CMP (compare)

指令的彙編格式:CMP opr1,opr2

指令的基本功能:(opr1)-(opr2),根據相減結果設置條件碼,但不回送結果。

指令支持的尋址方式:他們兩個操作數不能同時為存儲器尋址。即為除源操作數為立即數的情況外,源操作數和目地操作數必須有一個寄存器尋址方式。

指令對標誌位的影響:SF=1 減法結果為負數(符號位為1)

SF=0 減法結果為正數(符號位為0)

ZF=1 減法結果為零

ZF=0 減法結果不為零

CF=1 二進制減法運算中最高有效位向高位有借位(被減數小於減數,不夠減的情況)

CF=0 二進制減法運算中最高有效為向高位無借位(被減數〉=減數,夠減的情況)

OF=1 兩數符號相反(正數-負數,或負數-正數),而結果符號與減數相同。

OF=0 同符號數相減時,或不同符號數相減,其結果符號與減數不同。

19、求補指令 NEG (negate)

指令的彙編格式:NEG opr

指令的基本功能:(opr)

指令支持的尋址方式:可以使用除立即數方式外的任何尋址方式。

指令對標誌位的影響:CF=1 不為0的操作數求補時

CF=0 為0的操作數求補時

OF=1 操作數為-128(字節運算)或操作數為-32768(字運算)

OF=0 當求補運算的操作數不為-128(字節)或-32768(字)時

三、乘法指令

20、無符號乘法指令 NUL (unsigned multiple)

有符號乘法指令 IMUL(signed muliple)

指令的彙編格式:NUL src IMUL src

指令的基本功能:(AX)

指令支持的尋址方式:src可以使用除立即數方式以外的任一種尋址方式。

指令對標誌位的影響:乘法指令隻影響標誌位CF和OF,其他條件碼位無定義。

MUL指令的條件碼設置為:

CF OF=0 0 乘積的高一半為0(字節操作的(AH)或字操作的(DX))

CF OF=1 1 乘積的高一半不為0

IMUL指令的條件碼設置為:

CF OF=0 0 乘積的高一半為低一半的符號擴展.

CF OF=1 1 其他情況

指令的特殊要求:MUL和IMUL指令的區別僅在於操作數是無符號還是帶符號數,它們的共同點是,指令中只給出源操作數src,目的操作數是隱含的,它只能是累加器(字運算為AX,字節運算為AL)。隱含的乘積寄存器是AX或DX(高位)和AX(低位)。

四、符號擴展指令

21、節擴展為字 CBW (convert byte to word)

指令的彙編格式:CBW

指令的基本功能:(AH)=00H 當(AL)的最高有效位為0時

(AH)=FFH 當(AL)的最高有效位為1時

指令對標誌位的影響:不影響標誌位

指令的特殊要求:這是條無操作數的指令,進行符號擴展的操作數必須存放在AL寄存器 AX寄存器中。

22、字擴展為雙字 CWD (convert word to double word)

指令的彙編格式:CWD

指令的基本功能:(DX)=0000H 當(AX)的最高有效位為0時

(DX)=FFFFH 當(AX)的最高有效位為1時

指令對標誌位的影響:不影響標誌位

指令的特殊要求:這是條無操作數的指令,進行符號擴展的操作數必須存放在AL寄存器或AX寄存器中。

五、除法指令

23、無符號數除法 DIV (unsigned divide)

帶符號數除法 IDIV (singed divide)

指令的彙編格式:DIV src IDIV src

指令的基本功能:字操作

(AL)

字節操作

(AX)

指令支持的尋址方式:src作為除數,可用除立即數以外的任一種尋址方式來取得。

指令對標誌位的影響:不影響條件碼。

指令的特殊要求:除法指令要求字操作時,被除數必須為32位,除數是16位,商和餘數是16位的;字節操作時,被除數必須為16位,除數是8位,得到的商和餘數是8位的。

六、十進制調整指令

[邏輯指令]

一、邏輯運算

指令的格式:AND dst,src

指令的基本功能:(dst)

指令支持的尋址方式:兩個操作數不能同時為存儲器尋址。即為除源操作數為立即數的情況外,源操作數和目地操作數必須有一個寄存器尋址方式。

指令對標誌位的影響:指令執行後 CF 和 OF 置零,AF無定義。

SF=1 指令執行後的結果為負數(符號位為1)

SF=0 指令執行後的結果為正數(符號位為0)

ZF=1 指令執行後的結果為零

ZF=0 指令執行後的結果不為零

PF=1 結果操作數中1的個數為偶數時置1

PF=0 結果操作數中1的個數為奇數時置0

25、邏輯或 OR (logic or)

指令的彙編格式:OR dst,src

指令的基本功能:(dst)

指令支持的尋址方式:兩個操作數不能同時為存儲器尋址。即為除源操作數為立即數的情況外,原操作數和目的操作數必須有一個寄存器尋址方式。

指令對標誌位的影響:令執行後 CF 和 OF 置零,AF無定義。

SF=1 指令執行後的結果為負數(符號位為1)

SF=0 指令執行後的結果為正數(符號位為0)

ZF=1 指令執行後的結果為零

ZF=0 指令執行後的結果不為零

PF=1 結果操作數中1的個數為偶數時置1

PF=0 結果操作數中1的個數為奇數時置0

26、邏輯非 NOT (logic not)

指令的彙編格式:NOT orc

指令的基本功能:(dst)

指令支持的尋址方式:除立即數尋址方式以外的其餘尋址方式

指令對標誌位的影響:對標誌位無影響

27、異或 XOR (exclusice or)

指令的彙編格式:XOR dst,src

指令的基本功能:(dst)

指令支持的尋址方式:兩個操作數不能同時為存儲器尋址。即為除源操作數為立即數的情況外,原操作數和目的操作數必須有一個寄存器尋址方式。

指令對標誌位的影響:令執行後 CF 和 OF 置零,AF無定義。

SF=1 指令執行後的結果為負數(符號位為1)

SF=0 指令執行後的結果為正數(符號位為0)

ZF=1 指令執行後的結果為零

ZF=0 指令執行後的結果不為零

PF=1 結果操作數中1的個數為偶數時置1

PF=0 結果操作數中1的個數為奇數時置0

28、測試指令 TEST

指令的彙編格式:TEST opr1,opr2

指令的基本功能:(opr1)與(opr2)

指令支持的尋址方式:兩個操作數不能同時為存儲器尋址,即為除源操作數為立即數的情況外,源操作數和目的操作數必須有一個寄存器尋址方式。

指令對標誌位的影響:令執行後 CF 和 OF 置零,AF無定義。

SF=1 指令執行後的結果為負數(符號位為1)

SF=0 指令執行後的結果為正數(符號位為0)

ZF=1 指令執行後的結果為零

ZF=0 指令執行後的結果不為零

PF=1 結果操作數中1的個數為偶數時置1

PF=0 結果操作數中1的個數為奇數時置0

二、移位指令

29、邏輯左移 SHL (shift logical left)

指令的彙編格式:SHL dst,cnt

指令的基本功能:SHL指令向左逐位移動cnt次,每次逐位移動後,最低位用0來補充,最高位移入CF。

指令支持的尋址方式:目的操作數dst可以是除立即數外的任何尋址方式。移位次數(或位數)cnt=1時,1可以直接寫在指令中,cnt〉1時,cnt必須放入CL寄存器中。

指令對標誌位的影響:CF=移入的數值

OF=1 當cnt=1時,移動後最高位的值發生變化。

OF=0 當cnt=1時,移動時最高位的值未發生變化。

SF、ZF、PF根據移動後的結果設置。

彙編語言重點總結(三)


分享到:


相關文章: