[英]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
...
如果您想在my和string之间使用分隔空格字符,则必须在复制两个字符串之间将其写入。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.