汇编cmpsdpsd医学是什么意思思

CMP有关问题 - 汇编语言当前位置:& &&&CMP有关问题CMP有关问题www.MyException.Cn&&网友分享于:&&浏览:6次CMP问题mov & al,1
mov & bl,0ffh
cmp & al,bl
为什么cmp后CF会等于1呢?------解决方案--------------------al=1,bl=0ffh
----------
----------
因为被减数向最高位产生了借位,所以CF=1
------解决方案--------------------cmp执行了隐含的减操作并根据结果修改相应标志位
无符号减法中1h比0ffh来得要小,故减法时产生借位,因此CF被设置
12345678910
12345678910
12345678910 上一篇:下一篇:文章评论相关解决方案 12345678910 Copyright & &&版权所有汇编中的CMP(CMPSB/CMPSW)指令,是如何比较字符的大小的?_百度知道
汇编中的CMP(CMPSB/CMPSW)指令,是如何比较字符的大小的?
我有更好的答案
两者相减,产生 CF 标志。
是。那如果我是用串操作一系列字符的比较,会覆盖掉前一个比较结果码?这样不就会出现问题吗?
CMPSB/CMPSW,串比较指令。相同时,继续比较,遇上不同的,结束比较。
采纳率:64%
汇编中的CMP(CMPSB/CMPSW)指令,实际上就是比较字符的ASCII码的大小。
为您推荐:
其他类似问题
cmp的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。比较语句CMP【汇编吧】_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:34,845贴子:
比较语句CMP收藏
假设CMP AX,BX,无符号数是AX减BX后的结果影响标志位,判断JNC,为啥JNC=0,AX&BX内容,如果他们差距非常小呢?例如AX内容是我用二进制表示吧,容易写一些10.....0001,省略号代表全是0,BX内容为000....1,那么相减也不会引起前两位的变化吧实在不懂
cmp ax,bx 相当于ax减bx,不过结果不回写,只影响标志位,有cf,sf,zf三个主要的标志位。cf设置表示ax小于bx,sf表示ax小于bx,zf表示ax等于bx。三个标志位都没有设置表示ax大于bx。个人理解是这样。
登录百度帐号在 SegmentFault,学习技能、解决问题
每个月,我们帮助 1000 万的开发者解决各种各样的技术问题。并助力他们在技术能力、职业生涯、影响力上获得提升。
问题对人有帮助,内容完整,我也想知道答案
问题没有实际价值,缺少关键内容,没有改进余地
code小白。。代码在这里,64位编译环境。还是刚才那个阶乘。
#include&stdio.h&
int fac(int
int main(){
scanf("%d", &num);
while( num & 0) {
scanf("%d",&num);
printf("%d", fac(num));
int fac(unsigned
if (n == 0) {
f = fac(n-1) *
问题是在这段比较num和0的大小的时候
scanf("%d", &num);
while( num & 0) {
scanf("%d",&num);
想请教一下为什么在.compare这段中如果我把37行写成
cmpq $0, %rax
之后我每次输入负数的时候就会出现segment fault,而%eax就可以正常运行,为啥?
rax和eax里面如果都是负数的话有什么区别吗?
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
首先,RAX是64位的寄存器,EAX是32位的寄存器,他们的关系如下(别处copy来的):
|63..32|31..16|15-8|7-0|
|AH. |AL.|
|AX......|
|EAX............|
|RAX...................|
或者用16进制这么看
================ RAX (64 bits)
======== EAX (32 bits)
AX (16 bits)
AH ( 8 bits)
AL ( 8 bits)
然而,C语言中int是32bit,当你的数是正数的时候,RAX高位都是0,无影响,比如数字2000,即使是64位寄存器,存的也是2000
RAX 00 00 00 00 01 0000
但是,如果是负数,是采用补码的形式存储,那么首个二进制位必须是1,比如数字-5
首先看一下是怎么存储的
符号位以外的取反
符号位不变
所以最终-5在EAX中是,但是如果你用RAX的话,高位都是0,那是正数啊!
RAX 00 00 11 11 11 1011
如果用了RAX,这个是就不是-5而是了~
不知道我算的对不对... 总之你用int的话,肯定是用EAX的啦。
分享到微博?
关闭理由:
删除理由:
忽略理由:
推广(招聘、广告、SEO 等)方面的内容
与已有问题重复(请编辑该提问指向已有相同问题)
答非所问,不符合答题要求
宜作评论而非答案
带有人身攻击、辱骂、仇恨等违反条款的内容
无法获得确切结果的问题
非开发直接相关的问题
非技术提问的讨论型问题
其他原因(请补充说明)
我要该,理由是:
在 SegmentFault,学习技能、解决问题
每个月,我们帮助 1000 万的开发者解决各种各样的技术问题。并助力他们在技术能力、职业生涯、影响力上获得提升。汇编CMP指令应用
我的图书馆
汇编CMP指令应用
文章原地址:http://zhidao.baidu.com/link?url=r0BE1fzgwXNArIgMgdJY-arJi69lHszwE49uOqf1CWot5G9tWgKX38Kxz4F-1ohtLzBzUHYkVTeKe2vMt6PCJa举个例子吧:假设现在AX寄存器中的数是0002H,BX寄存器中的数是0003H。执行的指令是:CMP
BX执行这条指令时,先做用AX中的数减去BX中的数的减法运算。列出二进制运算式子:
00 0011_________________________________(借位1) 11 1111所以,运算结果是 0FFFFH根据这个结果,各标志位将会被分别设置成以下值:CF=1,因为有借位OF=0,未溢出SF=1,结果是负数ZF=0,结果不全是零还有AF, PF等也会相应地被设置。CMP 比较指令做了减法运算以后,根据运算结果设置了各个标志位。标志位设置过以后,0FFFFH这个减法运算的结果就没用了,它被丢弃,不保存。执行过了CMP指令以后,除了CF,ZF,OF, SF,等各个标志位变化外,其它的数据不变。对照普通的减法指令 SUB
BX,它们的区别就在于:SUB指令执行过以后,原来AX中的被减数丢了,被换成了减法的结果。CMP指令执行过以后,被减数、减数都保持原样不变。
TA的最新馆藏
喜欢该文的人也喜欢

我要回帖

更多关于 零售psd是什么意思 的文章

 

随机推荐