Eu tenho tentado aprender um pouco de montagem e estava testando arrays e descobri que quando tentei imprimir o valor no ponto indexado nada aconteceu, depois de experimentar mais parece que mesmo que eu esteja usando os arrays como mostrado em muitos exemplos na Internet, simplesmente não está funcionando
Aqui está o código:
section .text
global _start
_start:
mov eax, num ; eax now contains 5
mov ebx, [array+8] ; ebx now contains 8
cmp eax, ebx ; compares eax to ebx
jge skip ; should not happen because eax is smaller than ebx
call printdigit
skip:
call printn
call _exit
printdigit:
mov eax, 0x30
add [num], eax
mov ecx, num
mov edx, 1 ;length
mov ebx, 1 ;write to stdout
mov eax, 4 ;write call number
int 0x80
ret
printn:
mov eax, 0x0A
push eax
mov eax, 4
mov ebx, 1
mov ecx, esp
mov edx, 1
int 0x80
add esp, 4
ret
_exit:
mov eax, 1
mov ebx, 0
int 0x80
section .data
num dw 5
array dw 0, 1, 2, 3, 4, 5, 6, 7, 8, 9
Os comandos que estou usando para compilar o código
nasm -f elf Bubblesort.asm
ld -m elf_i386 -s -o Bubblesort Bubblesort.o
./Bubblesort
O que estou executando:
ubuntu 22.04.3 desktop amd64, (na máquina virtual, mas não deveria importar, eu acho)
A saída que eu quero deve ser
5
A saída real
Quero que printdigit seja chamado apenas quando num for menor do que o que está indexado no array
Tenho quase certeza de que não é um problema de computador, mas de código, mas não tenho certeza de onde
Agora fiz as seguintes alterações
_start:
mov eax, [num]
mov ebx, [array+8]
cmp eax, ebx
jae skip
section .data
num dd 5
array dd 0, 1, 2, 3, 4, 5, 6, 7, 8, 9
o resto do código é normal
isso agora imprime o valor que desejo quando o array é indexado para um valor maior que num, mas quando não é maior, ainda imprime o valor