Мне нужно преобразовать «h4ppy c0d1ng» в «H4PPY C0D1NG». Я новичок на этом языке, но вот моя попытка (убунту i386 VirtualBox Mac) .Я думаю, что INT 21h неправильно, кроме того, что программа не завершится ни напечатать строку при выполнении:Сборка: в нижнем регистре до UPPERCASE
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 в virtualbox на mac el capitan – j1nma
Удалите вызов int 21h и используйте подходящий способ для завершения приложения в Linux. Затем закрепите свои назначения регистров в toUpper и добавьте цикл, чтобы пройти через строку. –