我需要將「h4ppy c0d1ng」轉換爲「H4PPY C0D1NG」。 我在這個語言的初學者,但這裏是我的嘗試(Ubuntu的I386 VirtualBox的蘋果機)。我認爲執行時INT 21H是錯誤的,除了該程序將無法完成,也沒有打印字符串:大會:小寫大寫
section .text
GLOBAL _start
_start:
mov ecx, string
mov edx, length
call toUpper
call print
mov eax, 1
mov ebx, 0
int 80h
;String in ecx and length in edx?
;-------------------------
toUpper:
mov eax,ecx
cmp al,0x0 ;check it's not the null terminating character?
je done
cmp al,'a'
jb next_please
cmp al,'z'
ja next_please
sub cl,0x20
ret
next_please:
inc al
jmp toUpper
done: int 21h ; just leave toUpper (not working)
print:
mov ebx, 1
mov eax, 4
int 80h
ret
section .data
string db "h4ppy c0d1ng", 10
length equ $-string
你沒有說明你的操作系統,但是看到你在一個地方使用'int 0x80'而在另一個地方使用'int 0x21',它看起來像是在混合Linux代碼BIOS代碼。 –
正確,它的ubuntu在mac el capitan的virtualbox上 – j1nma
刪除對int 21h的調用並使用正確的方式在Linux上終止應用程序。然後將您的寄存器分配修改爲toUpper並添加一個循環來檢查字符串。 –