Процедура вычисления натурального логарифма с использованием ряда Тейлора |
||||
PROC logarithm |
заголовок процедуры |
|||
0840 |
E5 |
PUSH HL |
запись в стек содержимого регистровой пары HL |
|
0841 |
26 00 |
MVI H,0h |
сбрасываем счетчик степеней |
|
0843 |
06 03 |
MVI B,3h |
в регистр B – основание логарифма (3) |
|
0844 |
CD 80 08 |
CALL power |
вызов процедуры возведения в степень |
|
0845 |
16 00 |
M1: |
MVI D,0h |
в старший байт запишем 0 (1-байтное число) |
0847 |
59 |
MOV E,C |
в младший байт – число из регистра С |
|
0844 |
CD 80 08 |
CALL fact |
вызов процедуры вычисления факториала |
|
084B |
24 |
INR H |
увеличиваем счетчик степеней |
|
084C |
3E 00 |
MVI A,0h |
обнуляем регистр А |
|
084E |
B9 |
CMP C |
для сравнения с ним регистра С |
|
0848 |
CD 80 08 |
CALL divide |
вызов процедуры деления |
|
0852 |
25 |
DCR H |
коррекция счетчика |
|
0848 |
CD 80 08 |
CALL summ |
вызов процедуры cуммирования |
|
0853 |
54 |
MOV D,H |
передача результата через регистр D |
|
0854 |
E1 |
POP HL |
чтение из стека в регистровую пару HL |
|
0855 |
C9 |
RET |
возврат из процедуры |
|
Процедура умножения двух слов |
||||
PROC multiplic |
заголовок процедуры |
|||
0860 |
E5 |
PUSH HL |
запись в стек содержимого регистровой пары HL |
|
0861 |
6B |
MOV L,E |
в регистр L – младший байт множителя 1 |
|
0842 |
62 |
MOV H,D |
в регистр H – старший байт множителя 1 |
|
0863 |
05 |
DCR B |
начало отсчета суммирований |
|
0864 |
7D |
M2: |
MOV A,L |
в регистр А – младший байт множителя 1 |
0865 |
83 |
ADD E |
прибавляем к нему регистр E (А=А+E) |
|
0866 |
6F |
MOV L,A |
запоминаем результат в регистре L |
|
0867 |
7C |
MOV A,H |
в регистр А – старший байт множителя 1 |
|
0868 |
CE |
ACI 0h |
прибавляем к нему перенос (А=А+0h+СY) |
|
0869 |
82 |
ADD D |
и старший байт множителя 1 (А=А+D) |
|
086A |
05 |
DCR B |
уменьшаем счетчик суммирования |
|
086B |
CA 71 08 |
JZ M3 |
переход на выход если счетчик в нуле |
|
086E |
C3 64 08 |
JMP M2 |
безусловный переход для создания цикла |
|
0871 |
EB |
M3: |
XCHG |
обмен между парами регистров HL и DE |
0872 |
E1 |
POP HL |
чтение из стека в регистровую пару HL |
|
0873 |
C9 |
RET |
возврат из процедуры |
|
Процедура деления |
||||
PROC divide |
заголовок процедуры |
|||
0880 |
0E 00 |
MVI C,0h |
обнуляем регистр-счетчик результата |
|
0882 |
7B |
M4: |
MOV A,E |
в регистр А младший байт делимого |
0883 |
90 |
SUB B |
вычитаем из регистра А регистр B (A=A-B) |
|
0884 |
5F |
MOV E,A |
помещаем результат обратно в регистр E |
|
0885 |
7A |
MOV A,D |
в регистр А старший байт делимого |
|
0886 |
DE 00 |
SBI 0h |
вычитаем из регистра А заем (А=А-0h-CY) |
|
0888 |
D6 |
RC M4 |
выход если произошел заем из старшего байта |
|
0889 |
57 |
MOV D,A |
помещаем результат обратно в регистр D |
|
088A |
0C |
INR C |
увеличиваем счетчик результата |
|
088B |
C3 82 |
JMP M4 |
безусловный переход для создания цикла |
|
Процедура возведения в степень |
||||
PROC power |
заголовок процедуры |
|||
0910 |
7B |
MOV A,E |
в регистр А – младший байт степени |
|
0911 |
81 |
ADD C |
прибавляем к нему младший байт степени |
|
0912 |
5F |
MOV E,A |
сохраняем результат в регистре Е |
|
0913 |
7A |
MOV A,D |
в регистр А – старший байт основания |
|
0917 |
CE 00 |
ACI 0h |
прибавляем к нему перенос от умножения |
|
0918 |
80 |
ADD B |
и прибавляем старший байт 2 множителя |
|
0919 |
57 |
MOV D,A |
сохраняем результат в регистре D |
|
091А |
C9 |
RET |
возврат из процедуры |
|
Процедура вычисления факториала |
||||
PROC fact |
заголовок процедуры |
|||
0A80 |
0E 00 |
MVI C,0h |
обнуляем регистр-счетчик результата |
|
0A82 |
7B |
M4: |
MOV A,E |
в регистр А младший байт множимого |
0A83 |
90 |
SUB B |
вычитаем из регистра А регистр B (A=A-B) |
|
0A84 |
5F |
MOV E,A |
помещаем результат обратно в регистр E |
|
0A85 |
7A |
MOV A,D |
в регистр А старший байт множимого |
|
0A86 |
21 05 0B |
CALL multiplic |
вызов процедуры умножения |
|
0A89 |
DE 00 |
SBI 0h |
вычитаем из регистра А заем (А=А-0h-CY) |
|
0A8A |
D6 |
RC M4 |
выход если произошел заем из старшего байта |
|
0A8B |
57 |
MOV D,A |
помещаем результат обратно в регистр D |
|
0A8C |
0C |
INR C |
увеличиваем счетчик результата |
|
088B |
C3 82 |
JMP M4 |
безусловный переход для создания цикла |
|
Процедура сложения двух слов |
||||
PROC summ |
заголовок процедуры |
|||
0B10 |
7B |
MOV A,E |
в регистр А – младший байт 1 слагаемого |
|
0B11 |
81 |
ADD C |
прибавляем к нему младший байт 2 слагаемого |
|
0B12 |
5F |
MOV E,A |
сохраняем результат в регистре Е |
|
0B13 |
7A |
MOV A,D |
в регистр А – старший байт 1 слагаемого |
|
0B14 |
CE 00 |
ACI 0h |
прибавляем к нему перенос от сложения |
|
0B16 |
80 |
ADD B |
и прибавляем старший байт 2 слагаемого |
|
0B17 |
57 |
MOV D,A |
сохраняем результат в регистре D |
|
0B18 |
C9 |
RET |
возврат из процедуры |
После выполнения программы в регистровой паре ВС содержится мантисса результата, а в регистре D содержится порядок результата: 47,39ּ100.
Содержимое ячеек памяти перед выполнением программы
Таблица 2
Адрес |
Содержимое ячейки (НЕХ) |
Комментарий |
0B00 |
32 |
число 50 |
0B01 |
В |
число 11 |
0B02 |
3 |
число 3 |
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.