0
我在獲取用戶傳入的字符串中的大寫字母數量方面存在一些問題。我必須用masm寫它。我的問題是我可以使用:獲取大寫字母MASM x86
AND al, some bitstream
;TO DO LOGIC HERE
只能得到大寫字母嗎?我的代碼正確地得到了小寫字母的數量,我似乎無法找出大寫字母。此外,該字符串中還包含一些隨機字符,如:(<)>?$#@ &。這樣簡單嗎?還是我需要更多的邏輯來完成這個?
這樣的事情?
jmp getNext
getNext: mov al,[esi]
cmp al,0
je exitProc ;exit loop
cmp al,'a'
jl noChange ;increases my counters
cmp al,'z'
jle toUpperCase ;counts lowercase
cmp AL,'A'
jl noChange
cmp AL,'Z'
jg noChange
jl toCount ;counts uppercase
我不斷收到0作爲我的答案,不知道爲什麼。我顯然很受MASM的挑戰。
看來我的toCount永遠不會被調用。相反,行:
cmp AL,'A'
jl noChange
cmp AL,'Z'
jl toCount ;counts uppercase
似乎只調用noChange。這導致toCount中的值增加,永遠不會被調用。我仍然無法弄清楚這有什麼問題。它與小寫字母的測試是完全一樣的,除了在cmp中使用captial字母。
爲什麼不檢查'A'<= AL <='Z''? (即一對CMP和有條件跳轉) – Michael 2013-05-12 14:40:06
我還沒有嘗試過。你能詳細解釋cmp al,'A'和cmp al,'Z'究竟是做什麼的嗎?它如何確保它在A-Z範圍內? – tmaxxcar 2013-05-12 14:48:00
'CMP'本身並不能確保。但你可以做'CMP AL','A'/'JL not_capital' /'CMP AL,'Z'' /'JG not_capital'。如果沒有這些跳轉,你會知道'AL'在'A..Z'範圍內。 – Michael 2013-05-12 14:50:35