В большинстве микроконтроллеров и микропроцессоров
При использовании таких таблиц извлечение
Подпрограмма, код которой приведен в Программе 6.6, осуществляет выборку элемента таблицы, прибавляя число
; ******************
; * ФУНКЦИЯ: Возвращает N-й элемент таблицы, *
; *:где N — содержимое W *
; * ПРИМЕР: При W = 6 возвращается код b’01111101’ *
; * ВХОД: N (в диапазоне 0…9) в W *
; * ВЫХОД: N-й элемент таблицы в W *
; *******************
PCL equ 2
; Младший байт РС — в регистре h’02’SVN_SEG
addwf PCL,f
; Прибавим W к PCL, получая РС + N; xgfedcba
retlw b’00111111’
; Код для 0; Возвращается при N = 0retlw b’00000110’
; Код для 1; Возвращается при N = 1retlw b’01011011’
; Код для 2; Возвращается при N = 2retlw b’01001111’
; Код для 3; Возвращается при N = 3retlw b’01100110’
; Код для 4; Возвращается при N = 4retlw b’01101101’
; Код для 5; Возвращается при N = 5retlw b’01111101’
; Код для 6; Возвращается при N = 6retlw b’00000111’
; Код для 7; Возвращается при N = 7retlw b’01111111’
; Код для 8; Возвращается при N = 8retlw b’01101111’
; Код для 9; Возвращается при N = 9В Программе 6.6 не учитывается возможность того, что входное значение в W
может быть больше h’09’. Разумеется, такого быть не должно, однако надежный код должен предусматривать все непредвиденные ситуации, даже если они ошибочны с точки зрения программы. Это особенно справедливо в том случае, если модуль предполагается повторно использовать в других приложениях. Что же случится, если такое произойдет, и как можно усовершенствовать программу для возврата в этом случае кода ошибки, скажем —1?Кажущаяся простота метода прибавления байта, находящегося в W, к младшему байту счетчика команд (PCL) для выбора одной из N команд возврата обманчива. Несмотря на то что этот способ работает в большинстве случаев, когда размер таблицы невелик, у неопытного программиста он может привести к краху системы в самой, казалось бы, безобидной ситуации.