汇编代码无法按预期工作

时间:2016-11-25 13:47:24

标签: assembly nasm qemu

我有这段代码

call print_char
mov ah, 0x0e
mov al, 'O'

print_char:
mov ah, 0x0e
mov al, 'J'
int 0x10
ret

jmp $
times 510 -($-$$) db 0
dw 0xaa55

我从它得到的输出是J,它应该是JO,为什么不发生这种情况?我调用了print_char标签然后点击ret它应该去call print_char不应该做什么吗?

1 个答案:

答案 0 :(得分:2)

  

它应该去做任何事情后调用print_char不应该吗?

当然,call print_char之后是什么?

mov ah, 0x0e
mov al, 'O'   ; set al='O'

print_char:
mov ah, 0x0e
mov al, 'J'   ; overwrite al with 'J'. the second interrupt hasn't been executed yet.
int 0x10

然后ret再次执行而没有相应的call。我会说放弃你当前的设计并将其更改为更清晰的东西:

jmp main

print_char:
mov ah, 0x0e
int 0x10
ret

main:    
mov al ,'J'
call print_char
mov al,'O'
call print_char

jmp $
times 510 -($-$$) db 0
dw 0xaa55