JG没有按预期工作? (条件分支)

时间:2017-02-28 05:01:29

标签: assembly x86 nasm dos

我正在尝试编写一个程序,找到两个变量中较大的一个并将答案保存在[最大]中。

这涉及使用分支条件。

这是我的计划:

; Find
; Gunner Stone ver 1.0 2/27/2017
;
org 100h
section .text
; beginning address of code = 0x0100
;*******************************************************
;
start:
    mov dl, [num1]
    cmp dl, [num2]
    jg assignA          ;should jump if dl is greater than [num2]
    mov dl, [num2]

assignA:
   mov   [largest], dl

infiniteLoop:
    jmp infiniteLoop
;       
;*******************************************************        
ILP:    JMP ILP             ;infinite loop
;
TIMES 50H -($-$$) DB 0
section .data
; beginning address of data = 0x0150
;*******************************************************
;
num1: db 0x0A
num2: db 0xFA
largest: db 00
;
;*******************************************************

我的问题或缺乏理解是,即使[num1]小于[num2],跳转也会触发jg assignA

如果有人能告诉我为什么会发生这种情况/我的想法存在缺陷,那会有所帮助!

1 个答案:

答案 0 :(得分:1)

问题是JG功能将值[num1]和[num2]都视为签名整数。

enter image description here

如果是JA, FA 将大于 0A

0A 的 0000 1010 正数

FA 1111 1010 负数

所以0A实际上大于FA

相关问题