【问题标题】:How to concatenate two strings如何连接两个字符串
【发布时间】:2022-11-16 07:00:17
【问题描述】:

该程序假设接受两个输入的字符串,将它们连接起来,然后打印。这是我现在拥有的代码,我想知道如何去做。我还是新手,所以请多多包涵。提前致谢。

.586
.MODEL FLAT
.STACK 4096

INCLUDE io.h

.DATA
Inputstr BYTE 100 DUP (?)
Inputstr2 BYTE 100 DUP (?)
Outputstr BYTE 100 DUP (?)
prompt BYTE "Enter a string", 0
displayLbl BYTE "Concatinated string", 0

.CODE
_MainProc PROC

input prompt, Inputstr, 100
lea esi, Inputstr
lea edi, Outputstr
push esi
push edi
cld

input prompt, Inputstr2, 100
lea esi, Inputstr2
lea edi, Outputstr
push esi
push edi
cld


whileNoNul:
cmp BYTE PTR [esi], 0
je endWhileNoNul
movsb
loop whileNoNul

endWhileNoNul:
mov BYTE PTR [edi], 0
pop esi
pop edi
output displayLbl, Outputstr

mov eax, 0
ret

_MainProc ENDP
END

我的代码只打印我的第二个输出,即 Inputstr2。假设同时打印出 Inputstr 和 Inputstr2。谢谢

【问题讨论】:

  • 它不对Inputstr做任何事情:不尝试复制它,不尝试打印它。就是将Inputstr2复制到Outputstr

标签: assembly x86 masm


【解决方案1】:

我不是汇编专家,但看起来你在寄存器 esi 和 edi 上推送数据两次,首先是 InputStr,然后是 InputStr2 - 所以 pop esipop edi 不会只有 InputStr2 吗代码执行 While?

【讨论】:

    【解决方案2】:

    一些优点

    如果你打算允许用户输入 2 个字符串,每个字符串最多 99 个字符,那么你的程序应该定义一个输出字符串大于 100。

    对于之间的串联字符串 1字符串 2,你通常会把字符串 1 字符串 2.您的代码目前以复制开始字符串 2(并忘记处理字符串 1).

    堆栈需要平衡:你push 也需要关闭!同样重要的是,您需要以相反的顺序pop寄存器。

    loop whileNoNul中的loop指令依赖ECX寄存器。您的代码没有事先准备好该寄存器,因此结果将不正确。

    一个解法

    这里没有什么需要推动或弹出的。首先复制输入str1 没有它的终止零,然后复制输入str2 它的终止零。当然,在此期间您不能篡改 EDI 登记册!

      Inputstr1 BYTE 100 DUP (?)
      Inputstr2 BYTE 100 DUP (?)
      Outputstr BYTE 200 DUP (?)
    
      ...
    
      input prompt, Inputstr1, 100
      input prompt, Inputstr2, 100
    
      mov  esi, OFFSET Inputstr1
      mov  edi, OFFSET Outputstr
      cld
    
      jmp  while
    contWhile:
      stosb
    while:
      lodsb
      cmp  al, 0
      jne  contWhile
    
      mov  esi, OFFSET Inputstr2
    until:
      lodsb
      stosb
      cmp  al, 0
      jne  until
    
      output displayLbl, Outputstr
    

    【讨论】:

      猜你喜欢
      • 2011-11-04
      • 2013-11-05
      • 1970-01-01
      • 2011-08-29
      • 2020-08-19
      相关资源
      最近更新 更多