能力值:
( LV5,RANK:60 )
|
-
-
2 楼
 达人 救我
|
能力值:
( LV2,RANK:10 )
|
-
-
3 楼
第二个问题好像AL取反后就能判断1和5位全是1了。
|
能力值:
( LV2,RANK:10 )
|
-
-
4 楼
1
是否取反要看后面的跳转语句,也就是你要跳转的条件是什么?如果第3位为1,并用JZ跳转那一定是要取反的,如果是JNZ则不用取反。
test逻辑与运算结果为零,就把ZF(零标志)置1;
2
运算结果为零则ZF置 1,否则为零
比如:
Test的一个非常普遍的用法是用来测试一方寄存器是否为空:
test ecx, ecx
jz somewhere
如果ecx为零,设置ZF零标志为1,否则结果为ecx,ZF并不置0
我也在学习中!
|
能力值:
( LV2,RANK:10 )
|
-
-
5 楼
TEST == 不修改寄存器的 AND
ZF <- 只有结果为 0 才设定
MOV DL,AL ;0000 0100B ; AL = 2
NOT DL ;1111 1011B
TEST DL, 0000 0100B ; (and)
0000 0000B => 为 0, ZF = 1
要同时有第1位和第5位, 其他不关心(Don't care, 有或无都可)
MOV AL,23H ; 0010 0011
MOV DL,AL ; 0010 0011
NOT DL ; 1101 1100
TEST DL,00100010B ; 0010 0010 ; 22H
0000 0000 ; (and 结果为 0, ZF = 1)
只有第1位和第5位
MOV AL, 22H ; 0010 0010
MOV DL, AL
SUB DL, 22H ; 0010 0010
0000 0000 ; (sub 相减结果为 0, ZF = 1)
|
能力值:
( LV5,RANK:60 )
|
-
-
6 楼
这么说来,TEST 如果要测试某位是否为1的话。。则必须先取反。也就是TEST NOT连用哦。
|
能力值:
( LV5,RANK:60 )
|
-
-
7 楼
ZF <- 只有结果为 0 才设定
1
0
0
0
结果 是1不设定?ZF不置0吗?
|
能力值:
( LV4,RANK:50 )
|
-
-
8 楼
要测试某位 是否 为 1 -- ?
好办吧
test al,100B
jne _NOT ;若 AL 第2位为 1,则跳转到 _NOT
_NOT:
--------------
这样就可以了取反干什么?
test 就是进行 与 运算不保存结果嘛 -----
|
能力值:
( LV5,RANK:60 )
|
-
-
9 楼
那直接TEST DL ,00000010B 不行吗
|
能力值:
( LV5,RANK:60 )
|
-
-
10 楼
对啊,中山大学老师说先取反,,在测试。那是什么意思呢?
|
能力值:
( LV4,RANK:50 )
|
-
-
11 楼
楼主还没明白
test al,10B
jne @F
----------------------
not al
test al,10B
je @F
这两段作用是 一样的 若al第1位为1则跳转-- 看那个 je 和 jne 跳转条件不一样了
与 运算 只有 1 & 1 == 1
其余 0&1 1&0 0&0 与后都是0
|
能力值:
( LV2,RANK:10 )
|
-
-
12 楼
ZF零标志位:运算结果为0时ZF位置1,否则为0.
TEST指令:和AND指令差不多,只是AND指令执行后会把结果送到目的操作数,而TEST却不会,只是影响标志位
汇编执行每条指令都会影响标志位.
测试某一位是否为1,不需要取反.楼主说老师让取反再测试,可能和后面的跳转命令有关。
如果用TEST命令测试多位的话,只要其中一位为1,那么ZF=0
共同学习中。。。。。。
|
能力值:
( LV4,RANK:50 )
|
-
-
13 楼
不是 每条指令 都影响标志位的 ---
常见的影响标志位的是:加减乘除,逻辑运算 ---
|
能力值:
( LV2,RANK:10 )
|
-
-
14 楼
可以去网上多看看资料嘛
|
能力值:
( LV5,RANK:60 )
|
-
-
15 楼
谢谢 神雕大侠。白冰,enthors及所有回答问题者。我搞明白了。。谢谢各位精彩回答
|
|
|