【问题标题】:Program to concatenate two strings in 8086 assembly在 8086 汇编中连接两个字符串的程序
【发布时间】:2017-02-28 04:36:50
【问题描述】:

请注意:我知道程序可能有多个错误并且写得不好,我只是想学习

我的程序是在 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

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

【问题讨论】:

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

标签: assembly x86-16


【解决方案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:

虽然这个修改/更正很重要,但它不应该治愈输出。我怀疑您的原始程序源代码中存在某种拼写错误。

【讨论】:

    猜你喜欢
    • 2013-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-29
    • 1970-01-01
    相关资源
    最近更新 更多