JG 没有按预期工作? (条件分支)
JG not working as intended? (conditional branch)
我正在尝试编写一个程序来查找两个变量中较大的一个并将答案保存在 [largest] 中。
这涉及使用分支条件。
这是我的程序:
; 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
。
如果有人能告诉我为什么这是 happening/where 我的想法的缺陷,那会有所帮助!
问题在于 JG 函数将值 [num1] 和 [num2] 都视为 有符号 整数。
如果是JA,FA会比0A大。
0A
0000 1010 正数
FA 1111 1010 负数
所以 0A 实际上大于 FA
我正在尝试编写一个程序来查找两个变量中较大的一个并将答案保存在 [largest] 中。
这涉及使用分支条件。
这是我的程序:
; 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
。
如果有人能告诉我为什么这是 happening/where 我的想法的缺陷,那会有所帮助!
问题在于 JG 函数将值 [num1] 和 [num2] 都视为 有符号 整数。
如果是JA,FA会比0A大。
0A 0000 1010 正数
FA 1111 1010 负数
所以 0A 实际上大于 FA