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

时间:2017-02-28 04:36:50

标签: 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: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

我得到的输出是: -

Enter first string:mihir Enter second string:kandoi Concatenated string is: kandoi

我想要的输出是: -

Enter first string:mihir Enter second string:kandoi Concatenated string is: mihirkandoi

似乎有什么问题?我是字符串的新手

1 个答案:

答案 0 :(得分:1)

您的程序看起来很好,除了使用loop指令,您没有设置必要的CX寄存器!此外,您不需要此代码中的此说明。

lbl:
    mov al,[di]
    mov [si],al
    cmp al, '$'
    je  endpr
    inc di
    inc si
    jmp lbl      <-- Change LOOP into JMP
endpr:

虽然这种修改/修正很重要,但它不应该治愈输出。我怀疑你的原始节目源中有一些拼写错误。