我使用Tasm。垃圾出现在第一个字符串之前但不是第二个我将美元($)设置为字符串
的结尾.model tiny
CSEG segment
assume cs:CSEG, ds:CSEG, es:CSEG, ss:CSEG
org 100h
Begin:
push offset msgOrig1
push offset msgOrig2
call ProcParams
ret
ProcParams proc near
push bp
mov bp, sp
add bp, 2
mov ah,09h
mov dx, [bp]
int 21h
mov dx, [bp+2]
int 21h
pop bp
ret 4
ProcParams endp
msgOrig1 db 'Hello$'
msgOrig2 db 'world$'
CSEG ends
end Begin
任何建议
答案 0 :(得分:3)
您的偏移量有误,您忘记补偿返回地址或push bp
。这总共是4个字节,而不是2.你也正在打印反向字符串,你也不需要添加到bp
。一个可能的解决方法:
ProcParams proc near
push bp
mov bp, sp
mov ah,09h
mov dx, [bp+6]
int 21h
mov dx, [bp+4]
int 21h
pop bp
ret 4
ProcParams endp
学习使用调试器。