Неверный вывод консоли после предыдущего вывода - PullRequest
0 голосов
/ 13 октября 2018

Задача: вывести число в шестнадцатеричном виде на консоль.После этого выведите некоторую строку (пусть это будет «String after num»).Первая часть выполнена успешно, а вторая - нет.

  • Введенный номер сохраняется в памяти меткой num.
  • Строка сохраняется в памяти line label.
  • Длина строки - lines.

Код:

global _start

section .data
num   db 01111110b
temp  db 0

line  db 10, "String after num", 10
lines equ $-line 

section .text
_start:
    call write_hex          ; write num in hex format

    mov     eax, 4          ; write "Hello world!"
    mov     ebx, 1          ;
    mov     ecx, line       ;
    mov     edx, lines      ;
    int     80H             ;

    mov     eax, 1          ; exit
    xor     ebx, ebx
    int     80H

write_hex:
    mov     eax, [num]
    mov     [temp], eax
    shr     byte [num], 4
    call    to_hex_digit     
    call    write_digit

    mov     eax, [temp]
    mov     [num], eax

    and     byte [num], 1111b
    call    to_hex_digit
    call    write_digit
    ret

to_hex_digit:
    add     [num], byte '0'
    cmp     [num], byte '9'
    jle     end
    add     [num], byte 7
end: ret

write_digit:
    mov     eax, 4
    mov     ebx, 1
    mov     ecx, num
    mov     edx, 1
    int     80H
    ret

Выход:

output

Спасибо за любую помощь.

1 Ответ

0 голосов
/ 13 октября 2018

Я использовал неверный регистр для хранения временного значения.Я заменил регистр, который будет работать с temp с eax на al.Смотри ответ Шута.

...