字符串前的垃圾
Trash before string
我用Tasm。垃圾出现在第一个字符串之前而不是第二个。我将 dollar($) 设置为 string
的末尾
.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
任何建议
您的偏移量有误,您忘记补偿 return 地址或 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
学习使用调试器。
我用Tasm。垃圾出现在第一个字符串之前而不是第二个。我将 dollar($) 设置为 string
的末尾.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
任何建议
您的偏移量有误,您忘记补偿 return 地址或 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
学习使用调试器。