0 Daumen
647 Aufrufe

Aufgabe (Intel x86 Assembler):

Schreiben Sie ein Assembler-Programm, das nacheinander drei ganze Zahlen einliest und folgende Ausgabe macht:

• Ausgabe des Strings „korrekt“, wenn alle eingegebene Zahlen in der Menge {0, 1} sind.

• Ausgabe des Strings „falsche Eingabe“, wenn mindestens eine Zahl nicht in der Menge {0, 1} ist.


Intel x86 Assembler

asm_main:
; Einstiegsroutine fuer die main-Funktion
enter 0,0
pusha

call read_int
mov ecx, eax
call read_int
mov ebx, eax
call read_int
mov edx, eax

; Beendigung der main Funktion und Rueckkehr zu C
popa
mov eax, 0
leave
ret
Avatar von

Welcher Assembler? Mir persönlich fallen aus meiner Jugendzeit MOS 6502, Zilog Z80, Motorola 68000, Intel x86 ein.

Intel x86 Assembler

asm_main:
; Einstiegsroutine fuer die main-Funktion
enter 0,0
pusha
mov ecx, eax
call read_int
mov ebx, eax
call read_int
mov edx, eax

; Beendigung der main Funktion und Rueckkehr zu C
popa
mov eax, 0
leave
ret

1 Antwort

0 Daumen

Antwort mit KI erzeugt

Assembler Programm zur Überprüfung von Zahlen

Für die geforderte Aufgabe im Intel x86 Assembler könnten wir den gegebenen Code-Rahmen wie folgt erweitern. Die Kernaufgabe besteht darin, nach jedem Lesevorgang einer Zahl zu überprüfen, ob diese 0 oder 1 ist. Falls alle eingelesenen Zahlen 0 oder 1 sind, geben wir den String "korrekt" aus. Falls eine der Zahlen außerhalb des Bereichs liegt, geben wir den String "falsche Eingabe" aus.

Hinweis: Ich gehe davon aus, dass read_int eine Funktion ist, die eine ganze Zahl einliest und in eax zurückgibt, und dass die Ausgabefunktionen (z.B. print_string) vorhanden sind, aber nicht weiter spezifiziert wurden. In der Realität müsstest du diese Funktionalitäten entsprechend deiner Umgebung und Tools (wie z.B. NASM, MASM) implementieren oder vorhandene API-Aufrufe nutzen.

asm
asm_main:
; Einstiegsroutine für die main-Funktion
enter 0,0
pusha

; Erste Zahl einlesen und in ecx speichern
call read_int
mov ecx, eax

; Zweite Zahl einlesen und in ebx speichern
call read_int
mov ebx, eax

; Dritte Zahl einlesen und in edx speichern
call read_int
mov edx, eax

; Überprüfe jede Zahl
mov eax, 1 ; Setze Ausgangswert: korrekt
cmp ecx, 0 ; Ist ecx 0?
je check_ebx ; Wenn ja, weiter zum nächsten Check
cmp ecx, 1 ; Ist ecx 1?
je check_ebx ; Wenn ja, weiter zum nächsten Check
jmp error ; Ansonsten Fehlerbehandlung

; Überprüfung von ebx
check_ebx:
cmp ebx, 0
je check_edx
cmp ebx, 1
je check_edx
jmp error

; Überprüfung von edx
check_edx:
cmp edx, 0
je success
cmp edx, 1
je success

; Fehlerbehandlung
error:
mov eax, 0 ; Setze Fehlerstatus

success:
; Abhängig vom Wert in eax, entsprechende Nachricht ausgeben
test eax, eax ; Teste, ob eax 0 ist
jz print_error
; Korrekte Ausgabe, weil eax nicht 0 ist
call print_correct 
jmp end

print_error:
; Befehle, um "falsche Eingabe" auszugeben
; Annahme: Ausgabefunktion korrekt implementiert
call print_wrong_input
jmp end

print_correct:
; Befehle, um "korrekt" auszugeben
; Annahme: Ausgabefunktion korrekt implementiert
call print_correct_input

end:
; Beendigung der main Funktion und Rückkehr zu C
popa
mov eax, 0
leave
ret


Zusätzliche Annahmen und Abhängigkeiten:

- print_wrong_input und print_correct_input müssten implementiert sein, um jeweils "falsche Eingabe" und "korrekt" zu drucken. Diese Funktionen sind hier nur angedeutet und müssten entsprechend der Umgebung (wie Anbindung an eine C-Bibliothek oder Betriebssystemaufrufe) umgesetzt werden.
- Dieses Beispiel geht davon aus, dass read_int Zahlen korrekt einliest und in eax zurückgibt, was ebenfalls abhängig von der verwendeten Umgebung konkret implementiert werden muss.

Beachte, dass die genauen Implementierungsdetails etwas von deiner Arbeitsumgebung und den konkreten Anforderungen, wie z.B. spezifischen Assembler-Direktiven und der verwendeten Entwicklungssoftware (z.B. NASM, MASM, FASM), abhängen können.
Avatar von

Ein anderes Problem?

Stell deine Frage

Willkommen bei der Stacklounge! Stell deine Frage einfach und kostenlos

x
Made by a lovely community