位操作指令
位操作指令包括位測試和位掃描指令,可以直接對一個二進制位進行測試,設置和掃描。
1位測試和設置指令
格式:BT DEST,SRC
BTC DEST,SRC
BTR DEST,SRC
BTS DEST,SRC
功能:按照源操作指定的位號,測試目的操作數,當指令執行時,被測試位的狀態被復制到進位標志CF。
BT將SRC指定的DEST中一位的數值復制到CF。BTC將SRC指定的DEST中一位的數值復制到CF,且將DEST中該位取反。BTR將SRC 指定的DEST中一位的數值復制到CF,且將DEST中該位復位。BTS將SRC指定的DEST中一位的數值復制到CF,且將DEST中該位置位。
目的操作數為16位或32位通用寄存器或存儲器,源操作數為16位或32位通用寄存器,以及8位立即數,當源操作數為通用寄存器時,必須同目的操作數類型一致。源操作數SRC以兩種方式給出目的操作數的位號,即
· SRC為8位立即數,以二進制形式直接給出要操作的位號;
· SRC為通用寄存器,如果DEST為通用寄存器,則SRC中二進制值直接給出要操作的位號。如果DEST為存儲器操作數,通用寄存器SRC為帶符號整數, SRC的值除以DEST的長度所得到的商作為DEST的相對偏移量,余數直接作為要操作的位號。DEST的有效地址為DEST給出的偏移地址和DEST相 對偏移量之和。
BT,BTC,BTR,BTS指令影響CF標志位,其它標志位無定義。
例 3.53
MOV AX,1234H
MOV ECX,5
BT AX,CX ;CF=1AX=1234H
BTC AX,5 ;CF=1;AX=1214H
BTS AX,CX; ;CF=0AX=1234H
BTR EAX,ECX ;CF=1EAX=00001214H
AT&T 格式
movl $0x1234 ,&ecx // 0001 0010 0011 0100B
bt $0x03,%ecx // 第一位是0 , 0x03 是第四位
jnc somewhere //CF 位是0 則轉移
例
·MODEL SMALL
·586
·DATA
DATA1 DW 1234H,5678H
·CODE
·START UP
BTC DATA1,3;CF=0(DATA1)=123CH
MOV CX,20
BTR DATA1,CX;CF=1[DATA+2]=5668H
·EXIT
END