Das folgende Programm kompiliert ohne Fehler, aber wenn es ausgeführt wird, fordert es keine Eingabe und nichts druckt. Was ist das Problem und wie kann ich es beheben?Benutzer Eingabe und Ausgabe funktioniert nicht in meinem Assembly Code
verwende ich diese Befehle zu montieren und Link:
/usr/local/bin/nasm -f macho32 $1
ld -macosx_version_min 10.9.0 -lSystem -o run $filename.o -e _start -lc
Mein Code ist:
section .data
;New line string
NEWLINE: db 0xa, 0xd
LENGTH: equ $-NEWLINE
section .bss
INPT: resd 1
section .text
global _start
_start:
;Read character
mov eax, 0x3
mov ebx, 0x1
mov ecx, INPT
mov edx, 0x1
int 80h
;print character
mov eax, 0x4
mov ebx, 0x1
mov ecx, INPT
mov edx, 0x1
int 80h
;Print new line after the output
mov eax, 0x4
mov ebx, 0x1
mov ecx, NEWLINE
mov edx, LENGTH
int 0x80
;Terminate
mov eax, 0x1
xor ebx, ebx
int 0x80
'int 0x80' anders auf OSX funktioniert. Parameter zu "int 0x80" (neben _EAX_) werden auf dem Stack in 32-Bit-Code nicht in Registern übergeben. Der Code, den Sie geschrieben haben, sieht so aus, als wäre er für Linux geschrieben worden. Ich würde ein [OS/X-Tutorial] empfehlen (https://filippo.io/making-system-calls-from-assembly-in-mac-os-x/). Auch die Systemrufnummern unterscheiden sich zwischen Linux und OSX. –
Sobald Sie Ihren Code in OS/X konvertiert haben, sollten Sie beachten, dass Standardeingabe der Dateideskriptor 0 und Standardausgabe der Dateideskriptor 1 ist. Sie verwenden Standardausgabe (1) für Eingabe und Ausgabe, die nach Problemen fragt . –
@Michael Petch Ja, Sie haben Recht, danke! – Strelok2014Strelok