Читайте также: |
|
1. Часто необходимо иметь в памяти программ таблицы готовых решений. Для возможности работы с такими таблицами, хранящимися в резидентной памяти программ (РПП) и внешней памяти программ (ВПП), имеются специальные команды обращения к памяти – MOVC. Поясним использование этих команд на следующем примере. Требуется составить подпрограмму вычисления синуса угла Х (00<X<890 с дискретностью 10). Наиболее быстрое вычисление функции можно получить путем выборки готового значения синуса из таблицы. Такая таблица для диапазона 00 - 890 займет 90 байтов с погрешностью 0,4%. Исходным параметром для подпрограммы служит значение угла Х, находящееся в аккумуляторе:
; Вычисления Sin(x) по таблице
; Вход: В (А) – X в пределах от 0 до 89 градусов
; Выход: (А) – дробная часть значения синуса
SINX: INC A; Инкремент аккумулятора
MOVC A,@A+PC; Загрузка значения синуса из таблицы
RET; Возврат
; Таблица значений синуса
SINUS: DB 0; SIN(0)=0
DB 00000100B; SIN(1)=0.017
DB 00001001B; SIN(2)=0.035
…
…
…
DB 11111111B; SIN(89)=0.999
Примечательно, что данная программа обходится без использования указателя данных DPTR. Инкремент А перед обращением к таблице необходим из-за наличия однобайтной команды возврата, расположенной между командой MOVC и началом таблицы значений синуса.
Вычислить произведение двух 4-х битных чисел, расположенных в младших тетрадах регистров R0 и R1. Для вычисления используется таблица произведений для всех комбинаций сомножителей (всего 256). Произведение двух младших тетрад имеет формат 1 байт.
; Вычисление Z=X*Y
; R0=0000.XXXX
; R1=0000.YYYY
; X и Y принимают значения 0 и 1
ORG 0C100H; Директива ассемблера, задающая
; начальный адрес программы
MOV DPTR, #MAS; Загрузка адреса массива
; в регистр-указатель данных
MOV A,R0; Пересылка множимого в аккумулятор
SWAP A; Обмен тетрад аккумулятора
ORL A,R1; Формирование в аккумуляторе адреса
; произведения
MOVC A,@A+DPTR; Загрузка в аккумулятор произведения
ORG 0C300H; Директива ассемблера, задающая
; начальный адрес таблицы
; Директивы ассемблера, формирующие таблицу произведений
MAS DB 0,0,0,0,0,0,0,0; Z=0*Y
DB 0,0,0,0,0,0,0,0
DB 0,1,2,…..,0FH; Z=1*Y (1*0,1*1,1*2,…,1*0FH)
…
…
…
DB 0,0FH,1EH,…,0E1; Z=0F*Y
; (0FH*0,0FH*1,0FH*2,…,0FH*0FH)
Дата добавления: 2015-07-11; просмотров: 238 | Нарушение авторских прав