Создание файла ASM, который будет возвращать символы, расположенные в 8 последовательных регистрах - PullRequest
3 голосов
/ 30 сентября 2011

Мне нужно создать файл ASM для PIC18F452, который выполняет следующие действия:

(a) определяет метку MapName как первый из 8 последовательных регистров, содержащих завершенную нулем строку не более 7 символов. (б) получить доступ к 8-разрядной целочисленной переменной без знака с именем MapIndex, которая была объявлена ​​в C-файле. (c) определить функцию ASM getMapChar, которая может быть вызвана из C с использованием прототипа функции char getMapChar(void). Функция должна возвращать соответствующий символ, если значение MapIndex равно <= 7 или значение 255, если <code>MapIndex равно> 7. (d) сделать метки MapName и getMapChar доступными для внешнего файла C.

Мой код пока показан ниже:

; Configuration word : WDT off, power-up timer on, code protect off, RC oscillator

list = p18f452

MapName     equ     0x20
MapName1    equ     0x21
MapName2    equ     0x22
MapName3    equ     0x23
MapName4    equ     0x24
MapName5    equ     0x25
MapName6    equ     0x26
MapName7    equ     0x27
CurrentChar equ     0x28

extern  MapIndex

org 0x00
goto    getMapChar

getMapChar
    movlw   0x00
    movwf   MapName7

GLOBAL  getMapChar
GLOBAL  MapName

    END

Я уже выполнил части (a), (b) и (d), но у меня возникли некоторые проблемы с написанием кода, который автоматически проходит через каждый из последовательных регистров, используя значение MapIndex. Может ли кто-нибудь помочь мне, пожалуйста? Это будет высоко ценится.

1 Ответ

1 голос
/ 30 сентября 2011

Вы можете использовать один из FSR (регистры выбора файлов) для адреса MapName регистры файлов:

lfsr    0, MapName      ;Load 12bit file address pointer to FSR0
movf    MapIndex, w     ;Load MapIndex to WREG  ; or movff MapIndex, WREG
addwf   FSR0L, f        ;Add MapIndex to FSR0 low byte
movf    INDF0, w        ;Load MapName[MapIndex] to WREG

Если все регистры файлов переменной MapName не находятся внутри 8-разрядного адресного пространства, то после добавления MapIndex к FSR0L check Carry флаг для переполнения. Если установлено значение Carry , увеличьте также регистр файла FSR0H .

...