天天看點

彙編語言期末複習不挂科——知識點總結(二)

資料傳送指令

傳送指令MOV

格式如下:MOV Reg/Mem,Reg/Mem/Imm

寄存器Reg 存儲器Mem 立即數Imm

注意:①兩個操作數的資料類型要相同,要同為8位、16位

②兩個操作數不能同時為段寄存器,

③代碼段寄存器CS不能為目的操作數,但可作為源操作數

④立即數不能直接傳給段寄存器

⑤立即數不能作為目的操作數

⑥指令指針IP,不能作為MOV指令的操作數

⑦兩個操作數不能同時是存儲單元

彙編語言期末複習不挂科——知識點總結(二)

傳送—— 填充指令

是把位數短的資料傳送給位數長的目的操作數

MOVSX/MOVZX Reg/Mem, Reg/Mem/Imm

MOVSX用符号位填充,MOVZX用0來填充

交換指令XCHG

XCHG Reg/Mem,Reg/Mem

作用是交換兩個寄存器,寄存器不能是段寄存器,兩個操作數不能同時為記憶體變量

取有效位址指令LEA

指令LEA是把一個記憶體變量的有效位址送給指定的寄存器,格式:LEA Reg,Mem

LEA指令和OFFSET的聯系與差別

相同:都是取偏移指令的操作

注意事項:1.lea、offset指令的源操作數必須是記憶體操作數

2.lea、offset指令的目的操作數必須是16位寄存器

3.lea指令不影響狀态标志寄存器内容。

差別:

4.offset指令的源操作數不能是下标(類似數組),lea可以。

5.offset在彙編時生效,lea在指令執行時才生效。

取段寄存器指令

LDS/LES Reg,Mem

該組指令的功能是把記憶體單元的一個低字傳送給指令中指定的16位寄存器,把随後的一個高字傳給相應的段寄存器。

若Reg是16位寄存器,那麼Mem必須是32位指針

進棧操作

PUSH Reg/Mem

出棧操作

POP Reg/Mem

轉換指令XLAT

無操作數,但有兩個隐含操作數BX和AL

指令格式如下:XLAT/XLATB,其功能是把BX的值作為記憶體位元組數首位址,下标為AL的數組元素的值傳送給AL

FLAG寄存器

  • ZF标志,零标志:計算結果為0置1,不為0置0
  • PF标志,奇偶标志:計算結果二進制數有奇數個1還是偶數個1,奇數個1寫0,偶數個1寫1
  • SF标記,符号标記:運算結果為正,置0;為負,置1
  • CF标志,進位标志:最高位是否有進位或錯誤,有置1,沒有置0
  • OF标志,溢出标志:8位數是否超過-128到127,是溢出置1
  • AF标志,輔助進位标志,低4位是否向高4位進位或借位,是置1,否置0

算術運算指令

加法指令

1.ADD加法指令:把源操作數的值加到目的操作數

2.ADC帶進位加指令:把源操作數和進位标志CF一起加到目的操作數

3.INC指令:操作數的值加1

4.交換加指令XADD:先交換兩個操作數的值,在鏡像加法運算

減法指令

1.SUB減法指令:從目的操作數中減去源操作數

2.SBB帶借位減法:把源操作數和标志位CF的值從目的操作數中一起減去

3.DEC減法:把源操作數的值減去1

4.求補指令NEG:改變操作數的正負号

乘法指令

MUL指令:隐含目的操作數,把源操作數和AL(AX)的值相乘儲存到AX(DX+AX)中

除法指令

DIV指令:

彙編語言期末複習不挂科——知識點總結(二)

類型轉換指令

系統提供了四條資料類型轉換指令:CBW、CWD、CWDE、CDQ

CBW位元組轉換為字指令:隐含操作數AH和AL,其功能是用AL的符号位去填充AH

CWD字轉換為雙字指令:隐含操作數DX和AX,其功能是用AX的符号位去填充DX

邏輯運算指令

邏輯與指令

指令格式:AND Reg/Mem,Reg/Mem/Imm

彙編語言期末複習不挂科——知識點總結(二)

邏輯或指令

指令格式:OR Reg/Mem,Reg/Mem/Imm

彙編語言期末複習不挂科——知識點總結(二)

邏輯非

指令格式:NOT Reg/Mem

彙編語言期末複習不挂科——知識點總結(二)
彙編語言期末複習不挂科——知識點總結(二)

TEST指令

格式:TEST Reg/Mem,Reg/Mem/Imm

功能是對兩個操作數進行邏輯與運算,但結果不送至目的操作數,隻是影響狀态标志

作用是檢測一些條件是否滿足,但又不希望改變操作數,即使用于檢查一個位元組或字中的某些特定位是否有一位為1

移位指令

1.SHL指令(邏輯左移)

相當于将數倍增

彙編語言期末複習不挂科——知識點總結(二)

2.SHR指令(邏輯右移)

将一個無符号數向右移動,左邊出現空位補0,右邊低位移至CF

彙編語言期末複習不挂科——知識點總結(二)

3.SAL指令(算術左移)

SAL指令同SHL,實際上SHL和SAL是同一條指令的兩種助記符,它們執行的操作完全一樣。

4.SAR指令(算術右移)

SAR類似于SHR,SAR同SHR的差別是:SHR連同符号位一起右移,左邊最高位出現的空位補0;而SAR右移時符号位不動,左邊出現的空位補上符号位的值。

其中值得注意的一點是:如果目的操作數是負數,且其中具有1的位數移出後,則SAR指令産生的結果與用整數IDIV指令産生的結果不一樣。

例如:-5經SAR右移之後得-3,IDIV之後為-2

5.ROL指令(循環左移)

功能:每執行一次,把最高位移到最低位,同時還把最高位移到CF

彙編語言期末複習不挂科——知識點總結(二)

6.ROR指令(循環右移)

與ROL指令類似

彙編語言期末複習不挂科——知識點總結(二)

7.RCL指令(通過進位循環左移)

RCL指令對目的操作數1位元組或字中的各位循環左移,進位标志CF被看作目的操作數的“一部分”。每執行一次,CF的值循環移入目的操作數的低位,而目的操作數的最高位移入CF。

彙編語言期末複習不挂科——知識點總結(二)

8.RCR指令(通過進位循環右移)

RCR與RCL類似,

彙編語言期末複習不挂科——知識點總結(二)

比較指令CMP

功能:用第二個操作數去減第一個操作數,并根據所得的差設定有關标志位,為随後的條件轉移指令提供條件,但并不儲存該差,是以不會改變指令中的操作數。

循環指令

CX寄存器中存放循環次數,一般循環跳轉是,CX先減1,後判斷CX是否為0

LOOP 标号

彙編語言期末複習不挂科——知識點總結(二)

相等或為零循環指令

LOOPE/LOOPZ 标号

彙編語言期末複習不挂科——知識點總結(二)
彙編語言期末複習不挂科——知識點總結(二)

LOOPNE/LOOPNZ 标号

彙編語言期末複習不挂科——知識點總結(二)
彙編語言期末複習不挂科——知識點總結(二)

循環計數器為零轉指令

彙編語言期末複習不挂科——知識點總結(二)

轉移指令

1.無條件轉移指令JMP

格式:JMP 标号

2.條件轉移指令

彙編語言期末複習不挂科——知識點總結(二)
彙編語言期末複習不挂科——知識點總結(二)
彙編語言期末複習不挂科——知識點總結(二)

字元串操作指令

字元串操作指令的實質是對一片連續存儲單元進行處理,這片存儲單元是隐含指針DS:SI或ES:DI來指定的。

字元串操作指令可對記憶體單元按位元組、字或雙字進行處理,并能根據操作對象的位元組數使變址寄存器SI和DI增減1、2、4.

具體規定如下:

(1)當DF=0時,變址寄存器SI(和DI)增加1、2、4

(2)當DF=1時,變址寄存器SI(和DI)減少1、2、4

執行個體:字元串輸出

方法1:利用40号中斷功能,BX=1,CX=輸出字元個數,DS:DX指向要輸出的串首

彙編語言期末複習不挂科——知識點總結(二)

方法2:利用9号中斷功能。DS:DX指向要輸出的串首,一直輸出到“$”結束。

彙編語言期末複習不挂科——知識點總結(二)

字元串輸入

方法:利用OAH号中斷功能,DS:DX指向存入的首位址。其中,DS:DX内容是輸入的最大位元組數,是需要事先設定好的;DS:DX+1是實際輸入的位元組數,是輸入成功後的傳回值;DS:DX+2是真正的存入的内容首位置。

彙編語言期末複習不挂科——知識點總結(二)
彙編語言期末複習不挂科——知識點總結(二)

取字元串資料指令LODS

格式:LODS source ;source為字元串源位址

LODSB/LODSW ;位元組/字

功能:LODS指令将SI指向的源串元素根據其位址表達式的屬性來決定讀取一個位元組、字或雙字,将其傳送到AL,AX,同時根據DF和串的類型修改SI的内容使之指向串的下一個元素。

該指令不涉及目标串,故DI的值保持不變。一般使用LODS指令不加重複字首。

彙編語言期末複習不挂科——知識點總結(二)

-存字元串資料置零STOS

格式:STOS 記憶體位址 ;記憶體位址為目标字元串的目的位址

STOSB/STOSW ;位元組/字

功能:STOS指令将累加器AL、AX或EAX的内容傳送到由ES:DI所指向的目的串中,同時根據DF和串的類型修改DI以指向下一個串元素。

注意:LODS,STOS指令都不影響狀态标志寄存器的狀态。

彙編語言期末複習不挂科——知識點總結(二)

字元串傳送指令MOVS

格式:MOVS 目的串的目的位址;源字元串源位址

MOVSB/MOVSW ;位元組/字

功能:MOVS指令是把DS:SI所指向的位元組、字或雙字傳送給ES:DI所指向的記憶體單元,并根據标志位DF和串的類型修改寄存器DI和SI。指令的執行不影響任何标志位。

MOVS指令前可以加字首REP成為REP MOVS,其作用如同以下的指令序列:

L:MOVS

LOOP L

彙編語言期末複習不挂科——知識點總結(二)

字元串比較指令CMPS

格式:CMPS source,destination

CMPSB/SMPSW

CMPSD

功能:CMPS指令是把DS:SI和ES:DI指向的位元組、字或雙字的值相減,将結果反映到狀态标志位上,而不送至任何一個操作數。同時修改SI和DI使之指向下一個元素。标志位AF,CF,OF,PF,SF和ZF反映了目的串和源串對應元素之間的關系。

字元串掃描指令SCAS

格式:SCAS destination ;destination 為掃描累加

SCASB/SCASW ;器值的字元串位址

SCASD ;位元組/字

功能:SCAS指令從累加器AL,AX中減去由ES:DI指向的目标串中的元素,結果不送到任何地方,隻改變狀态标志位;同時,根據DF和串的類型修改DI,使之指向串的下一個元素。受影響的标志位包括AF,CF,OD,PF,SF和ZF.

十分重要:
實作一個字元的輸入
AH=1
INT 21H
AL=輸入的字元
實作一個字元的輸出
AH=2
DL=輸出的字元
INT 21H      

繼續閱讀