J'essaie d'imprimer un entier unique entier dans NASM Assembly sous Linux. Ce que j'ai actuellement compilé, mais rien n'est écrit à l'écran. Quelqu'un peut-il m'expliquer ce que je fais mal ici?
3 Réponses :
Ceci est ajouté, ne pas stocker:
eax = 4 ebx = file descriptor (1 = screen) ecx = address of string edx = length of string
J'ai essayé cela, et cela compile également bien, mais rien n'est écrit à l'écran.
Je ne peux toujours pas le faire travailler, mais je vais faire cette réponse acceptée.
@FroZenwaseland - Le problème restant est mentionné dans cette réponse, mais sans vous appeler votre attention spécifiquement à celle-ci: "ECX = adresse de chaîne edx = longueur de chaîne" Mais vous essayez de fournir l'octet de données lui-même incexe plutôt que l'adresse Là et une longueur dans EDX.
de l'homme 2 écriture Outre les autres erreurs qui ont été signalées, écrire () prend un pointeur em> sur les données et une longueur, Pas un octet réel lui-même dans un registre comme vous essayez de fournir. P> Vous devrez donc stocker vos données à partir d'un registre à la mémoire et utiliser cette adresse (ou si elle est constante, ne chargez pas les données dans un registre mais chargez-la à la place). p> p>
Heureusement, ce n'était pas la partie clé de la réponse, mais incluse uniquement comme une commodité.
Après avoir examiné les deux autres réponses, c'est ce que j'ai finalement proposé.
sys_exit equ 1 sys_write equ 4 stdout equ 1 section .bss outputBuffer resb 4 section .text global _start _start: mov ecx, 1 ; Number 1 add ecx, 0x30 ; Add 30 hex for ascii mov [outputBuffer], ecx ; Save number in buffer mov ecx, outputBuffer ; Store address of outputBuffer in ecx mov eax, sys_write ; sys_write mov ebx, stdout ; to STDOUT mov edx, 1 ; length = one byte int 0x80 ; Call the kernel mov eax, sys_exit ; system exit mov ebx, 0 ; exit 0 int 0x80 ; call the kernel again
Vous attribuez à EAX à ECX, puis 4. C'est probablement là.
Dupliqué possible de Comment imprimer un numéro dans l'assemblage NasM? Associé: Stackoverflow.com/Questtions/4117422/...