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 № 1Ich 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