- 記錄彙編語言課筆記,可能有不正確的地方,歡迎指出
- 教材《新概念彙編語言》—— 楊季文
- 這篇文章對應書第二章 IA32處理器基本功能 4.2 ~ 4.3部分
一、位操作
1、位測試及設置指令組
- 位測試指令BT
名稱 |
BT(位測試指令) |
格式 |
BT OPRD1,OPRD2 |
動作 |
OPRD1指定位串,OPRD2指定位號,被測試位的值送到進位標誌CF |
合法值 |
OPRD1:16/32位通用寄存器、16/32位存儲單元 |
|
OPRD2: OPDR1同尺寸通用寄存器、8位立即數 |
注意 |
OPRD2 和 OPDR1同尺寸 |
|
OPDR2的取值不能大於OPDR1尺寸,真正位號是OPDR2 / 32(16)的餘數 |
|
如果OPRD1 是存儲器單元,那麼它代表的是位串的地址 |
- 位測試並取反指令BTC
名稱 |
BTC(位測試並取反指令) |
格式 |
BTC OPRD1,OPRD2 |
動作 |
OPRD1指定位串,OPRD2指定位號,被測試位的值送到進位標誌CF,並把被測試位取反 |
合法值 |
同BT指令 |
注意 |
同BT指令 |
- 位測試並復位指令BTR
名稱 |
BTR(位測試並復位指令) |
格式 |
BTR OPRD1,OPRD2 |
動作 |
OPRD1指定位串,OPRD2指定位號,被測試位的值送到進位標誌CF,並且把被測試位清0 |
合法值 |
同BT指令 |
注意 |
同BT指令 |
- 位測試並置位指令BTS
名稱 |
BTS(位測試並置位指令) |
格式 |
BTS OPRD1,OPRD2 |
動作 |
OPRD1指定位串,OPRD2指定位號,被測試位的值送到進位標誌CF,並且把被測試位置1 |
合法值 |
同BT指令 |
注意 |
同BT指令 |
MOV DX, 3456H ;DX=3456H
BTC DX, 5 ;CF=0, DX=3476H
MOV CX, 18
BTR DX, CX ;CF=1, DX=3472H(被測位號是2)
MOV ECX, 3
BTS EDX, ECX ;CF=0, DX=347AH
BT EDX, 38 ;CF=1, DX=347AH(被測位號是6)
2、位掃描指令組
- 順(逆)向位掃描指令BSF(BSR)
名稱 |
BSF(順向位掃描指令) |
|
BSR(逆向位掃描指令) |
格式 |
BSF/BSR OPRD1,OPRD2 |
動作 |
BSF:從右向左(位0至位15或位31)掃描字或雙字操作數 OPRD2,並把掃描到的第一個含“1”的位的位號送操作數OPRD1 |
|
BSR:從左向右(位15或位31至位0)掃描字或雙字操作數 OPRD2,並把掃描到的第一個含“1”的位的位號送操作數OPRD1 |
合法值 |
OPRD1:16/32位通用寄存器 |
|
OPRD2: 16/32位通用寄存器、16/32位存儲單元 |
注意 |
OPRD2 和 OPDR1同尺寸 |
|
如果字或雙字操作數OPRD2等於0,那麼零標誌ZF被置1,操作數OPRD1的值不確定;否則零標誌ZF被清0 |
MOV EBX, 12345678H
BSR EAX, EBX ;ZF=0, EAX=1CH
BSF DX, AX ;ZF=0, DX=2
BSF CX, DX ;ZF=0, CX=1
二、條件設置字節指令
名稱 |
SETcc(條件設置字節指令)(符號cc是代表各種條件的縮寫 ) |
格式 |
SETcc OPRD |
動作 |
當條件滿足時,那麼將目的操作數OPRD設置成1,否則設置成0(這裏的條件與條件轉移指令中的條件一樣) |
合法值 |
OPRD:8位寄存器、字節存儲單元 |
MOV AL, 23H ;AL=23H
MOV DL, 35H ;DL=35H
ADD AL, DL ;AL=58H, DL=35H, ZF=0, CF=0
SETNZ DL ;AL=58H, DL=01H
SETC AL ;AL=00H, DL=01H
SUB AL, DL ;AL=FFH, DL=01H, ZF=0, CF=1
SETC AL ;AL=01H, DL=01H
MOV BH, 0
MOV ECX, 8
NEXT:
TEST AL, 0FH ;判斷AL低4位是否爲0
SETZ BL ;是,則使得BL=1
OR BH, BL ;保存檢測結果
ROR EAX, 4
LOOP NEXT