【发布时间】:2013-05-18 08:43:23
【问题描述】:
我正在使用 MASM 程序集,我正在尝试编写一个循环来逐字节处理字符串 str1,使用位操作将每个小写字母更改为相应的大写字母。如果字母已经是大写字母,请不要理会它。当我执行我的代码时,我的字符串 str1 似乎没有发生任何事情,我很难弄清楚为什么,也许我不应该这样处理我的数组,但是,这里是代码:
.386
.MODEL FLAT
str1 dword "aBcD", cr, Lf, 0
....
.code
_start:
output str1
**sub esi, esi ; sum = 0
lea ebx, str1
top: mov al, [ebx + esi] ; attempting to move each character value from
str1 into the register al for comparison and
possible conversion to uppercase
add esi, 5
cmp al, 0
je zero
sub al, 20h** ; convert lowercase to corresponding uppercase
loop top
zero: output zeromsg ; for TESTING of al purposes only
done: output str1value
output str1
没有任何变化,除了没有发生转换之外,它以相反的顺序打印字符串。为什么?打印为:“DcBa”。任何询问将不胜感激!提前致谢。
【问题讨论】:
-
您在使用
loop指令之前忘记设置ECX。看起来您只想要jmp,因为您正在检查 AL 是否有以零结尾的字符串。
标签: arrays string assembly masm