汇编语言通过函数调用两次打印字符,但直接执行时不打印

我试图用16位汇编语言编写自己的引导程序。我可以使用int 10h,AH = 0Eh将文本打印到屏幕上。

如果我运行

MOV AL,65
MOV AH,0Eh 
int 10h
HLT

我可以成功在屏幕上打印A

但是,如果我愿意

MOV AL,65
CALL printc

HLT

printc:
  MOV AH,0Eh 
  int 10h 
  RET 

我最终在屏幕上显示了AA

为什么会这样,我该如何解决?

这是我的完整代码:

BITS 16
ORG 0x7C00

MOV DS,AX
MOV SI,0x7C00


MOV AL,0Eh 
  int 10h 
  RET 

times 510-($-$$) db 0x90
dw 0xAA55
sitelv 回答:汇编语言通过函数调用两次打印字符,但直接执行时不打印

要引用指令集参考:

  

HLT停止指令执行,并将处理器置于HALT状态。已启用的中断(包括NMI和   SMI),调试异常,BINIT#信号,INIT#信号或RESET#信号将恢复执行。

如您所见,中断将继续执行,并且至少定时器中断通常正在运行,以及其他可能的来源,例如按键。

因此,您应该在HLT周围添加一个循环,以使其重新进入睡眠状态。

本文链接:https://www.f2er.com/3163624.html

大家都在问