1. Оценить время выполнения команд МК51 при частоте кварца 12 МГц
ORG | 0 | ||
74 05 | MOV | A,#5 | ; 1 |
83 | MOVC | A,@A+PC ; 2 | |
D5 E0 FD | DJNZ | ACC,$ | ; 2 |
D5 F0 F9 | DJNZ | B,2 | ; 2 |
Слева от мнемоники приведены результаты трансляции команд, в поле комментария - время выполнения команд в машинных циклах. Первый байт содержит код операции. 05 - константа 5, Е0 - прямой адрес аккумулятора, F0 - прямой адрес регистра В. FD - относительное смещение (-3) от адреса первого байта следующей команды до первого байта данной команды. FE - относительное смещение от адреса следующей команды до ячейки с адресом 2, равное (-6). При выполнении второй команды в аккумулятор пересылается байт из ячейки памяти программ, адрес которой определяется путем суммирования содержимого А и РС. В это время в аккумуляторе находится число 5, а в программном счетчике подготовлен адрес следующей команды, т.е. 3. В восьмой ячейке находится число F9=249. Следующая команда при первом проходе выполнится 249 раз. После сброса в регистре В находится 0. Поэтому последняя команда будет выполняться 256 раз. При этом 255 раз будет осуществляться возврат на вторую команду. При ее выполнении в аккумулятор будет попадать число D5=213. Столько раз в цикле каждый раз будет выполняться предпоследняя команда. Один машинный цикл равен 1 мкс. В итоге получаем
Ответ: 1+2*256+(2*249+2*255*213)+2*256=110153 мкс
2. Оценить время выполнения команд после сброса МК51и содержимое аккумулятора при частоте кварца 12 МГц
ORG | 0 | ||
0,1 | MOV | A,#7 | |
2,3,4 | MOV | B,#5 | ;2 |
5 | MOVC | A,@A+PC ; | (A)=F8=248 |
6,7,8 | DJNZ | ACC,$ | |
9,10 | PUSH | ACC | ;2 |
11,12,13 | DJNZ | B,6 | ; rel=F8 |
14,15 | MOV | A,SP | |
16,17 | ADD | A,10 |
Слева от мнемоники команд записаны адреса ячеек памяти программ, в которых расположены байты, начиная с нулевой ячейки. При выполнении третьей команды в аккумулятор попадает содержимое 13 ячейки, т.е. число F8=248 (относительное смещение от 14 до 6 ячейки). Столько раз выполняется при первом проходе следующая команда, после чего содержимое аккумулятора обнуляется. Команда PUSH ACC загружает в стек (в 8 ячейку, т.к. после сброса в указателе стека записано число 7) ноль. Команда DJNZ B,6 выполняется 5 раз. При этом 4 раза осуществляется возврат на 6 ячейку при нулевом содержимом аккумулятора, в результате чего обнуляются еще 4 ячейки стека, в том числе и десятая ячейка. После пятикратного выполнения команды PUSH ACC в указателе стека находится число 12. Именно оно и определяет содержимое аккумулятора после выполнения последней команды.
Ответ: 1+2+2+(2*248+2*4*256)+2*5+2*5+1+1=2571 мкс, А=12=0CH
3. Оценить время выполнения команд после сброса при час-тоте кварца 12 МГц
ORG | 0 | ||
MOV | A,#22H | ;1 (А)=34 | |
PUSH | ACC | ;2 | |
MOV | B,SP | ;2 (В)=8 | |
DIV | AB | ;4 (А)=4 (В)=2 | |
ACALL | 1 | ;2+2 | |
MOVC | @A+PC | ;2 (А)=253 | |
DIV | AB | ;4 ;253/2 (А)=126 (В)=1 | |
MUL | AB | ;4 ;(А)=126 (В)=0 | |
M1: | DJNZ | ACC,$ | ;2*126+2*255*256 |
DJNZ | B,M1 | ;2*256 |
Число 22Н находится в первой ячейке и соответствует машинному коду команды RET. Она выполняется при вызове подпрограммы ACALL 1. При выполнении команды MOVC @A+PC в аккумулятор записывается третий байт команды DJNZ ACC,$ (относительное смещение от адреса первого байта следующей команды до метки М1 (-3)=253). Основное время выполнения программы определяют две последние команды. Команда DJNZ
B,M1 выполняется 256 раз, так как в регистре В находится 0 при первом ее выполнении. Команда DJNZ ACC,$ первый раз выполнится 126 раз, а затем еще в цикле 255 раз по 256 раз.
Ответ: 1+2+2+4+4+2+4+4+252+130560+512=131347 мкс
4. Оценить содержимое аккумулятора и время выполнения команд после сброса МК51 при частоте кварца 12 МГц
ORG | 0 | ||
SJMP | M1 | ;2 | |
DELAY: | DJNZ | ACC,$ | ;2*192 |
MOV | A,SP | ;1 (A)=10 | |
RET | ;2 | ||
M1: | MOVC | A,@A+PC ;2 | (A)=0C0H=192 |
PUSH | ACC | ;2 | |
ACALL | DELAY | ;2 | |
POP | B | ;2 (B)=192 | |
MUL | AB | ;4 10*192=1920 | |
; (B)=7 (A)=128=80H |
Время выполнения команд в машинных циклах приведено в поле комментария. После сброса аккумулятор обнулен. Поэтому, при выполнении команды MOVC A,@A+PC в аккумулятор попадает машинный код С0 следующей команды, адрес которой находится в программном счетчике. После выполнения команды PUSH ACC в указателе стека 8, а после вызова подпрограммы DELAY содержимое указателя стека становится равным 10. Именно оно пересылается в аккумулятор при выполнении подпрограммы. В регистр В из стека извлекается число С0Н=192. При выполнении команды умножения старший байт определяет содержимое регистра В, а в аккумулятор записывается младший байт произведения. Все команды программы выполняются однократно, кроме второй команды, которая в цикле выполняется 192 раза.
Ответ: 17+2*192=401 мкс, (A)=128=80H