【问题标题】:How to reverse string word by word in assembly language?如何在汇编语言中逐字反转字符串?
【发布时间】:2015-12-05 02:37:48
【问题描述】:

我希望程序逐字反转字符串 例如:

输入:

堆栈溢出

输出:

Kcats wolfrevo

请帮帮我...

请修复此代码并完成它:

.MODEL  SMALL
.stack 64
.DATA
    msg DB "stack owerflow"
        DB "$"
.CODE
    .STARTUP
    LEA SI, msg
    MOV DI, SI
l1:
    INC DI
    MOV AL, [DI + 1]
    CMP AL, ' '
    JNE l1 
l2:
    MOV AL, [SI]
    xchg AL, [DI]
    MOV [SI], AL
    INC SI
    DEC DI
    CMP SI, DI
    JB  l2

l3: 
    MOV AH, 09h
    LEA DX, msg
    INT 21h
    MOV AH, 08h
    INT 21H

.STACK
END

【问题讨论】:

  • 这感觉就像一个家庭作业。
  • 此时代码产生了什么?您是否确定了它为什么会这样做?
  • 您可以用 C 语言编写算法,然后将其转换为程序集,或者让编译器输出程序集并清理程序集代码。
  • @DavidHoelzer 你能完成吗?

标签: string assembly reverse emu8086


【解决方案1】:

根据您在其中一个 cmets 中对问题的描述来判断,(请将其移至问题中,)您的例程仅反转一个单词,然后就退出了。

通过查看您的代码,很明显您的例程正是这样做的:它只反转一个单词然后退出。

因此,您只需添加一点代码,以便在反转一个单词后,您的例程会继续检查剩余的字符,而不是仅仅退出。

我不会为你编写你的代码,因为如果你不知道怎么做,那么你就不配上交已完成的作业。你的老师会给评分,而不是我。

【讨论】:

  • 这并没有提供问题的答案。要批评或要求作者澄清,请在他们的帖子下方留下评论。 - From Review
  • @amdixon 如果您查看 cmets,则要求 OP 提供澄清,他确实提供了。当问题是关于家庭作业时,指示的行动过程是指出需要做什么,而不是为他们编写代码。这就是我所做的,因此鉴于问题的家庭作业性质,这是对该问题的最佳答案。
  • 要求提供澄清是 cmets 的一个很好的用途。和你的回答内容一样
  • @amdixon 当然,您有权对此事发表意见。 The fact that appear to be a minority 确实证明您的意见是无效的,但它确实允许我将我的答案保留在这里而不更改或删除它。
  • 作为回答者,您可以选择如何处理您的答案
猜你喜欢
  • 2014-05-06
  • 2014-06-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-26
  • 1970-01-01
  • 2017-03-01
相关资源
最近更新 更多