微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

程序集 8086:INT 21h 是否应该在写入控制台后移动堆栈指针?

如何解决程序集 8086:INT 21h 是否应该在写入控制台后移动堆栈指针?

我有以下程序来打印十进制数:

PRINT_SIGNED_INT PROC    
PUSH AX
PUSH BX
PUSH DX
PUSH CX 

MOV AH,2
MOV DL,TEMP_SIGN
INT 21H

MOV AX,TEMP_OPERAND
GET_DIGIT_LOOP:        
    MOV BX,10 
    MOV DX,0
    DIV BX
    PUSH DX;REMINDER
    
    INC CX
    
    CMP AX,0;Division Result
    JE PRINT_DIGIT_LOOP
    
    JMP GET_DIGIT_LOOP
    
    
PRINT_DIGIT_LOOP:
    MOV AH,2 
    CMP CX,0
    JE END_PRINT
    DEC CX
    
    POP DX
    ADD DL,NUM_OFFSET
    INT 21H                    


END_PRINT: 
    POP CX
    POP DX
    POP BX     
    POP AX

RET
PRINT_SIGNED_INT ENDP

在 emu8086 上运行它时,它正确地推送了数字,但是一旦卡住了就打印出来。显然,带有 AH = 2 的 INT 21H 用于打印正在移动堆栈指针。这是预期的行为吗?我该如何解决这个问题?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。