【问题标题】:How can I reverse a string using two separate byte arrays? [closed]如何使用两个单独的字节数组反转字符串? [关闭]
【发布时间】:2016-04-05 15:54:08
【问题描述】:

如何使用两个单独的字节数组反转字符串?

使用带有间接寻址的 LOOP 指令编写一个程序,该指令将字符串从源复制到目标,颠倒过程中的字符顺序。

使用以下变量:

source BYTE "This is the source string",0 
target BYTE SIZEOF source DUP ('#')

【问题讨论】:

  • 我们不会为你做作业。
  • 我同意这与如何反转字符串很接近,但它有点不同,因为它是如何将其复制(到新位置)而不是如何向后输出字符串。

标签: string assembly x86 reverse masm


【解决方案1】:

问题很简单。使用间接寻址(换句话说,不要直接使用内存地址,而是通过寄存器引用它们)并反转字符串。例如,假设您已经定义了源和目标,以下是一些准系统:

MOV SI, source   ; Get source address
MOV DI, (target + SIZEOF source)   ; Get the ending address for target
LOOP:
  MOV AL, [SI]   ; Get a byte
  MOV [DI], AL   ; Store a byte
  INC SI         ; Move forward one in source
  DEC DI         ; Move back one in target
  CMP AL, 0      ; Have we reached the zero termination?
  JNZ LOOP
RET

这绝不意味着完整或实用。例如,您可能需要找出一种更好的方法来动态计算 SOURCE 的长度。 :) 但是,我不想从你身上夺走学习的乐趣。这至少应该是一个很好的起点。

【讨论】:

  • "target + SIZEOF source"。那么你不需要在循环内预先递减DI 吗?
  • 可能......正如我所说,我并不是真的想为他解决问题,让他开始吧。
  • 你们能给我答案吗
  • @sinan:这是一个答案。如果你不明白,那么你需要从你的教授/TA/教科书/在线教程中获得更多的帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-26
  • 2013-11-13
  • 1970-01-01
  • 2023-03-04
  • 2019-08-09
  • 1970-01-01
相关资源
最近更新 更多