注册 登录
编程论坛 汇编论坛

我给大家出一道考试题。。。

cnhanxiao 发布于 2008-11-13 12:18, 1413 次点击
一个无符号数,存放在ax寄存器中。
要求:写一段程序,执行完这段程序后,如果ax=0,那么ax还为0,否则,ax=1。
[un]前提:不许使用条件转移指令。[/un]
9 回复
#2
cnhanxiao2008-11-13 12:23
答案:

TEST    AX,0FFFFh   ;测试AX寄存器有没有哪位是1,有,则肯定>0
LAHF                ;取标志寄存器到AH
AND     AX,4000h    ;屏蔽除ZF以外所有位
SHR     AX,0Eh      ;移动ZF位到第0位
XOR     AX,1        ;取反第0位(注意ax>0,ZF=0,所以取反)

—— 一位网友非这样要求,绞尽脑汁写出来了,不知还有没有好的办法?
#3
cnhanxiao2008-11-13 13:01
网友Mr.Y提点,更简练的方式:
test ax,ax
setnz al
and  ax,0001h 或者 xor ah,ah

推而广之:
test eax,eax
setnz al
and eax,1

对8位而言:
test al,al
setnz al

[[it] 本帖最后由 cnhanxiao 于 2008-11-13 13:12 编辑 [/it]]
#4
zklhp2008-11-13 13:46
不错 学习了
#5
ruiquan7652008-11-13 23:37
楼主,我想这样写似乎也行
cmp ax,0
jne L1       ;不相等则跳转(即不为0)
je L2        ;相等则跳转(去执行后面的程序)
L1:
mov ax,1
L2:
……

呵呵,交流一下
#6
arsionbc2008-11-13 23:50
我的
cmp  ax,1
setae al
#7
arsionbc2008-11-13 23:52
555,错了
楼上没看条件,我的错了
cmp ax,1
setae al
xor ah,ah

[[it] 本帖最后由 arsionbc 于 2008-11-14 00:04 编辑 [/it]]
#8
cnhanxiao2008-11-14 00:24
回复 5# 的帖子
:)  不许使用条件转移指令——前提
#9
win_pig2008-11-14 01:16
setnz ;80386指令
#10
win_pig2008-11-14 01:31
妙!!!
解题思路是利用ZF标志呵,
AX=0,ZF=1  
AX/=0,ZF=0
ZF的值取反后赋予AX正符题意
楼主原解是基于8086的正解,
第一句的
TEST AX,AX
还可用
AND AX,AX
OR AX,AX
实现ZF
学习了。谢
1