Forum: FPGA, VHDL & Co. Problem beim Assembler Programmieren


von sifex (Gast)


Lesenswert?

Hallo an alle.

Wir machen in der Schule gerade Assembler Programmieren durch.

Dabei hat er uns Aufgaben zum üben gegeben. Die leichteren hab ich 
geschafft, aber bei dieser scheitere ich.

Kann mir jemand sagen wie man lösen kann?

Wir arbeiten mit Keil Vision 2.

Aufgabe:
Addieren Sie zwei 16-Bit-Zahlen, die sich ab Adresse 0A0H bzw. ab 
Adresse 0B6H im internen Daten- Speicher befinden.
Die Speicherung der 16-Bit-Zahlen liegt in der Form zuerst High-Byte, 
danach Low-Byte vor.
Das Ergebnis soll ab Adresse 09DH im internen Datenspeicher abgelegt 
werden

Vielen Dank für die Hilfe.


greetz sifex

von sifex (Gast)


Lesenswert?

Ich habe vergessen anzufügen dass es für einen 8051 Microcontroller ist.

Ich programmiere mit Keil u Vision 2.

Ich hoffe, dass das weiterhilft.

von Matthias (Gast)


Lesenswert?

MOV    r1,  #0A1h           ; pointer to first value, low byte
MOV    r0,  #09Eh           ; pointer to result low byte

MOV    A ,  @r1             ; fetch first low byte
MOV    r1,  #0B7h           ; pointer to second value, low byte
ADD    A ,  @r1             ; add low values
MOV    @r0, A               ; save result low byte

MOV    r1,  #0A0h           ; pointer to second value, high byte
MOV    r0,  #09Dh           ; pointer to result high byte

MOV    A ,  @r1             ; fetch first high byte
MOV    r1,  #0B6h           ; pointer to second value, high byte
ADDC   A,   @r1             ; add with carry high values
MOV    @r0, A               ; save result high byte


Wir hatten diesen komischen µC auch in nem Praktikum.. Das sollte gehen, 
weiß aber ne obs vielleicht kürzer geht oder schneller. Bin den 
schöneren Befehlssatz der AVR's gewohnt...

Gruß

von sifex (Gast)


Lesenswert?

Hey Matthias, vielen Dank.

Ich versteh zwar großteils nur Bahnhof, aber ich werd das morgen mal 
ordentlich durchkauen. Das wird wahrscheinlich auch daranb liegen, dass 
ich etwas schlaf nachholen sollte.

Wenn du mir zu dieser Fragestellung auch nochmal helfen könntest, dann 
wäre das spitze. Dann könnte ich diese morgen in Ruhe durcharbeiten.

Aufgabe:
Eine 16-Bit-Zahl, die ab Adresse 0A0H des internen Datenspeichers liegt 
soll mit 2 multipliziert werden. Das Ergebnis soll ab Adresse 0A4H im 
internen Datenspeicher stehen.

Das sind nämlich die beiden einzigen Aufgaben, die ich nicht hinbekam.

Du bist wirklich mein Retter. Danke nochmal für deine Hilfe.

von Matthias (Gast)


Lesenswert?

Hm..

MOV    r1,   #0A1h
MOV    r0,   #0A5h

MOV    A,    @r1
CLR    C
RLC    A
MOV    @r0,  A

MOV    r1,   #0A0h
MOV    r0,   #0A4h

MOV    A,    @r1
RLC    A
MOV    @r0,  A

vielleicht hilft dir das:
http://www.csd.uoc.gr/~hy325/spring-2006/docs/m80517.pdf

Ab Seite 167ff findet man eine ganz passable Erklärung jedes Befehls

von sifex (Gast)


Lesenswert?

Danke danke danke danke danke danke danke.

Hab ich danke schon erwähnt. :)

Du bist echt spitze. Du hast mir den Tag gerettet.

Vielleicht darf ich dich mal per Mail Kontaktieren falls ich wieder ein 
Brett vorm Kopf habe?

greetz sifex

von Matthias (Gast)


Lesenswert?

gibt aber alles ohne garantie
matthiaslipinsky@gmx.de

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.