先前输出后控制台输出不正确

时间:2018-10-13 17:00:41

标签: linux assembly x86 nasm

任务:以十六进制形式将数字输出到控制台。之后,打印一些字符串(将其设置为“ num之后的字符串”)。 第一部分成功,但是第二部分没有成功。

  • 输入的数字通过num标签存储在内存中。
  • 字符串通过line标签存储在内存中。
  • 字符串长度-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 :(得分:0)

我使用了无效的寄存器来存储临时值。我从tempeax替换了将al工作的寄存器。参见小丑的答案。