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
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.
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ß
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.
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
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.