Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Loops 汇编语言:ja和jg之间的区别?_Loops_Assembly_X86 - Fatal编程技术网

Loops 汇编语言: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),则您应该没事。

对于汇编语言,我很难理解ja和jg之间的差异。我有一段代码:

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
    为0x80
  • 0x80在无符号模式下解释为128,在有符号模式下解释为-128
  • 因此,您必须使用
    jg
    ,因为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语句会比较。我是在向后比较吗?