当前位置:编程学习 > 汇编语言 >>

汇编语言TEST

假定(AX)=5555H (BX)=0FF00H 执行下列语句后,求(AX) 并写出PSW各位状态 AND AL,01H AND AX,BX TEST AL,08H 书给的答案是:(AX)=5555H PF=ZF=1 感觉(AX)的值不对啊。。。。。 应该是5501H吧(第二条执行后 T指令与值无关),,,求解
答案:ax=0101010101010101B
al=01010101B
and al,01H

01010101
00000001
--------------
00000001

al=00000001B
ax=0101010100000001B
and ax,bx

0101010100000001
1111111100000000
-----------------------------
0101010100000000

ax=0101010100000000B
ax=5500H
test al,08H
pf=zf=1
其他:为举例方便说一下jnz和jz 测试条件 JZ ZF=1 JNZ ZF=0 即Jz=jump if zero (结果为0则设置ZF零标志为1,跳转) Jnz=jump if not zero test属于逻辑运算指令 功能: 执行BIT与BIT之间的逻辑运算 测试(两操作数作与运算,仅修改标志位,不回送结果). Test对两个参数(目标,源)执行AND逻辑操作,并根据结果设置标志寄存器,结果本身不会保存。TEST AX,BX 与 AND AX,BX 命令有相同效果 语法: TEST r/m,r/m/data 影响标志: C,O,P,Z,S(其中C与O两个标志会被设为0) 运用举例: 1.Test用来测试一个位,例如寄存器: test eax, 100b; b后缀意为二进制 jnz ******; 如果eax右数第三个位为1,jnz将会跳转 我是这样想的,jnz跳转的条件是ZF=0,ZF=0意味着ZF(零标志)没被置位,即逻辑与结果为1. 2.Test的一个非常普遍的用法是用来测试一方寄存器是否为空: test ecx, ecx jz somewhere 如果ecx为零,设置ZF零标志为1,Jz跳转蓝屏 test不保存运算结果,也就是不找变AL的值 

上一个:关于汇编语言的问题
下一个:关于汇编语言的问题

CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,