Проблема с (NASM) программой сборки для вывода большего из 2 чисел - PullRequest
3 голосов
/ 13 марта 2019

Я пытаюсь создать программу, которая сравнивает два числа x и y (предопределено в коде) и выводит сообщение «Самое большое число», а затем большее. Тем не менее, это довольно странная ошибка, которую трудно объяснить.

  1. Если выводится сообщение «Самое большое число», оно ВСЕГДА принимает x как самое большое число и выдает его. Он также выводит h перед сообщением, поэтому он говорит: «hНаибольшее число - x»
  2. Если я добавлю какой-либо символ перед T в «The», он ВСЕГДА принимает y как самый большой и по-прежнему выводит h перед сообщением, например «hdСамое большое число - 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
...