「h4ppy c0d1ng」を「H4PPY C0D1NG」に変換する必要があります。 私はこの言語では初心者ですが、ここで私の試み(Ubuntuのi386のVirtualBoxのMacが)である.Iは、実行時にプログラムは、文字列を終了したり印刷しないこと以外に、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
あなたはあなたのOSについては言及していませんが、別の場所で 'int 0x80'と' int 0x21'を使うと、LinuxコードをBIOSコード。 –
右、そのubuntuをMac el capitanのvirtualboxに入れてください – j1nma
int 21hへの呼び出しを削除し、Linux上でアプリケーションを終了するための適切な方法を使用してください。その後、toUpperでレジスタの割り当てを修正し、ループを追加して文字列を処理します。 –