Разработка программы ADN1
MOV R2,#04h - R2 является счетчиком циклов
DJNZ R2, M2 - уменьшает содержимое R2 на единицу и переходит на начало цикла, пока содержимое R2не равно 0.
2.3. Обоснование выбора команд, реализующих основное действие
цикла (поле 2В) и подготовка параметров следующего цикла (поле 3В)
MOV A, @R0; в аккумулятор идет содержимое регистра РПД, адрес
; которого находится в R0
ADDC A, @R1; в аккумулятор идет число, которое находится суммой
;содержимого аккумулятора и содержимого регистра РПД,
;адрес которого находится в R1
MOV @R1, A;в регистр РПД, адрес которого находится в R1, идет
;содержимое аккумулятора
ADN1 PAGE 1
1;
2 $MOD845; Использовать таблицу кодов МК ADuC845
---- 3 CSEG; Начало сегмента кодов
0000 4 ORG 0000h; 0000h-начальный адрес сегмента кодов
0000 782F 6 mov R0,#2Fh
0002 793F 7 mov R1,#3Fh
0004 7A03 8 mov R2,#04h
0006 E6 10 M2: MOV A, @R0
0007 37 11 ADDC A, @R1
0008 F7 12 MOV @R1, A
0009 18 13 DEC R0
000A 19 14 DEC R1
000B DAF9 15 DJNZ R2, M2
000D 00 16 nop
17 END
VERSION 1.2h ASSEMBLY COMPLETE, 0 ERRORS FOUND
ADN1 PAGE 2
M2............... C ADDR 0006H
HEX:
:0E000000782F793F7A03E637F71819DAF900FE
:00000001FF
MOV R0, #2Fh MOV R0, #3Fh MOV R0, #04h M1: MOV A,@R0 ADDC A,@R0 MOV @R1,A DEC R0 DEC R1 DJNZ R2,M1 NOP |

2.5. Написание исходного текста, ассемблирование и апробирование
Ст. | Мл. | ||||
Мл.символ адреса | 0h | Ch | Dh | Eh | Fh |
1-е слагаемое | 20h | B9 | |||
2-е слагаемое | 30h | D1 | BC | ||
АС-полуперенос | |||||
С-перенос | |||||
Сумма | 40h | 3C | |||
Р-паритет |
Данные до начала работы:
Результат работы программы после первого цикла
Результат работы программы после второго цикла
Результат работы программы после третьего цикла
Результат работы программы после четвертого цикла
Разработка программы ADN2
ADN2 PAGE 1
1;
2 $MOD845; Использовать таблицу кодов МК ADuC845
---- 3 CSEG; Начало сегмента кодов
0000 4 ORG 0000h; 0000h-начальный адрес сегмента кодов
0000 782F 6 mov R0,#2Fh
0002 793F 7 mov R1,#3Fh
0004 7A03 8 mov R2,#03h
0006 75084F 9 MOV 08H, #4FH
0009 E6 11 M2: MOV A, @R0
000A 37 12 ADDC A, @R1
000B D2D3 13 SETB RS0
000D F6 14 MOV @R0, A
000E 18 15 DEC R0
000F C2D3 16 CLR RS0
0011 18 17 DEC R0
0012 19 18 DEC R1
0013 DAF4 19 DJNZ R2, M2
0015 00 20 nop
21 END
VERSION 1.2h ASSEMBLY COMPLETE, 0 ERRORS FOUND
ADN2 PAGE 2
M2............... C ADDR 0009H
RS0............... B ADDR 00D3H PREDEFINED
HEX:
:10000000782F793F7A0375084FE637D2D3F618C2B6
:06001000D31819DAF40018
:00000001FF
Ст. | Мл. | |||||
Мл.символ адреса | 0h | Ch | Dh | Eh | Fh | |
1-е слагаемое | 20h | B9 | ||||
2-е слагаемое | 30h | D1 | BC | |||
АС-полуперенос | ||||||
С-перенос | ||||||
Сумма | 40h | 3C | ||||
Р-паритет | ||||||
Циклы | 3-й | 2-й | 1-й | |||
Результаты работы программы ADN2:
Данные до начала работы:
Результат работы программы после первого цикла:
Результат работы программы после второго цикла:
Результат работы программы после третьего цикла:
Результат работы программы после четвертого цикла:
Разработка структуры программы ADP2. Выделение из программы ADP2 основной программы и подпрограммы
ADP2 PAGE 1
1;
2 $MOD845; Использовать таблицу кодов МК ADuC845
---- 3 CSEG; Начало сегмента кодов
0000 4 ORG 0000h; 0000h-начальный адрес сегмента кодов
0000 782F 7 mov R0,#2Fh
0002 793F 8 mov R1,#3Fh
0004 7A04 9 mov R2,#04h
0006 75115F 10 MOV 11H, #5FH
0009 120030 11 CALL AD2
000C 00 12 NOP
000D 784F 13 mov R0,#4Fh
000F 795F 14 mov R1,#5Fh
0011 7A04 15 mov R2,#04h
0013 75116F 16 MOV 11H, #6FH
0016 120030 17 CALL AD2
0019 00 18 nop
0030 19 org 0030h
0030 C3 20 AD2: clr C
0031 E6 21 M2: MOV A, @R0
0032 37 22 ADDC A, @R1
0033 D2D4 23 SETB RS1
0035 F7 24 MOV @R1, A
0036 19 25 DEC R1
0037 C2D4 26 CLR RS1
0039 18 27 DEC R0
003A 19 28 DEC R1
003B DAF4 29 DJNZ R2, M2
003D 22 30 RET
31 END
VERSION 1.2h ASSEMBLY COMPLETE, 0 ERRORS FOUND
ADP2 PAGE 2
AD2............... C ADDR 0030H
M2............... C ADDR 0031H
RS1............... B ADDR 00D4H PREDEFINED
Результат работы программы ADP2:
Данные до начала работы:
Результат работы программы после первого цикла:
Результат работы программы после второго цикла:
Результат работы программы после третьего цикла:
Результат работы программы после четвертого цикла:
Разработка программы ADР22 с двукратным вызовом подпрограммы AD2
Расположение исходных данных промежуточного и окончательного результатов работы программы ADP2:
Ст. | Адреса байт | Мл. | |||
1-е слагаемое | 20h | … | 20h | 2Eh | 2Fh |
2-е слагаемое | 30h | … | 30h | 3Eh | 3Fh |
3-е слагаемое | 40h | … | 40h | 4Eh | 4Fh |
Сумма 1+2 | 50h | … | 50h | 5Eh | 5Fh |
Сумма 1+2+3 | 60h | … | 60h | 6Eh | 6Fh |
Численный пример вычисления суммы трех трехбайтных чисел:
Ст. | Адреса байт | Мл. | ||||
Мл.символ адреса | 0h | Ch | Dh | Eh | Fh | |
1-е слагаемое | 20h | B9 | ||||
2-е слагаемое | 30h | D1 | BC | |||
3-е слагаемое | 40h | BB | E1 | |||
АС-полуперенос | ||||||
С-перенос | ||||||
Сумма 1+2 | 50h | 3C | ||||
Р-паритет | ||||||
АС-полуперенос | ||||||
С- перенос | ||||||
Сумма 1+2+3 | F8 | D4 | ||||
Р-паритет | ||||||
ADP22 PAGE 1
1;
2 $MOD845; Использовать таблицу кодов МК ADuC845
---- 3 CSEG; Начало сегмента кодов
0000 4 ORG 0000h; 0000h-начальный адрес сегмента кодов
0000 782F 7 mov R0,#2Fh
0002 793F 8 mov R1,#3Fh
0004 7A04 9 mov R2,#04h
0006 75115F 10 MOV 11H, #5FH
0009 120030 11 CALL AD2
000C 00 12 NOP
000D 784F 13 mov R0,#4Fh
000F 795F 14 mov R1,#5Fh
0011 7A04 15 mov R2,#04h
0013 75116F 16 MOV 11H, #6FH
0016 120030 17 CALL AD2
0019 00 18 nop
0030 19 org 0030h
0030 C3 20 AD2: clr C
0031 E6 21 M2: MOV A, @R0
0032 37 22 ADDC A, @R1
0033 D2D4 23 SETB RS1
0035 F7 24 MOV @R1, A
0036 19 25 DEC R1
0037 C2D4 26 CLR RS1
0039 18 27 DEC R0
003A 19 28 DEC R1
003B DAF4 29 DJNZ R2, M2
003D 22 30 RET
31 END
VERSION 1.2h ASSEMBLY COMPLETE, 0 ERRORS FOUND
ADP2 PAGE 2
AD2............... C ADDR 0030H
M2............... C ADDR 0031H
RS1............... B ADDR 00D4H PREDEFINED
Данные до начала вызова подпрограммы AD2 в первый раз:
Результат после выполнения первого цикла подпрограммы:
Результат после выполнения второго цикла подпрограммы:
Результат после выполнения третьего цикла подпрограммы:
Результат после выполнения четвертого цикла подпрограммы:
Данные до начала вызова подпрограммы AD2 во второй раз:
Результат после выполнения первого цикла подпрограммы:
Результат после выполнения второго цикла подпрограммы:
Результат после выполнения третьего цикла подпрограммы:
Результат после выполнения четвертого цикла подпрограммы: