编程论坛
注册
登录
编程论坛
→
汇编论坛
我给大家出一道考试题。。。
cnhanxiao
发布于 2008-11-13 12:18, 1413 次点击
一个无符号数,存放在ax寄存器中。
要求:写一段程序,执行完这段程序后,如果ax=0,那么ax还为0,否则,ax=1。
[un]
前提:不许使用条件转移指令。
[/un]
9 回复
#2
cnhanxiao
2008-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
cnhanxiao
2008-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
zklhp
2008-11-13 13:46
不错 学习了
#5
ruiquan765
2008-11-13 23:37
楼主,我想这样写似乎也行
cmp ax,0
jne L1 ;不相等则跳转(即不为0)
je L2 ;相等则跳转(去执行后面的程序)
L1:
mov ax,1
L2:
……
呵呵,交流一下
#6
arsionbc
2008-11-13 23:50
我的
cmp ax,1
setae al
#7
arsionbc
2008-11-13 23:52
555,错了
楼上没看条件,我的错了
cmp ax,1
setae al
xor ah,ah
[[it] 本帖最后由 arsionbc 于 2008-11-14 00:04 编辑 [/it]]
#8
cnhanxiao
2008-11-14 00:24
回复 5# 的帖子
:) 不许使用条件转移指令——前提
#9
win_pig
2008-11-14 01:16
setnz ;80386指令
#10
win_pig
2008-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