Posted September 14, 20231 yr Novamente no meu drama estudando assembly, cheguei no assunto das instruções aritméticas e bem começou a dar nós na minha cabeça para variar. Um código em específico do conteúdo que estou estudando não tá fazendo muito sentido para mim, veja: section .text global _start ;must be declared for using gcc _start: ;tell linker entry point mov eax,'3' sub eax, '0' mov ebx, '4' sub ebx, '0' add eax, ebx add eax, '0' mov [sum], eax mov ecx,msg mov edx, len mov ebx,1 ;file descriptor (stdout) mov eax,4 ;system call number (sys_write) int 0x80 ;call kernel mov ecx,sum mov edx, 1 mov ebx,1 ;file descriptor (stdout) mov eax,4 ;system call number (sys_write) int 0x80 ;call kernel mov eax,1 ;system call number (sys_exit) int 0x80 ;call kernel section .data msg db "The sum is:", 0xA,0xD len equ $ - msg segment .bss sum resb 1 Logo no começo do código começou a ficar sem sentido o bagulho, essa parte de: mov eax, '3' (por que c@r@lhos eu to movendo um o 3 entre aspas simples para o registrador eax?)
September 16, 20231 yr Administrators Oi @Ana Francisca, Você tá usando o NASM né? Ele suporta "Character Strings", ou seja, você escreve no fonte como string e ele compila como char (número). Ou seja, '3' vai gerar o número 0x33, que é o código do texto '3' na tabela ASCII. Dá uma olhada para entender mais: Se quiser o número 3 mesmo, então é só remover as aspas simples. O mesmo se aplica para os demais números. PS.: Em C isso também funciona com um caractere só. Por exemplo, char c = 'A' vai por o valor 0x41 na variável c. Valeu.
September 19, 20231 yr Author Ahhh ta, faz sentido, é que no tutorial que tô vendo conforme o conteúdo vai avançando ele vai colocando coisas que não foram mostradas, provavelmente para fazer os estudantes quebrarem ainda mais a cabeça. Muito obrigado pela ajuda. 🤗
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.