Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
МУ_к_контрольной-АСС-Р.doc
Скачиваний:
6
Добавлен:
06.02.2016
Размер:
340.48 Кб
Скачать

4. Методические указания к выполнению практических заданий Задание 1. Управление циклом по счетчику.

Программа языка ассемблера– это последовательность предложений, каждое из которых записывается в отдельной строке. Переносить предложение на следующую строку или записывать в одной строке два предложения нельзя. Если в предложении более 131 символа, то 132 – ой и все остальные символы игнорируются.

Программа на ассемблере набирается в NortonCommanderилиFarи записывается с расширениемasmв папку, которая должна содержать следующие файлы:dpmiload.exe,dpmiload.dll,io.inc,tasm.exe,tlink.exe. Программа имеет следующую структуру:

MASM

MODEL small // Описание модели памяти

STACK 256 // Описание размера стека

.data // Директива начала описания констант и переменных

.code // Директива начала описания программного кода

.startup // Точка входа в программу

jmp main

include io.inc //Подключение файла с подпрограммами

main:

{Тело программы}

.exit 0 // Директива выхода из программы с указанным кодом

end // Конец описания программы

Например:

Набранная программа с именем p.asmзаписана в папку. На первом этапе ее компановки к файлуtasm.exeподключается файлp.asm, после чего образуется объектный модуль программыp.obj. На втором этапе компановки программы к файлуtlink.exeподключается объектный модуль программыp.obj, после чего образуется файлp.exe, который запускается на выполнение расчета программы. Для просмотра результата вычислений нужно отключить обе панели программыNortoncommanderилиFar.

На практике наиболее часто встречаются циклы с заранее известным числом повторений. Например, пусть некоторую группу команд S (тело цикла) надо повторить N раз (N>0). Тогда на ЯА этот цикл можно реализовать по такой схеме:

MOV CX,N ; CX-счётчик цикла

SS

S

L:

Dec CX ; CX:=CX-1

CMP CX,O ;CX=0?

JNE L ;CX<>0Goto L

В ПК введена специальная команда, которая объединяет в себе действие трех последних команд:

Управление циклом по счетчику: LOOP <метка>

Действие этой команды можно описать так:

CX: =CX-1; IF CX0 THEN GOTO <метка>

С помощью команды LOOP наш цикл запишется в следующем виде:

S

MOV CX, N ; N>0

L

S

:

LOOP L

Однако, команда LOOP имеет ряд особенностей:

  1. команда LOOP требует, чтобы в качестве счетчика цикла обязательно использовался регистр CX

  2. начальное значение для CX должно быть занесено до цикла, причем этому регистру надо присвоить ровно столько, сколько должен повторятся цикл (например, нельзя организовать цикл от 3 до 103)

  3. поскольку команда LOOP ставится в конце цикла, тело цикла хотя бы раз обязательно выполнится. Поэтому для случая CX=0 цикл все равно выполнится хотя бы один раз. Поэтому, если возможен вариант CX=0, то тело цикла следует обойти при CX=0 (именно для этих случаев в ПК введена команда JCXR)

MOV CX, N ; N>=0

JCXR L1 ; CX=0 ?L1

L

S

:

Loop l

L1:

  1. как и команда условного перехода, команда LOOP реализует только короткий переход, поэтому расстояние от нее до начала цикла (метки L) не должно превышать 127 – 128 байт (примерно 30 – 40 команд). Если цикл содержит больше команд, то цикл следует реализовать по-другому.

Например:

3

2

В

i=1

j=1

ычислитьY=∑ (i+ П (j+b) ) приb=3

Программа будет иметь вид:

MASM

MODEL small

STACK 256

.data

B db 3

I db 1

J db ?

.code

.startup

jmp main

include io.inc

main:

MOVCX,3

MOVBH, 0 ; начальное значение суммы

M2:MOVSI,CX; спасаем значение счетчика внешнего цикла

MOVCX,2

MOVAL,1 ; начальное значение произведения

MOV J,1

M1: MOV BL, J

ADD BL, B

MUL BL

INCJ; увеличиваем значениеJна единицу

LOOP M1

ADD BH, I

ADD BH, AL

INCI; увеличиваем значениеIна единицу

MOVCX,SI; восстанавливаем значение счетчика внешнего цикла

LOOP M2

MOV AL, BH

MOV DH, 0

MOV DL, 5

CALL PROCOUTNUM

.exit

end