首页 > 解决方案 > (NASM)汇编程序输出2个数字中较大的问题

问题描述

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

  1. 如果输出消息是“最大数字是”,它总是将 x 作为最大数字并输出。它还在消息前输出一个 h,所以它说“h最大的数字是 x”
  2. 如果我在 "The" 中的 T 之前添加任何字符,它总是将 y 作为最大的,并且仍然在消息前输出一个 h,例如 "hdThe maximum number is 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

标签: assemblynasm

解决方案


推荐阅读