标题:汇编指令CMPXCHG的用法疑惑
只看楼主
遮天云
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:农村一小伙
等 级:贵宾
威 望:12
帖 子:1132
专家分:2671
注 册:2010-6-1
结帖率:100%
已结贴  问题点数:30 回复次数:5 
汇编指令CMPXCHG的用法疑惑
有题如下:
CMPXCHG CX,DX
如果指令执行前 (AX)=2300H,(CX)=2300H.(DX)=2400H
则指令执行后 因(CX)=(AX),故(CX)=2400H,ZF=1
如果指令执行前(AX)=2500H,(CX)=2300H,(DX)=2400H
则指令执行后因(CX)!=(AX),故(AX)=2300H,ZF=0
这是书上的例题
我不明白的是CMPXCHG指令不是比较交换吗?怎么还要考虑AX呢?我刚开始自己做得时候以为两者执行后的结果是一样的呢!可是结果却收到AX的限制!不知为何!还有就是标志位ZF不是零标志位吗?运算结果为0时ZF位置为1否则为0那为什么这题中一个为1一个为零呢??本人刚学汇编不到两星期!感觉还是没入门请教各位前辈帮忙解惑!谢谢
搜索更多相关主题的帖子: 用法 指令 CMPXCHG 汇编 
2010-09-21 15:19
东海一鱼
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:48
帖 子:757
专家分:4760
注 册:2009-8-10
得分:20 
这条指令将al\ax\eax\rax中的值与首操作数比较,如果相等,第2操作数的直装载到首操作数,zf置1。(相当于相减为0,所以0标志位置位)
如果不等, 首操作数的值装载到al\ax\eax\rax,并将zf清0(原因同上)。

BTW:
两个星期想入门??早哪!慢慢来吧。

举世而誉之而不加劝,举世而非之而不加沮,定乎内外之分,辩乎荣辱之境,斯已矣。彼其于世未数数然也。
2010-09-21 15:33
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
得分:10 
我学了4、5年汇编罢 也只是刚懂皮毛罢了 呵呵
2010-09-22 01:50
遮天云
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:农村一小伙
等 级:贵宾
威 望:12
帖 子:1132
专家分:2671
注 册:2010-6-1
得分:0 
谢谢两位指教!灭了我心中急躁的情绪!接下来就是安心学习了
2010-09-24 09:23
你们都要疼我哦
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:火星
等 级:贵宾
威 望:49
帖 子:1296
专家分:2746
注 册:2008-7-13
得分:0 
CMPXCHG CX,DX
首先进行CMP操作,这个操作就是进行减运算,但不保存结果,只是影响标志位ZF的。
AX CX相减为0,ZF置位为1。
CMPXCHG隐含使用EAX寄存器,根据首操作数的位数确定EAX的位数,就是根据CX来确定
是AX,如果是cl,则就是al,根据CMP结果进行XCHG,相等则第2操作数送到第1操作数,不等则第1操作数送EAX或AX或AL。

象这种隐含使用其他寄存器的指令还有不少。对于哪种操作影响标志位也需要慢慢熟悉。

其实在很久前,CMPXCHG指令是很标准的,它规定第2个操作数必须是EAX/AX/AL,
这样就简单了,先比较2个操作数,如果相等,ZF置1,第2操作数送第1操作数,
如果不等,ZF清0,第1操作数送第2操作数。很标准的“比较交换”。
只不过后来对第2操作数就不做限制必须是EAX/AX/AL了,变成隐含使用,指令功能强大了,但对于刚接触指令的人也带来理解和使用上的困惑。

对于汇编的学习,俺一直觉得重点要放在对代码段功能的理解上,至于指令实现的操作,查手册或者碰到再查就可以了,碰到个3次5次,不用查也知道了。

偶断网半个月后的第1个回帖就贡献在这里了。

小妹,哥哥看你骨骼清奇,绝非凡人,将来必成大业,不如这样,你先把裤裤脱了,待哥哥为你开启灵窍,然后我们一起努力钻研如何
2010-09-29 18:41
遮天云
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:农村一小伙
等 级:贵宾
威 望:12
帖 子:1132
专家分:2671
注 册:2010-6-1
得分:0 
回复 5楼 你们都要疼我哦
呃!这样啊!太谢谢您了
2010-09-30 10:16



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-321059-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.089324 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved