2015-02-25 4 views
0
1  ORG $0020 start of RAM (data) 
2 AT1 RMB 2  
3 Space RMB 1  
4 Length RMB 1 
5 Count RMB 1  
6 Ptr RMB 2 
7  ORG $E000 start of ROM (program) 
8 START LDX AT1 
9  STX Ptr 
10  LDAA Length 
11  STAA Count 
12  LDAB Space 
13 LOOP TST Count 
14  BEQ STOP 
15  LDX Ptr 
16  LDAA 0,X 
17  ABX 
18  STAA 0,X 
19  DEC Count 
20  LDX Ptr 
21  INX 
22  STX Ptr 
23 BRA LOOP 
24 STOP 

1) Показать сценарий, если таблица из 6 элементов скопирована с адреса 007f на 009d (вы можете произвольно ввести значения 6 элементов).Монтажное программирование 68HC11 микроконтроллер

2) Пересмотрите программу, чтобы подсчет TST в строке 13 не понадобился. (то есть инструкция перехода BEQ в строке 14 будет проверять правильное состояние выполнения программы для определения условия ветвления.)

3) Пересмотрите программу, чтобы «Ptr RMB 2» в строке 6 не использовался. Вместо этого регистр X указывает на элемент в таблице 1, а регистр Y указывает на элемент в таблице 2.

Привет, Все, я в тупике по этому вопросу ... Для третьего, мой конкретный вопрос должен делать с таблицами ... X указывает на пробел, а Y указывает на длину? Я не знаю, на что ссылается таблица ...

Для второго это означает, что я полностью удаляю линию TST вместе с остальной частью цикла в строке 23? Что значит проверить «правильный статус» программы?

Любая помощь будет очень приятной ... Спасибо.

ответ

1

Относительно (2): Некоторые инструкции (включая все инструкции LOAD и STORE) изменяют регистр кода условий (CCR) в соответствии с результатом операции. Итак, если вы поместите свою условную ветвь после таких инструкций, явная инструкция TST становится излишней.

Относительно (3): Это обычная процедура копирования. Вы копируете исходное местоположение (начиная с $ 7F) до места назначения (начиная с 9 долларов США). Вы можете думать об этом как о массивах или таблицах. Итак, у вас есть исходная таблица и таблица назначения.

А вот возможная реализация после всех модификаций:

    org  $0020    ;start of RAM (data) 

;AT1    rmb  2 
;Space    rmb  1 
;Length    rmb  1 
;Count    rmb  1 

        org  $E000    ;start of ROM (program) 

Start    ldab  #6     ;ldaa Length (affects CCR[Z] bit) 
                ;staa Count (affects CCR[Z] bit) 
        beq  Done    ;(only needed if length is unknown, redundant when fixed at 6) 

        ldx  #$7F    ;ldx AT1 (X is source pointer) 
        ldy  #$9D    ;ldy AT1 (Y is destination pointer) 
                ;ldab Space 
                ;aby 
Loop    ldaa  ,x     ;load source byte 
        staa  ,y     ;save to destination 
        inx       ;increment source pointer 
        iny       ;increment destination pointer 
        decb       ;dec Count (affects CCR[Z] bit) 
        bne  Loop    ;repeat until Count reaches zero 

Done    bra  *     ;spin here forever (halt) 

        org  $FFFE 
        dw  Start 

[Держу пари, следующий ваш инструктор будет просить вас, чтобы преобразовать это в подпрограмму общего назначения, где вы передаете указатель источника (X), указатель назначения (Y) и длины (B) в качестве параметров.]

 Смежные вопросы

  • Нет связанных вопросов^_^