Loops 汇编语言:ja和jg之间的区别?
对于汇编语言,我很难理解ja和jg之间的差异。我有一段代码:Loops 汇编语言:ja和jg之间的区别?,loops,assembly,x86,Loops,Assembly,X86,对于汇编语言,我很难理解ja和jg之间的差异。我有一段代码: cmp dh, dl j-- hit 我被问到要命中的条件跳转(代替j--hit)将采用十六进制值DX=0680 这将使dl=06和dh=80,因此在比较时,80>06。我知道jg符合这一点,因为我们可以直接比较结果,但如果ja符合(或在本例中不符合)这一代码,我该如何解决?ja和jg之间的区别在于,比较对于ja是无符号的,而对于jg是有符号的(将寄存器视为有符号与无符号整数) 如果数字保证为正数(即符号位为0),则您应该没事。
cmp dh, dl
j-- hit
我被问到要命中的条件跳转(代替j--hit)将采用十六进制值DX=0680
这将使dl=06和dh=80,因此在比较时,80>06。我知道jg符合这一点,因为我们可以直接比较结果,但如果ja符合(或在本例中不符合)这一代码,我该如何解决?ja和
jg
之间的区别在于,比较对于ja
是无符号的,而对于jg
是有符号的(将寄存器视为有符号与无符号整数)
如果数字保证为正数(即符号位为0),则您应该没事。否则您必须小心
如果ja
适用,您确实无法根据比较指令本身进行直觉。您必须查看上下文并确定符号是否会成为问题
dx
为0x0680,则dh
为0x06,dl
为0x80jg
,因为6>-128,但6<128。jg
进行有符号比较;ja
进行无符号比较对不起,我的作业中有一个输入错误。你能根据dx=0680修改你的答案吗?@raphnguyen:Done。请注意我的第一点:你交换了
dl
和dh
的含义。谢谢,这非常清楚。我如何知道dx是0x0680还是1x0680?@raphnguyen:Um.0x是前缀(用于C代码,以及从C派生的任何东西,如C++、java、js等),用于表示十六进制数。没有1x。#Chris啊,我很抱歉造成混淆。因此dh=0x80和dl=0x06。这个问题的答案是jg,你说它进行符号比较。既然符号模式下的0x80是-128,cmp是如何工作的?我想如果dh>dl,cmp和jg语句会比较。我是在向后比较吗?