我正在使用MASM程序集,並且正在嘗試編寫一個循環來處理字符串str1,逐字節地將每個小寫字母更改爲相應的大寫字母,使用位操作。如果這封信已經是大寫了,請不要管它。一切似乎當我執行我的代碼,我有困難,搞清楚爲什麼,也許我不應該被處理我的陣正因爲如此,但儘管如此,這裏的代碼發生在我的字符串STR1:在MASM程序集中逐字節地循環和處理字符串
.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」。任何查詢將不勝感激!提前致謝。
是的,謝謝你,我錯過了。我只需要將esi遞增1,並且我從字符0x20中將小寫更改爲大寫,但我將其更改爲一個操作或al,20h @Devolus –
我知道您試圖執行的操作,但在您的代碼中,您無條件地做20分錯誤。而增加esi更好,因爲我不會使用索引操作來完成這樣的任務。真的沒有道理,你應該避免讓ASM程序比它需要的更復雜。用簡單的話來說明這個要求通常是一個很好的理念,因爲這已經可以給你一個很好的提示,如何實現它。 – Devolus