В большинстве микроконтроллеров и микропроцессоров
При использовании таких таблиц извлечение
Подпрограмма, код которой приведен в Программе 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 = 0
retlw b’00000110’; Код для 1; Возвращается при N = 1
retlw b’01011011’; Код для 2; Возвращается при N = 2
retlw b’01001111’; Код для 3; Возвращается при N = 3
retlw b’01100110’; Код для 4; Возвращается при N = 4
retlw b’01101101’; Код для 5; Возвращается при N = 5
retlw b’01111101’; Код для 6; Возвращается при N = 6
retlw b’00000111’; Код для 7; Возвращается при N = 7
retlw b’01111111’; Код для 8; Возвращается при N = 8
retlw b’01101111’; Код для 9; Возвращается при N = 9
В Программе 6.6 не учитывается возможность того, что входное значение в W может быть больше h’09’. Разумеется, такого быть не должно, однако надежный код должен предусматривать все непредвиденные ситуации, даже если они ошибочны с точки зрения программы. Это особенно справедливо в том случае, если модуль предполагается повторно использовать в других приложениях. Что же случится, если такое произойдет, и как можно усовершенствовать программу для возврата в этом случае кода ошибки, скажем —1?
Кажущаяся простота метода прибавления байта, находящегося в W, к младшему байту счетчика команд (PCL) для выбора одной из N команд возврата обманчива. Несмотря на то что этот способ работает в большинстве случаев, когда размер таблицы невелик, у неопытного программиста он может привести к краху системы в самой, казалось бы, безобидной ситуации.