Le code suivant:x86 Assembleur Intel Linux SYS_write + sys_read
section .bss
name: resb 50
section .text
global _start
_start:
PUSH EBP
MOV EBP, ESP
MOV EDX, len
MOV ECX, msg
MOV EBX, 1
MOV EAX, 4
INT 0x80
MOV EDX, 50
MOV ECX, name
MOV EBX, 0
MOV EAX, 3
INT 0x80
MOV EBX, 1
MOV EAX, 4
INT 0x80
MOV EDX, cm
MOV ECX, ex
MOV EBX, 1
MOV EAX, 4
INT 0x80
MOV EBX, 0
MOV EAX, 1
INT 0x80
section .data
msg db 'Hello!',0xa
ex db '!',0xa
len equ $ - msg
cm equ $ - ex
je comptais faire un programme E/S simple imprimé Hello!
, demandé char et imprimerait %c!
.
entrée étant |
et sortie étant :
, je reçois le texte suivant:
:Hello!
:!
|4
:4
:!
Comment puis-je faire pour qu'il renvoie les éléments suivants
:Hello!
|4
:4!
Je n'ai écrit aucun assemblage depuis des années, mais ces 'equ's à la fin ressemblent à des chaînes de mesure - donc le' len' devrait venir immédiatement après 'msg'. –
S'il vous plaît pouvez-vous ajouter des commentaires à votre code? Même juste un commentaire pour chaque appel système rendrait cela beaucoup plus facile à lire. – user9876
Appellez-vous le read() syscall pour lire le texte? Cela retournerait "4 \ n", pas seulement "4". Je pense que vous êtes en train de l'imprimer sans enlever le "\ n", c'est pourquoi il y a une nouvelle ligne entre "4" et "!". Mais je fais des conjectures sur ce que fait votre code :-) – user9876