|
Лабораторная работа N1_2С
Команды для организации циклов (LOOP <label>)
Синтаксис - такой же, как в командах условного перехода.
При выполнении команды LOOP содержимое регистра CX уменьшается на 1 и если содержимое регистра CX не равно 0 и истинно условие перехода (только для команд loope/loopz и loopne/loohnz), то выполняется переход по адресу label т.е. метки, иначе выполняется следующая по порядку команда. К этой группе относится и вспомогательная команда JCXZ с таким же синтаксисом, выполняющая переход при CX=0.
---------------------------------------------------------------------------------
¦ Мнемоника ¦ Содержание операции ¦
¦--------------------------------------------------------------------------------
¦ loop ¦Цикл пока CX > 0 ¦
¦ loope/loopz ¦Цикл пока CX > 0 и флаг ZF установлен в 1 ¦
¦ loopne/loopnz ¦Цикл пока CX > 0 и флаг ZF установлен в 0 ¦
---------------------------------------------------------------------------------
Пример. Вычислить в цикле следующее выражение Z = (X + Y)*J при J=1,2,…,5
и записать результат в последовательные адреса памяти:
.
TITLE Программа организации цикла
DATAS SEGMENT
X DW 2
Y DW 3
J DW?
I DW 0,0,0,0,0,0,0,0,0,0
DATAS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS
PROGRAM:MOV AX,DATAS
MOV DS,AX
MOV CX,10
MOV AX,0
JCXZ K; переход при СХ равно 0
; следующие две команды показывают как организовать счетчик в АХ
A: INC AX; АХ=АХ+1
LOOP A; переход при СХ не равно 0
;следующие команды показывают реализацию условия
MOV CX,5
MOV J,5
MOV BX,OFFSET I;запись адреса I в ВХ
B: MOV AX,X
ADD AX,Y; АХ=Х+Y
MUL J; АХ= (Х+Y)*J
MOV [BX],AX;запись (Х+У)*J в последов.адреса (I, I+2,...) 5 раз
ADD BX,2
DEC J
MOV DX,J
CMP J,DX
LOOPZ B;переход при СХ не равно 0 и ZF=1
JMP K
K: MOV BX,CX
MOV AX,4C00h
INT 21H
CODES ENDS
END PROGRAM
Задания
1.Вычислить в цикле следующие выражения и записать результат в последовательные адреса памяти:
1. Подготовьте программу, реализующую следующие операции:
Z = ((X - Y) + (Y +11))*I I=1,10.
2. Z = (X +(X - Y))/I I=1,5.
3. Z = J*(X - 9) -(Y/3) J=1,7.
4. Z = K * (X - Y) + (Y +11) K=1,9.
5. Z =(W + 12) -(X - Y)/I I=1,7.
6. Z = (W +7)*J/(X - Y) J=1,7.
7. Z = W/Y +(X -9)/ J J=1,7.
8. Z = J*(X/8 - Y)*(Y/5 -X) J=1,4.
9. Z = (X - Y)/K + (Y-23) K=1,7
10. Z = W-(X-45)*3/I +(X - Y) I=1,7.
11. Z = J*X /(Y+7)*(X - Y) J=1,5
12. Z = L/(Y-9) +(X - Y)/X-27 L=1,9.
13. Z = J*(Y+79)/(X-5) J=1,7.
14. Z = W +(X - Y)/(Y-67)*I I=1,10.
15. Z = (X+6)*J/(13 - Y) J=1,7.
16. Z = W+Y +(X - Y)*K) K=1,7.
17. Z =((W-X)/(Y+21))*J J=1,5.
18. Z = (X/Y+7)*(X - Y)*I I=1,7.
19. Z = L*21 +(X - Y) L=1,3.
20. Z = W + 12-(X +2)*F F=1,5.
2. Найти в цикле смещение элемента массива в котором записано число 0 (массив записать как mas DB 1,2,3,4,5,6,7,8,9,10):
1. 2,3,4,0,5,6,7,8,9,10
2. 2,3,4,5,6,7,8,9,0
3. 2,3,4,5,6,0,7,8,9,10
4. 2,0,5,6,7,8,9,10
5. 2,3,4,5,6,7,8,0
6. 2,3,4,0,5,6,7,0
7. 2,0,5,6,7,8,9,10
8. 3,4,0,5,6,7,8,9,0
9. 2,3,0,5,6,7,8,9,10
10. 2,0,5,6,7,8,9,10
11. 2,3,4,5,6,7,8,9,0,10
12. 2,3,4,5,6,7,0,8,9,10
13. 2,3,4,0,5,6,7,8,9,10
14. 2,3,4,0,8,9,10
15. 4,0,5,6,7,8,9,10
16. 2,3,4,0,5,6,7,8,9,10
17. 2,3,4,0,5,6,7,8,9,10
18. 2,3,0,5,6,7,8,9,10
19. 2,3,4,5,6,7,8,9,0
20. 2,3,4,5,6,7,8,0
21. 2,0,5,6,7,8,9,10
22. 2,3,0,5,6,7,8,9,10
23. 2,3,4,0,6,7,8,9,10
24. 2,3,4,5,6,7,8,9,0,10
25. 2,3,4,0,5,6,7,8,9,10
26. 2,3,4,9,5,6,7,8,9,0
Пример можно посмотреть на стр.232 листинг 10.4 авторы В.Юров, С.Хорошенко
”АSSEMBLER” 1999г.
Дата добавления: 2015-11-04; просмотров: 16 | Нарушение авторских прав
<== предыдущая лекция | | | следующая лекция ==> |
What are the main reasons for the present division of Korea? | | | Динамическое выделение памяти |