【问题标题】:Trash before string字符串前的垃圾
【发布时间】:2015-08-24 20:33:18
【问题描述】:

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

任何建议

【问题讨论】:

    标签: assembly x86 dos


    【解决方案1】:

    您的偏移量错误,您忘记补偿返回地址或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
    

    学习使用调试器。

    【讨论】:

      最近更新 更多