Assembly 在8086汇编中连接两个字符串的程序

Assembly 在8086汇编中连接两个字符串的程序,assembly,x86-16,Assembly,X86 16,请注意:我知道这个程序可能有多个错误,而且写得不好,我只是在努力学习 我的程序是在8086中连接两个字符串,我的代码是:- printmsg macro ms mov ah,09h lea dx,ms int 21h endm printip macro ms mov ah,09h lea dx,ms+2 int 21h endm ipuser macro ms mov ah,0ah lea dx,ms int 21h endm code segment assume cs:code, ds:d

请注意:我知道这个程序可能有多个错误,而且写得不好,我只是在努力学习

我的程序是在8086中连接两个字符串,我的代码是:-

printmsg macro ms
mov ah,09h
lea dx,ms
int 21h
endm
printip macro ms
mov ah,09h
lea dx,ms+2
int 21h
endm
ipuser macro ms
mov ah,0ah
lea dx,ms
int 21h
endm
code segment
assume cs:code, ds:data
mov dx,data
mov ds,dx
printmsg ms1
ipuser input1
printmsg ms2
ipuser input2
lea si,input1+2
up: cmp [si],byte ptr '$'
je done
inc si
jmp up
done: lea di,input2+2
lbl: mov dl,[di]
mov [si],dl
cmp [si],byte ptr '$'
je endpr
inc di
inc si
loop lbl
endpr: printmsg ms3
printmsg nl
printip input1
mov ah,4ch
int 21h
code ends
data segment
ms1 db 10,13,'Enter first string:$'
ms2 db 10,13,'Enter second string:$'
ms3 db 10,13,'Concatenated string is:$'
nl db 0dh,0ah,'$'
input1 db 10 dup('$')
input2 db 10 dup('$')
data ends
end
我得到的结果是:-

输入第一个字符串:mihir
输入第二个字符串:kandoi
连接的字符串是:
坎多伊

我想要的结果是:-

输入第一个字符串:mihir
输入第二个字符串:kandoi
连接的字符串是:
mihirkandoi


有什么问题吗?我不熟悉字符串

您的程序看起来不错,除了使用了
循环
指令,您没有为该指令设置必要的CX寄存器!此外,在这段代码中不需要此指令

lbl:
    mov al,[di]
    mov [si],al
    cmp al, '$'
    je  endpr
    inc di
    inc si
    jmp lbl      <-- Change LOOP into JMP
endpr:
lbl:
mov al,[di]
mov[si],al
cmp al,“$”
je endpr
有限公司
国际公司

jmp lbl在编写代码时,请尽量遵循一些编码标准,尤其是汇编代码。在您的示例中,如果您使用空行分隔函数,并使用带标签的索引,这将非常有用。看起来像一堵文本墙。。我不打算读这些。尝试重新格式化它,使用一些空行将逻辑部分分组在一起,使用缩进区分指令和标签(标签从第一列开始,指令缩进至少在第4列或更多列,这是大约40年前的习惯,您可能不习惯,但几乎所有其他人都习惯,只需查看一些装配示例,了解什么是好的并使用它)。