(NASM)汇编程序输出2个数字中较大的一个时出现问题

时间:2019-03-12 21:49:45

标签: assembly nasm

我正在尝试编写一个程序,比较两个数字x和y(在代码中预定义),并输出一条消息,说“最大的数字是”,然后输出更大的数字。但是,它有一个非常奇怪的错误,难以解释。

  1. 如果输出消息为“最大数为”,则始终以x为最大数并输出。它还在消息前输出h,因此显示“ h最大数字是x”
  2. 如果我在“ The”中的T之前添加任何字符,它总是将y作为最大字符,并且在消息之前仍输出h,例如“ hdThe最大数字是y”

当然,如果我在消息中放入其他字符,也会使事情变得混乱。这是我的代码:

section .text

global _start

_start:

mov     eax, [x]
sub     eax, '0'
mov     ebx, [y]
sub     ebx, '0'
cmp     eax, ebx
ja     case1

case2: add     ebx, '0'
mov [big], ebx
jmp next

case1:  add     eax, '0'
mov [big], eax

next: mov     ecx, msg
mov     edx, len
call cout

mov     ecx, big
mov     edx, 1
call cout

mov     eax, 1
int     0x80

cout: mov ebx, 1
      mov eax, 4
      int 0x80
      ret

section .data
big db 0
x db '9'
y db '8'
msg db  "The biggest number is "
len equ $ - msg

segment .bss

sum resb 1

0 个答案:

没有答案