2.2.1.7 邏輯指令
1) 邏輯運算
a) AND
b) OR
c) NOT
a) 不允許使用立即數
d) XOR 異或
e) TEST 做與運算,但是不保存結果,只根據結果設置條件碼
f) 除了NOT不允許使用立即數,其他的四種,只有源操作數可以是立即數,至少有一個操作數必須在寄存器中,另一個操作數可以使用任意尋址方式
2.2.1.8
2) 位測試並修改指令
a) BT 位測試
i. BT DST, SRC 將目的操作數中,由源操作數指定位的值,送CF
b) BTS 位測試並置1
i. 將目的操作數中,由源操作數指定位的值,送CF,並且將目的操作數該位置的值+1
c) BTR 位測試並置0
i. 將目的操作數中,由源操作數指定位的值,送CF,並且將目的操作數該位置的值置爲0
d) BTC 位測試並變反
i. 將目的操作數中,由源操作數指定位的值,送CF,並且將目的操作數該位置的值變反
e) SRC,可以使用,立即數或者寄存器方式,直接指明是第幾位,也可以用任意一字寄存器或雙字寄存器的內容給出同一個值
f) 目的操作數可以是用除了立即數之外的任意一種尋址方式
g) 因爲目的操作數的字長最大爲32位,所以位位置的範圍是0~31
3) 位掃描指令
a) BSF 正向位掃描
i. 從0位置開始,左←右
ii. 目的是檢索第一個爲1 的位置,並且記錄,如果遇到第一個爲1 的位,則將ZF置0,並把位置裝入目的存儲器中;如果源操作數爲0àZF= 1,此時目的存儲器無定義
iii. 源操作數可以使用除立即數意外的任意一種尋址方式,目的操作數必須用字或雙字寄存器
b) BSR 反向位掃描
i. 自左à右掃描
ii. 其他與BSF一致
4) 移位指令
a) SHL 邏輯左移
i. SHL OPR,CNT
ii. CNT大於1時,移位次數存放在CL中,直接用CL代替CNT,當=1 時,直接寫1
b) SHR
c) SAL 算術左移
i. 與SHL一致
d) SAR
i. SAR OPR,CNT
ii. CNT大於1時,移位次數存放在CL中,直接用CL代替CNT,當=1 時,直接寫1
iii. 最高位右移,補其本身,本身是0,補0,是1,補1
e) ROL 循環左移
f) ROR
g) RCL 帶進位左移
h) RCR
i) SHLD 雙精度左移
j) SHRD
2.2.1.8 串處理指令
1) MOVS
2) CMPS
3) SCAS 串掃描
4) LODS 從串取
5) STOS 存入串
6) INS 串輸入
7) OUTS 串輸出
8) 串處理的指令處理存放在存儲器中的數據串
9) 配合以上指令使用的前綴有:
a) REP
b) REPE/REPN
c) REPNE/REPXZ
10) 與REP相配合工作的MOVS,STOS,LODS,INS,OUTS
a) REP str
i. 重複str操作,知道CX計數器中的值爲0
b) MOVS
i. MOVSB
ii. MOVSW
iii. MOVSD
iv. 目的操作數必須存儲在ES,源操作數必須存儲在DS,源串允許使用段超越前綴
v. 源串首地址存放在SI,目的串首地址存放在DI,串長度存放在CX計數器中
vi. CLDàDF=0,地址自動增量;STDàDF=1,地址自動減量
vii. 執行MOVS的準備工作 P77
1. 源串首地址存放在SI,目的串首地址存放在DI
2. 串長度存放在CX計數器中
3. 建立方向標誌
c) STOS 存入串指令
i. STOS
ii. STOSB
iii. STOSW
iv. STOSD
v. 將存放在AL\AX\EAX的內容存入由目的寄存器(DI)指向的附加段的某個單元
vi. 根據DF的值以及數據類型,修改目的寄存器的內容(存儲的是地址)
vii. 與REP聯用時,將內容的長度存放在計數器中
viii. 初始化某一緩衝區時很有作用
ix. 其他的特點和MOVS一致
d) LODS 從串取指令
i. 從源變址寄存器(SI)所指向的數據段中某單元取出內容,存放在AX\AL\EAX中
ii. 根據DF的值以及數據類型,修改目的寄存器的內容(存儲的是地址)
iii. 其他特點和STOS一致
e) INS 串輸入指令
i. INS
ii. INSB
iii. INSW
iv. INSD
v. 將端口號在DX中的I/O空間的內容傳送到附加段中的目的變址寄存器(DI)所指向的存儲單元中
vi. 根據DF的值以及數據類型,修改目的寄存器的內容(存儲的是地址)
vii. 其他特點和STOS一致
viii. I/O端口處理的速度必須與REP INS一致
f) OUTS 串輸出指令
i. OUTS
ii. OUTSB
iii. OUTSW
iv. OUTSD
v. 把由源變址寄存器(SI)所指向的存儲器中的內容傳送到端口號在DX中的I/O端口中去
vi. 根據DF的值以及數據類型,修改目的寄存器的內容(存儲的是地址)
vii. 其他特點和STOS一致
viii. I/O端口處理的速度必須與REP OUTS一致
11) 與REPE/REPZ和REPNE/REPNZ聯合工作的CMPS和SCAS
a) CMPS
i. SI所指向的數據段(DS)中的內容與DI所指向的附加段(ES)中的一個字節、字或者雙字相減,不保存結果,根據結果設置條件碼
ii. 其他的特性與MOVS一致
b) SCAS
i. SACS
ii. SACSB
iii. SACSW
iv. SACSD
v. 將AX\AL\EAX中的內容與DI所指向的附加段中的一個字節、字或者雙字比較,不保存結果,根據結果設置條件碼
vi. 其他的特性與MOVS一致
不允許使用“立即數尋址”的有:
1) 段內間接尋址
2) 段間間接尋址
3) PUSH,POP操作
4) XCHG
5) LEA
6) 乘法運算,源操作數的尋址
7) 除法運算,源操作數的尋址
8) 位測試並修改指令
9) NOT不允許使用立即數
10) BSF/BSR
11) SHL/SHR
條件標誌位
1) 最主要的是CF,ZF,SF,OF四位
2) CF,是根據最高有效位是否有向高位的進位設置的,有進位CF=1,否則CF=0
a) 可以用來表示無符號數的溢出,CF = 1 ,溢出,否則不溢出
3) OF,根據操作書的符號以及其變化情況來設置。
a) 加法,當兩個符號相同相加時,< 0 則溢出,符號不同相加,不會出現溢出
b) 減法,當兩個符號不相同相減時,> 0 則溢出,符號相同相減,不會溢出
各個指令對標誌位的影響
指令集 |
指令名 |
CF |
ZF |
AF |
OF |
SF |
PF |
備註 |
||||
通用數據傳送指令 |
MOV |
- |
- |
- |
- |
- |
- |
無影響 |
||||
MOVSX |
- |
- |
- |
- |
- |
- |
無影響 |
|||||
MOVZX |
- |
- |
- |
- |
- |
- |
無影響 |
|||||
PUSH/POP |
- |
- |
- |
- |
- |
- |
無影響 |
|||||
PUSHA/POPA |
- |
- |
- |
- |
- |
- |
無影響 |
|||||
累加器專用傳送指令 |
IN/OUT |
- |
- |
- |
- |
- |
- |
無影響 |
||||
XLAT |
- |
- |
- |
- |
- |
- |
無影響 |
|||||
地址傳送指令 |
LEA等 |
- |
- |
- |
- |
- |
- |
無影響 |
||||
標誌寄存器指令 |
LAHF/PUSHF/PUSHFD |
- |
- |
- |
- |
- |
- |
無影響 |
||||
SAHF/POPF/POPFD |
由裝入的值確定標誌位的值 |
影響 |
||||||||||
類型轉換指令 |
CBD/CWD/CDQ/BSW |
- |
- |
- |
- |
- |
- |
無影響 |
||||
加法指令 |
ADD/ADC/XADD |
1 |
1 |
- |
1 |
1 |
- |
影響 |
||||
INC |
- |
|
|
|
|
|
|
|||||
減法指令 |
SUB/SBB/NEG/CMP CMPXCHG/CMPXHCG8B |
1 |
1 |
- |
1 |
1 |
- |
影響 |
||||
DEC |
- |
|
|
|
|
|
|
|||||
邏輯運算指令 |
NOT |
- |
- |
- |
- |
- |
- |
無影響 |
||||
AND/OR/XOR/TEST |
1 |
根據結果 |
- |
根據結果 |
|
|||||||
位測試指令 |
BT/BTS/BTR/BTC |
1 |
- |
- |
- |
- |
- |
影響 |
||||
位掃描指令 |
BSF/BSR |
- |
1 |
- |
- |
- |
- |
影響 |
||||
移位指令 |
SHL/SHR/SAL/SAR
|
根據各指令規定設置 |
根據移位後的結果設置 |
|
最高位移位後有變化,OF=1 |
根據移位後的結果設置 |
根據移位後的結果設置 |
|
||||
ROL/ROR/RCL/RCR/SHLD/ SHRD |
1 |
- |
- |
1 |
- |
- |
影響 |
|||||
串處理指令 |
MOVS/STOS/LODS/INS/OUTS/ SCAS |
- |
- |
- |
- |
- |
- |
無影響 |
||||
|
|
|
|
|
|
|
|
|
注意點:
1) 雙操作數指令不允許兩個操作數都使用存儲器,所以必須有一個操作數是寄存器
2) 不允許用MOV 指令在兩個存儲單元之間直接傳送數據,也不允許兩個段寄存器之間直接傳送信息
3) 幾種傳送信息的方式: