Скачиваний:
73
Добавлен:
15.06.2014
Размер:
374.42 Кб
Скачать

Команда JMP

Команда JMP выполняет безусловный переход на метку, обычно внутри одной и той же процедуры.

Синтаксис: JMP целевая_метка

Логика: EIP ← целевая_метка

Пример:

top:

.

.

jmp top

Переход на метку внешнюю метку осуществляется путем использования глобальных меток global label (см. 5.5.2.3).

Мусин С.Б., каф. ПОИТ, БГУИР, 2006 http://ppl.yohng.com

Web site Examples

61

Irvine, Kip R. Assembly Language for Intel-Based Computers, 2003.

 

 

Команда LOOP

Команда LOOP реализует цикл

Синтаксис: LOOP метка_конца_цикла

Логика:

ECX ← ECX – 1

если ECX != 0, переход на метка_конца_цикла

Реализация:

Ассемблер рассчитывает расстояние в байтах между смещением следующей инструкции и меткой конца цикла. Оно называется относительным смещением

(relative offset).

Относительное смещение прибавляется к EIP.

Мусин С.Б., каф. ПОИТ, БГУИР, 2006 http://ppl.yohng.com

Web site Examples

62

Irvine, Kip R. Assembly Language for Intel-Based Computers, 2003.

 

 

Пример использования LOOP

Следующий цикл вычисляет сумму

5 + 4 + 3 +2 + 1:

смещение

машинный код

исходный код

00000000

66

B8

0000

mov

ax,0

00000004

B9

00000005

mov

ecx,5

00000009

66

03

C1

L1: add

ax,cx

0000000C

E2

FB

 

loop

L1

0000000E

 

 

 

 

 

Когда командп LOOP ассемблируется, IP = 0000000E (смещение следующей команды). –5 (FBh) добавляется к IP, что приводит к переходу на команду со смещением 00000009:

00000009 ← 0000000E + FB

Мусин С.Б., каф. ПОИТ, БГУИР, 2006 http://ppl.yohng.com

Web site Examples

63

Irvine, Kip R. Assembly Language for Intel-Based Computers, 2003.

 

 

Задача

 

 

mov ax,6

Какое значение содержится в AX

mov ecx,4

L1:

после выполнения кода?

inc ax

loop L1

Сколько раз будет выполнен

mov ecx,0

цикл?

X2:

inc ax

 

loop X2

Мусин С.Б., каф. ПОИТ, БГУИР, 2006 http://ppl.yohng.com

Web site Examples

65

Irvine, Kip R. Assembly Language for Intel-Based Computers, 2003.

Задача

Если относительное смещение представляет собой однобайтовое значение со знаком,

(a)какой минимально возможный переход?

(b)какой максимально возможный переход?

(a)−128

(b)+127

Мусин С.Б., каф. ПОИТ, БГУИР, 2006 http://ppl.yohng.com

Web site Examples

64

Irvine, Kip R. Assembly Language for Intel-Based Computers, 2003.

 

 

Вложенный цикл

Вложение циклов производится путем сохранения значения счетчика внешнего цикла. В следующем примере, внешний цикл выполняется 100 раз, а внутренний 20 раз.

.data

 

 

 

count DWORD ?

 

 

 

.code

; инициализация внешнего счетчика

mov ecx,100

L1:

; сохранение внешнего счетчика

 

mov count,ecx

 

mov ecx,20

; установка внутреннего счетчика

L2: .

 

 

 

.

; повтор внутреннего цикла

 

loop L2

 

mov ecx,count

; восстановление внешнего счетчика

loop L1

; повтор внешнего цикла

 

Мусин С.Б., каф. ПОИТ, БГУИР, 2006

http://ppl.yohng.com

Web site Examples

66

Irvine, Kip R. Assembly Language for Intel-Based Computers, 2003.

 

 

 

 

 

 

11

Суммирование элементов массива

Расчет суммы элементов массива 16-битных целых чисел

.data

 

intarray WORD 100h,200h,300h,400h

 

.code

; address of intarray

mov edi,OFFSET intarray

mov ecx,LENGTHOF intarray

; loop counter

mov ax,0

; zero the accumulator

L1:

; add an integer

add ax,[edi]

add edi,TYPE intarray

; point to next integer

loop L1

; repeat until ECX = 0

Задача. Что необходимо изменить в программе, если в массиве хранятся двойные слова?

Мусин С.Б., каф. ПОИТ, БГУИР, 2006 http://ppl.yohng.com

Web site Examples

67

Irvine, Kip R. Assembly Language for Intel-Based Computers, 2003.

 

 

localloop:

neg

val

js

short localloop

Мусин С.Б., каф. ПОИТ, БГУИР, 2006 http://ppl.yohng.com

Web site Examples

69

Irvine, Kip R. Assembly Language for Intel-Based Computers, 2003.

 

 

Копирование строки

Копирование строки из источника в приемник:

.data

BYTE

"This is the source string",0

 

source

хороший пример

target

BYTE

SIZEOF source DUP(0)

использования

 

 

 

SIZEOF

.code

esi,0

; index register

mov

mov

ecx,SIZEOF source

; loop counter

L1:

al,source[esi]

; get char from source

mov

mov

target[esi],al

; store it in the target

inc

esi

; move to next character

loop

L1

; repeat for entire string

Перепишите программу с использованием косвенной адресации

Мусин С.Б., каф. ПОИТ, БГУИР, 2006 http://ppl.yohng.com

Web site Examples

68

Irvine, Kip R. Assembly Language for Intel-Based Computers, 2003.

 

 

12

Соседние файлы в папке lec_4