jg在asm中无法正常工作

时间:2015-02-23 05:53:17

标签: assembly nasm

section .data
msg db 'Largest number :: '
len equ $ - msg
num1 dd '47'
num2 dd '51'
num3 dd '22'

section .bss
largest resb 2

section .text
global _start

_start:

mov ecx, [num1]
cmp ecx, [num2]
jg check_third
mov ecx, [num2]
check_third:

cmp ecx, [num3]
jg _exit
mov ecx, [num3]

_exit:
mov [largest], ecx

mov edx, len
mov ecx, msg
mov ebx, 1
mov eax, 4
int 0x80

mov edx, 2
mov ecx, largest
mov ebx, 1
mov eax, 4
int 0x80

mov eax, 1
int 0x80
回答是47,而它必须是51

1 个答案:

答案 0 :(得分:0)

您已将数字声明为一串字符串。删除引号以使比较正确:

num1 dd 47
num2 dd 51
num3 dd 22

请记住,当您想要打印结果时,您必须将结果转换为字符串。


要理解为什么将数字作为字符串没有意义,请考虑这些字符串如何存储在内存中:'51'由字符序列'5','1'组成(即'5'存储在'1'之前,因为它是字符串的第一个字符)。 '5','1'0x35,0x31相同,与0x3135相同 如果我们以'47'的相同方式查看0x3734,现在应该清楚cmp这些内容不会起作用。