Приложение

download report

Transcript Приложение

Организация циклов в Ассемблере

Цикл

– это многократно повторяющаяся последовательность операторов

Типы циклов

«ПОКА» «ДО» «ДЛЯ»

Циклы в Паскале

Цикл «ПОКА» While X > 0 do S

A: If X > 0 then begin

S

;

тело цикла

Goto A; end;

Цикл «ДО» Repeat S until X > 0

A:

S

;

тело цикла

If (X < 0) or (X = 0) then Goto A;

Цикл «ДЛЯ»

A:

For I := 1 to N do S

I: = 1;

S

;

тело цикла

I:=I+1; If (I < N) or (I = N) then Goto A;

Циклы в Ассемблере

Цикл «ПОКА» While X > 0 do S

A: CMP X , 0 A2: JLE A2

S;

тело цикла

JMP A …

Цикл «ДО» Repeat S until X > 0

A:

S;

тело цикла

CMP X , 0 JLE A

Цикл «ДЛЯ» For I := 1 to N do S

A: MOV CX , N

S;

тело цикла

DEC CX CMP X , 0 JNE A

Команда LOOP

Общий вид: LOOP <метка> Функции команды:  Автоматически уменьшает значение счетчика.

 Выполняет проверку на выход из цикла.

 Выполняет переход на начало тела цикла.

Используется в случае цикла с известным числом повторений, т.е. цикла «ДЛЯ». Количество повторений цикла должно быть присвоено регистру СХ до начала цикла.

Цикл «ДЛЯ»

Без использования команды LOOP MOV CX , N A:

S;

тело цикла

DEC CX CMP X , 0 JNE A С использованием команды LOOP MOV CX , N A:

S;

тело цикла

LOOP A

ПРИМЕР

Составим программу, которая выводит на экран 1000 нулей

Решение: (1) prg segment para public 'code' (2) assume cs:prg,ss:prg,es:prg,ds:prg (3) org 100h (4) start: jmp go (5) go: (6) mov ax, 0600h (7) mov bh,07 (8) mov cx, 0000 (9) mov dx,184fh (10) mov cx,1000 (11) Zero: (12) mov ah,02 (13) mov dl,30h (14) int 21h (15) loop Zero (16) ret (17) prg ends (18) end start

Задачи для практики

Задача 1

Составить фрагмент программы на языке Ассемблер, подсчитывающий сумму первых 10 натуральных чисел (результат записать в АХ).

Решение: …..

mov cx,10 mov ax,00 summa: add ax,cx loop summa …..

Задача 2

Составить фрагмент программы на языке Ассемблер, вычисляющий значение 5 выражения: (результат записать в АХ).

x

  1 Решение: …..

mov BX,00 mov CX,05 sum: mov AX,02 mul CX add BX,AX …..

loop sum

Задача 3

Составить фрагмент программы на языке Ассемблер, вычисляющий факториал заданного числа К (К – от 0 до 8; результат записать в АХ). Решение: …..

mov ax, 1 mov cx, К F: mul cx loop F …..