myGully.com

myGully.com (https://mygully.com/index.php)
-   Programmierung (https://mygully.com/forumdisplay.php?f=67)
-   -   Microprocessor Simulator - GNU/GPL (https://mygully.com/showthread.php?t=2620793)

Kay000 09.05.12 07:38

Microprocessor Simulator - GNU/GPL
 
Hallo zusammen

Ich habe ein riesen Problem ich muss für ein Fach in der Schule Assembler programmieren. Mit Microprocessor Simulator - GNU/GPL. siehe [Link nur für registrierte und freigeschaltete Mitglieder sichtbar. Jetzt registrieren...]

Hat jemand von euch Erfahrung damit und könnte mir 4 Aufgaben lösen...? Bitte meldet euch.. ICh weiss es ist nicht der Sinn Aufgaben für andere zu lösen, aber habe wirklich im Moment keine Zeit mich damit auseinanderzusetzen....

Gruss

ProgMaster 09.05.12 07:42

Warum hat man als Schüler keine Zeit?

Kinder? Beruf?

Kay000 09.05.12 08:07

Beruf und müssen im Studium gerade noch im Team ein Projekt fertig machen, bin praktisch nur noch daran am arbeiten...

slahn 09.05.12 08:56

Wie wäre es einmal, wenn du einfach mal die Aufgabenstellungen bekannt gibst?

Kay000 09.05.12 09:09

Gerne :-)

1. Aufruf von Subroutinen
=========================
Schreiben Sie Subroutinen, die die Einer- bzw. die Zehnerziffer beim 7-Segment-Display (Port 2) aktivieren.
Ueber die Tastatur (Port 3) soll es im Hauptprogramm möglich sein, Ziffern einzugeben, die die letzte (Ziffer-)Eingabe als Einer und den vormaligen Einer als Zehner (ähnlich Taschenrechnereingabe) darstellen. Der vormalige Zehner wird links herausgeschoben und vergessen. Mit Drücken von "Enter" soll Main abbrechen.



2. Aufruf einer SW-Interruptroutine
===================================
Schreiben Sie eine SW-Interruptroutine, die eine (unsigned 8-Bit) Hexzahl in eine Dezimalzahl wandelt. Die Schnittstelle sehe wie folgt aus:

; -----------------------------------------------------------------------------
; Software Interrupt Routine
; Convert an unsigned hex number (1 byte) into an unsigned decimal number
; (2 bytes).
;
; IN:
; AL := hexNumberToConvert
; OUT:
; AL := highByteOfDecimal
; BL := lowByteOfDecimal
; Other affected registers: None
;
; Example: (FFhex = 255dec)
; IN: AL := FF
; OUT: AL := 2, BL := 55
; -----------------------------------------------------------------------------

Zeigen Sie in Main, dass die SW-Interruptroutine funktioniert.



3. Aufruf von Interrupt-Routinen
================================
Schreiben Sie in einem Hauptprogramm einen Füllstandswert (genügend langsam) in eine globale Variable. Der Wert starte bei Null und werde laufend erhöht. Mit einer Interruptroutine werde der Füllstandswert jede Sekunde getestet. Ueberschreitet die Variable einen vorher festgelegten Wert, dann soll eine entsprechende Meldung an den VDU ausgegeben und das Hauptprogramm abgebrochen werden.



4. Türme von Hanoi
==================
Die Türme von Hanoi seien hier wie folgt dargestellt:

| | |
A | |
| | |
BBB | |
| | |
CCCCC | |
| | |
DDDDDDD | |
=============================================

Ziel:
Der Turm steht am Schluss ganz rechts.
Regeln:
Es darf nur eine Scheibe pro Mal von einem Pfosten zu einem andern bewegt werden.
Es darf zu keinem Zeitpunkt eine kleinere Scheibe unter einer grösseren liegen.

Lösen Sie die Aufgabe Tabellen-getrieben.
Die ersten drei Zeilen der VDU sollen die drei Pfosten darstellen. Jede Scheibe soll mit einem einzigen Buchstaben A, B, C und D repräsentiert werden. Mit Eingabe von "Return" soll jeweils ein Schritt (ein Umlegen einer Scheibe) vorgenommen werden. Nach gelöster Aufgabe werde dies auf der vierten VDU-Zele gemeldet und das Hauptprogramm verlassen.

PS: Wäre froh wenn kommentare beigefügt sind, damit ich Kay000 dies auch nachverfolgen kann....

slahn 14.05.12 12:45

Hab mich mal ein wenig gespielt und zumindest die ersten 3 Aufgaben gelöst:

Aufgabe 1:

Aufgabe 2:

Aufgabe 3:

Bei Aufgabe 4 geht mir immer der Speicher aus ... 0x00 - 0xBF für Programm und Stack ist schon ein bisschen wenig für so eine Aufgabe.

EDIT: Aufgabe 4 habe ich jetzt doch noch "irgendwie" lösen können ... siehe [Link nur für registrierte und freigeschaltete Mitglieder sichtbar. Jetzt registrieren...]

Kay000 14.05.12 16:16

Poah du bis mein Held slahn :D Vielen vielen Dank, wenn ich mal was für dich machen kann, meld dich!!! :)

Hast du den Teil zu Aufgabe 4 auch, wo dir der Speicher ausgeht? Frag sonst mal meinen Lehrer ob er mir sagen kann, wie er sich das genau vorgestellt hat :)

Werde mir das dieses Wochenende mal anschauen, was du da gezaubert hast und versuchen das ganze nachzuvollziehen :)

Beste Grüsse und nochmals vielen vielen Dank!!!

slahn 15.05.12 07:02

Ok, ich habe es dann irgendwie doch geschafft. Jedoch liegt die Betonung hier auf "IRGENDWIE". Meine aktuelle Lösung ist so was von schlecht ... aber meine erste und bis jetzt einzige die funktioniert (bzw. überhaupt in den RAM passt ... und damit meinen ich, dass ich 100% des Speichers verbrauche ...).

Aufgabe 4:

Das Programm löst nicht wirklich das Rätsel, sondern gibt nur die einzelnen Schritte zur Lösung aus (jedoch ist es wohl laut Aufgabenstellung nicht gegen die Regeln ;)). Sollte es tatsächlich jemand schaffen das Rätsel, Programmiertechnisch mit dem Simulator zu lösen, würde ich sehr gerne diese Lösung sehen.
Übrigens braucht mir keiner sagen, wie hässlich diese Lösung ist ... dessen bin ich mir bewusst.

sahid 15.05.12 16:30

oha
 
:eek:
Zitat:

Zitat von Kay000 (Beitrag 23503636)
Gerne :-)

1. Aufruf von Subroutinen
=========================
Schreiben Sie Subroutinen, die die Einer- bzw. die Zehnerziffer beim 7-Segment-Display (Port 2) aktivieren.
Ueber die Tastatur (Port 3) soll es im Hauptprogramm möglich sein, Ziffern einzugeben, die die letzte (Ziffer-)Eingabe als Einer und den vormaligen Einer als Zehner (ähnlich Taschenrechnereingabe) darstellen. Der vormalige Zehner wird links herausgeschoben und vergessen. Mit Drücken von "Enter" soll Main abbrechen.



2. Aufruf einer SW-Interruptroutine
===================================
Schreiben Sie eine SW-Interruptroutine, die eine (unsigned 8-Bit) Hexzahl in eine Dezimalzahl wandelt. Die Schnittstelle sehe wie folgt aus:

; -----------------------------------------------------------------------------
; Software Interrupt Routine
; Convert an unsigned hex number (1 byte) into an unsigned decimal number
; (2 bytes).
;
; IN:
; AL := hexNumberToConvert
; OUT:
; AL := highByteOfDecimal
; BL := lowByteOfDecimal
; Other affected registers: None
;
; Example: (FFhex = 255dec)
; IN: AL := FF
; OUT: AL := 2, BL := 55
; -----------------------------------------------------------------------------

Zeigen Sie in Main, dass die SW-Interruptroutine funktioniert.



3. Aufruf von Interrupt-Routinen
================================
Schreiben Sie in einem Hauptprogramm einen Füllstandswert (genügend langsam) in eine globale Variable. Der Wert starte bei Null und werde laufend erhöht. Mit einer Interruptroutine werde der Füllstandswert jede Sekunde getestet. Ueberschreitet die Variable einen vorher festgelegten Wert, dann soll eine entsprechende Meldung an den VDU ausgegeben und das Hauptprogramm abgebrochen werden.



4. Türme von Hanoi
==================
Die Türme von Hanoi seien hier wie folgt dargestellt:

| | |
A | |
| | |
BBB | |
| | |
CCCCC | |
| | |
DDDDDDD | |
=============================================

Ziel:
Der Turm steht am Schluss ganz rechts.
Regeln:
Es darf nur eine Scheibe pro Mal von einem Pfosten zu einem andern bewegt werden.
Es darf zu keinem Zeitpunkt eine kleinere Scheibe unter einer grösseren liegen.

Lösen Sie die Aufgabe Tabellen-getrieben.
Die ersten drei Zeilen der VDU sollen die drei Pfosten darstellen. Jede Scheibe soll mit einem einzigen Buchstaben A, B, C und D repräsentiert werden. Mit Eingabe von "Return" soll jeweils ein Schritt (ein Umlegen einer Scheibe) vorgenommen werden. Nach gelöster Aufgabe werde dies auf der vierten VDU-Zele gemeldet und das Hauptprogramm verlassen.

PS: Wäre froh wenn kommentare beigefügt sind, damit ich Kay000 dies auch nachverfolgen kann....



Alle Zeitangaben in WEZ +1. Es ist jetzt 04:54 Uhr.

Powered by vBulletin® (Deutsch)
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.