2012-01-02 73 views
0

我在程序集中编写了一个简单的程序,我尝试使用TASM(Turbo)和TLINK运行它。我运行可执行文件后,我得到这个错误:在程序集中运行简单程序时出错

Screenshot with error

TITLE 1st Program 
.286 
.model small 

.data 
val1 db 0 

.code 
main PROC 
    mov bl, 2Bh 
    mov val1, bl 

    mov bl, 2Ah ;I suspect this is the line that causes the problem 

    mov ah, 02 ;calls interrupt to display val1 
    mov dl, val1 
    int 21h 

    mov ah, 04Ch ;calls interrupt to terminat program 
    mov al, 00 
    int 21h 
main ENDP 
end main 

如果我删除,只是移动2AH到BL线,它完美的罚款。我尝试更改要添加到BL的值,但仍然收到错误消息。我只是想了解导致错误的原因。

谢谢!

稍后编辑:我已经设法通过添加.stack 100h来解决错误。任何人都可以解释究竟发生了什么?

回答

2

很可能没有为应用程序的堆栈预留内存,或者存储的内存太少,int 21h或硬件中断处理程序导致堆栈溢出以及导致执行数据或损坏的代码的数据/代码损坏。

mov bl, 2Ah本身不可能导致问题无论如何。

+1

对于简单的例程,我建议在使用它们之前将寄存器推入堆栈,并在例程结束时将它们弹出。这使您可以随意使用任何寄存器。 – Karel 2012-01-02 13:27:39