我正在使用汇编语言编写程序,我试图通过将字符推入堆栈来在控制台上显示字符。我正在使用中断21H的服务号2来打印字符。
当我运行程序时,控制台上会显示该字符,但问题是它在控制台上显示无限次。我没有使用任何循环,所以不知道为什么它在控制台上无限次打印。
帮助需要找出问题。
我正在使用emu8086。
@RunWith(MockitoJUnitRunner.class)
答案 0 :(得分:1)
下一张图片说明了问题:
putch
时,程序会跳转为红色箭头。putch
完成后,它将以绿色箭头返回呼叫。putch
(这是一个循环)。解决方案是移动到完成程序的块之上。另一个问题是你的程序需要一个堆栈。最后,@ MargaretBloom是正确的(正常情况下),您的代码正在推送字符串的地址,但您使用int 21h
ah=2
来显示字符,因此有两个选项:# 1 按下ah=2
推送字符并显示,或#2 按地址并显示ah=9
:
<强>#1 强>
.model small
.stack 100h ;◄■■ STACK!!!
.data
st1 db "A",'$'
.code
main proc
mov AX,@data
mov DS, AX
xor ax, ax ;◄■■ CLEAR AX.
mov AL, st1 ;◄■■ CHAR IN AX.
push AX ;◄■■ PUSH THE CHAR.
call putch
mov AH,4CH ;◄■■ FINISH PROGRAM HERE.
INT 21H
putch proc near
mov BP,SP
mov DX,[BP+2] ;◄■■ THE CHAR.
mov AH,2 ;◄■■ 2 = DISPLAY ONE CHAR.
INT 21H
ret
putch endp
end main
<强>#2 强>
.model small
.stack 100h ;◄■■ STACK!!!
.data
st1 db "A",'$'
.code
main proc
mov AX,@data
mov DS, AX
mov AX, offset st1 ;◄■■ GET THE ADDRESS.
push AX ;◄■■ PUSH THE ADDRESS.
call putch
mov AH,4CH
INT 21H
putch proc near
mov BP,SP
mov DX,[BP+2] ;◄■■ GET THE ADDRESS.
mov AH,9 ;◄■■ 9 = DISPLAY STRING '$' TERMINATED.
INT 21H
ret
putch endp
end main