/ / Arraywert aus SRAM AVR Assembler lesen - Arrays, Assembly, avr

Lesen Array-Wert von SRAM AVR Assembler - Arrays, Assembly, avr

Ich lerne avr Assembler und würde gerne fragenWie kann ich einen bestimmten Wert aus einem Array lesen? Hier ist mein Code, der sehr gut funktioniert und Ziffernarray in SRAM speichert ... wie könnte ich zum Beispiel den Wert 6 von Digitarray lesen?

.include    "m328pdef.inc"

.DSEG
digit:  .Byte 9         ; Segment Digit
.CSEG
.ORG    0x0000
rjmp    _Reset

_Reset:
ldi     yl,byte1(RAMEND)
out     SPL,yl
ldi     yh,byte2(RAMEND)
out     SPL+1,yh
sbiw    yl,32

; Digit Store To SRAM
ldi     XH, HIGH(digit)
ldi     XL, Low(digit)
ldi     R16, 0x3F           ; Digit 0
st      X+, R16
ldi     R16, 0x06           ; Digit 1
st      X+, R16
ldi     R16, 0x5B           ; Digit 2
st      X+, R16
ldi     R16, 0x4F           ; Digit 3
st      X+, R16
ldi     R16, 0x66           ; Digit 4
st      X+, R16
ldi     R16, 0x6D           ; Digit 5
st      X+, R16
ldi     R16, 0x7D           ; Digit 6
st      X+, R16
ldi     R16, 0x07           ; Digit 7
st      X+, R16
ldi     R16, 0x7F           ; Digit 8
st      X+, R16
ldi     R16, 0x6F           ; Digit 9
st      X+, R16

; Digit Read From SRAM
ldi     XH, HIGH(digit)     ; load X = address of digit array
ldi     XL, Low(digit)      ; ...high Byte also

add     XH, R24             ; add the array index
Adc     XL, R25             ; ...And add 0 To propagate the carry
ld      R26, X

rjmp _Reset

In diesem Beispiel im Simulator muss ich also den Lesewert 6 in meinem Digit-Array abrufen. Der Wert sollte mich erhalten: 0x7D. Wenn ich den Wert 9 in Array lesen möchte, muss ich 0x6F erhalten.

Erfolg beim Schreiben von Arrays in SRAM und Lesen ist nur der erste Index (0x3F). Wie kann ich also angeben, welchen Index in Array lesen soll?

Vielen Dank

Antworten:

0 für die Antwort № 1

Ich habe gerade HIGH und LOW in R24 und R25 eingefügt und arbeitet jetzt im Simulator.

ldi     XH, HIGH(digit)     ; load X = address of digit array
ldi     XL, Low(digit)      ; ...high Byte also

ldi     R24, HIGH(6)        ; Read index 6 value from digit array High Byte
ldi     R25, Low(6)         ; Read index 6 value from digit array Low Byte

add     XH, R24             ; add the array index
Adc     XL, R25             ; ...And add 0 To propagate the carry
ld      R26, X