从SRAM AVR汇编器

时间:2018-04-06 21:07:52

标签: arrays assembly avr

我正在学习avr汇编程序,想问一下如何从数组中读取特定值?这是我的代码非常有效,它将数字数组存储到SRAM中...现在我怎么能从数字数组读取值6?

.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

所以在模拟器的这个例子中,我需要得到我的数字数组中的读取值6它应该得到我的值:0x7D,如果我想读取数组中的值9我需要得到0x6F。

我成功地将数组写入SRAM并且读取只是第一个索引(0x3F)所以我如何指定要读取的数组中的索引?

由于

1 个答案:

答案 0 :(得分:0)

我刚刚在R24和R25中添加了HIGH和LOW,现在正在工作..在模拟器中我看到从数组中读取的值:

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