PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Statusregister



dwod
17.04.2008, 14:30
Hallo,

euch wird es trivial vorkommen, aber ich habe ein kleines Problem damit :

Damals (in den 70ern) hies es, bei einer CPU/MPU spielt sich alles im Akkumulator ab. Die Operationen im Akku beeinflussen auch das Statusregister.

Seit einiger Zeit beschäftige ich mich mit AVR´s. Hier steht in der Doku, dass der Befehl das Statusregister beeinflusst ?!

Aus dem Avr-ASM-Tutorial :

INC R1
BRNE ...
INC R2
BRNE ....

Geht das bei allen Registern ?

Und was ist bei Verschachtelungen, behält der Processor da den Überblick ?

INC R1
INC R2
BRNE .....
BRNE .....


Gruss

Wolfgang

PicNick
17.04.2008, 14:51
Wenn du von den 70-ern sprichst, bist du wohl ein Altgedienter.
Bei den RISC-Kisten beeinflussen nicht alle Befehle die Statusbits.
Beim Instructionset (überblick und detailliert) steht immer dabei, welche Flags "affected" sind.
Man gewöhnt sich dran, und es hat schon seinen Sinn
Je nach deinem Level, vielleicht hilft das was:
https://www.roboternetz.de/wissen/index.php/Assembler_Einf%C3%BChrung_f%C3%BCr_Bascom-User

EDIT: Mit der Verschachtelung isses sooo nix. Das hätt aber ein alter 2650 oder Z80 auch nicht gemacht.

dwod
17.04.2008, 21:52
@PicNick

Vielen Dank, der Link hat mir weitergeholfen. Die Ausarbeitung hat mir gefallen und war sehr hilfreich.

Ich hätte da noch eine letzte Frage O:) :

Wenn ich in Bascom zu einem Ziel springe --> GOTO Label

und dieses Ziel in ASM definiere -->

$asm
Label :
........
findet der Compiler dann das Ziel ?


EDIT : Den Z80 hätte ich über den Akku programmiert.
Übrigens war der Z80 damals ein HighTec Teil. An der Schule hatten wir ein Teil von Siemens, gross wie ein Fenster, auf Rollen , mit einer 7-Segment-Anzeige und Hex-Tastatur. Das Ganze war noch diskret aufgebaut.


Gruss

Wolfgang

PicNick
18.04.2008, 10:15
.. gross wie ein Fenster, auf Rollen ..
Is ja noch schlimmer mit dir als angenommen :mrgreen:

Mit den Label im Programmspeicher muß man aufpassen: Der µC hat da zwei Begriffe: Worte und Bytes.
Instructions brauchen ja immer 16-Bit, also zwei Byte, während irgendwelche Daten (im Prog-speicher) nur auf Byte ausgerichtet sind.
Konkret:
wenn du schreibst


$asm
rcall labello
...
labello:
ret
$end asm

klappt das tadellos

Bascom gibt aber immer die Byteaddresse zurück


DIM addr AS WORD
DIM dat AS BYTE
addr = loadlabel (labello) ' byteaddresse
dat = CPEEK(addr) ' dat = &H41
......
labello:
DATA &H41


Wenn du aber dort hinjumpen willst, mußt du addr / 2 nehmen (->wortadresse)


DIM addr AS WORD
addr = LOADLABEL (labello) ' byteaddresse

$ASM
'----- variable "addr" in register "Z" laden -----
LOADADR addr, X ' variable "addr" (SRAM)
LD zl, X+ ' Reg z load
LD zh, X+
'----- register "Z" / 2 -----
LSR zh
ROR zl
'----- Call register "Z" -----
ICALL ' call Z
$END ASM


......
labello:
..
return


Verständlich oder kryptisch ?

BTW: ob der label innerhalb "$ASM" definiert wird oder ein "bascomlabel" ist, ist egal

dwod
18.04.2008, 13:17
@PicNick

ich danke Dir für die Ausführungen und wünsche Dir noch einen schönen Tag.


Grüsse aus Köln

Wolfgang