繁体   English   中英

在汇编中连接两个字符串

[英]Concatenate two strings in assembly

我需要连接两个字符串,然后在屏幕上显示。 当我运行这个程序时,output 不是我所期望的。 你能告诉我这段代码有什么问题吗?

例子:
预期输入
第一个字符串 = '我的'
第二个字符串='字符串'

预期 output = '我的字符串'

assume  ds:date, cs:cod
date segment

    message1 db "Enter the fisrt string $" 
    message2 db 0ah, 0dh , "Enter the second string $"
    message3 db 0ah, 0dh, "The string is $"
    string1 db 20, ?, 20 dup('')
    string2 db 20, ?, 20 dup('')
    string3 db 40 dup('')            

date ends
cod segment
start : 
mov ax, date
mov ds, ax


    lea dx, message1
    mov ah, 09h
    int 21h

    lea dx, string1
    mov ah, 0ah
    int 21h

    lea dx, message2
    mov ah, 09h
    int 21h

    lea dx, string2
    mov ah, 0ah
    int 21h

    mov si, 2     ; index of the first element
    mov di, 0     ; final string first element index
    mov cl, string1[1]      ; string lenght
    loopp:
        mov bl, string1[si]
        mov string3[di], bl
        inc si
        inc di
        loop loopp

    mov cl, string2[1]  ; second tring lenght
    mov si, 2   
    loopp2:
        mov bl, string2[si]
        mov string3[di], bl
        inc si
        inc di
        loop loopp
    mov string3[di], '$'

    lea dx, message3
    mov ah, 09h
    int 21h

    lea dx, string3
    mov ah, 09h
    int 21h


mov ax, 4c00h
int 21h
cod ends
end start
string1 db 20, ?, 20 dup('') string2 db 20, ?, 20 dup('') string3 db 40 dup('')

您没有使用上述db指令的必要缓冲区! 您放在dup括号之间的是空字符串。 不确定这是否分配了任何 memory ...

这应该有效:

string1 db 20, ?, 20 dup(0)
string2 db 20, ?, 20 dup(0)
string3 db 40 dup(0)

这也是:

string1 db 20, ?, 20 dup(' ')   ; ' ' is a space character
string2 db 20, ?, 20 dup(' ')
string3 db 40 dup(' ')

loop指令使用整个CX寄存器,但您的代码只填写CL部分!
用这个:

mov cl, string1[1]      ; string lenght
mov ch, 0
...

如果您想在mystring之间使用分隔空格字符,则必须在复制两个字符串之间将其写入。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM