2017-06-19 2 views
-1
section .text 

global _start 

_start: 

     mov eax, 4 
     mov ebx, 1 
     mov edx, num 
     int 0x80 
     mov eax, 1 
     mov ebx, 0 
     int 0x80 

section .data 

     num db 5 

~Integer Druck in Linux Assembly

Es kompiliert gut, aber nichts druckt. Wer kann mir sagen, was falsch ist?

+1

Sie müssen die Zahl 5 in die Zahl "5" konvertieren. Überzeugen Sie sich selbst: Ersetzen Sie "num db 5" durch "num db" 5 "'. Natürlich erfordert der allgemeine Ansatz ein "itoa" Äquivalent. SO Doc hat etwas dazu. –

+0

Ich muss genau so witite? Anzahl db "5"? –

+0

Versuchen Sie zu sehen, was passiert :) Werfen Sie einen Blick auf eine ASCII-Tabelle, obwohl ASCII ist wahrscheinlich nicht der Zeichensatz von Ihrem Terminal verwendet, die ersten 127 Zeichen sind alle in allen westlichen Zeichensatz identisch. Denken Sie daran: Sie schreiben Strings, keine Zahlen. –

Antwort

0

Sie verwenden sys_write nicht ordnungsgemäß. Die Zeichenfolgenadresse should go into ecx, and the number of bytes to write should go into edx:

mov eax, 4 
    mov ebx, 1 ; fd (stdout) 
    mov ecx, num ; const char* 
    mov edx, 1 ; count 
    int 0x80 
+0

Sie sollten auch erwähnen, dass, damit dieser Code funktioniert, David tun muss, wie Margaret ihm in den Kommentaren empfohlen hat, und "num" als Zeichenfolge ändern eine ganze Zahl. –