通过内存编辑每个字节进行迭代

时间:2011-09-29 03:27:13

标签: assembly

我正在编写汇编代码,提示用户输入一些小写字符,然后输出带有所有UPPER-CASE字符的相同字符串。我的想法是迭代从特定地址开始的字节,并从每个字节中减去20H(将小写字母变成大写字母),直到我到达具有特定值的字节。我对Assembly很缺乏经验,所以我不确定这种循环的语法是什么样的。

任何人都可以提供一些示例代码或指导我找到这种语法的示例吗?

非常感谢任何帮助!

2 个答案:

答案 0 :(得分:5)

通常,字符串以null结尾(0x00为十六进制)。假设这是你选择做的,这里是一些示例代码。我不确定你正在使用哪个汇编程序,甚至是哪种语法,但这个x86代码应该在MASM中运行:

mov cl, 0             ; cl is the counter register, set it to
                      ; zero (the first character in the string)

start:                ; Beginning of loop
  mov al, bytes[cl]   ; Read the next byte from memory

  cmp al, 0           ; Compare the byte to null (the terminator)
  je end              ; If the byte is null, jump out of the loop

  sub al, 20h         ; Convert to upper case
                      ; A better solution would be: and al, 0DFh

  ; Output the character in al

  add cl, 1           ; Move to the next byte in the string
  jmp start           ; Loop
end:

答案 1 :(得分:1)

嗯,简洁(但对于当前处理器的性能不是最佳)选择是:

  • 有一个控制循环的某种类型的计数器
  • 点ds:si和es:di开头
  • 在循环中执行lodsb和al,dfh,stosb序列