字符串之前的垃圾

时间:2015-08-24 20:33:18

标签: assembly x86 dos

我使用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

任何建议

1 个答案:

答案 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

学习使用调试器。