Ich muss "h4ppy c0d1ng" in "H4PPY C0D1NG" umwandeln. Ich bin ein Anfänger in dieser Sprache, aber hier ist mein Versuch (ubuntu i386 VirtualBox Mac) die int 21h ist falsch .Ich denke, außer, dass das Programm nicht noch drucken Sie die Zeichenfolge beenden, wenn sie ausgeführt:Montage: Kleinbuchstaben zu GROß
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
Sie nicht Ihr Betriebssystem, aber sehen Sie verwenden "Int 0x80" an einem Ort und "Int 0x21" in einem anderen, es sieht aus wie Sie Linux-Code mischen mit BIOS-Code. –
Richtig, seine Ubuntu in Virtualbox auf Mac El Capitan – j1nma
Entfernen Sie den Aufruf zu Int 21h und verwenden Sie den richtigen Weg, um die Anwendung unter Linux zu beenden. Dann korrigieren Sie Ihre Registerzuweisungen in toUpper und fügen Sie eine Schleife hinzu, um die Zeichenfolge zu durchlaufen. –