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

Команда 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.

 

 

Задача

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

(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.

 

 

Задача

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

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

цикл?

mov ax,6 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.

 

 

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

Вложение циклов производится путем сохранения значения счетчика внешнего цикла. В следующем примере, внешний цикл выполняется 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.

 

 

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

Расчет суммы элементов массива 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.

 

 

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

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

.data

source BYTE "This is the source string",0 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.

 

 

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.

 

 

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