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

Многострочное объявление данных (2 из 2)

Переменная ассоциирована только с первым

объявлением. Сравните значения возвращаемые

LENGTHOF и SIZEOF с рассмотренным ранее:

.data

array WORD 10,20 WORD 30,40 WORD 50,60

.code

;

2

mov eax,LENGTHOF array

mov ebx,SIZEOF array

;

4

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

Web site Examples

51

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

 

 

Директива LABEL

Определяет альтернативную метку для существующей

переменной и позволяет изменить ее тип (размер)

LABEL не выделяет память

Позволяет избежать использования оператора PTR

.data

LABEL DWORD

dwList

wordList

LABEL WORD

intList

BYTE 00h,10h,00h,20h

.code

; 20001000h

mov eax,dwList

mov cx,wordList

;

1000h

mov dl,intList

;

00h

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

Web site Examples

52

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

 

 

Косвенная адресация

Косвенные операнды

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

Операнды с индексом

Указатели

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

Web site Examples

53

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

 

 

Косвенные операнды (1 из 2)

Косвенный операнд содержит адрес переменной, обычно массива или строки. Он может быть разыменован (как указатель).

.data

 

val1 BYTE 10h,20h,30h

 

.code

 

mov esi,OFFSET val1

; разыменование ESI (AL=10h)

mov al,[esi]

inc esi

; AL = 20h

mov al,[esi]

inc esi

; AL = 30h

mov al,[esi]

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

Web site Examples

54

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

 

 

Косвенные операнды (2 из 2)

Используйте PTR для явного указания размера операнда.

.data

myCount WORD 0

.code

 

mov esi,OFFSET myCount

; ошибка: двусмысленность

inc [esi]

inc WORD PTR [esi]

; ok

Необходимо ли использовать PTR ?

add [esi],20

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

Web site Examples

55

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

 

 

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

Косвенная адресация удобна для перебора элементов массива. Счетчик должен инкрементироваться на величину равную размеру элемента массива!

.data

arrayW WORD 1000h,2000h,3000h

.code

 

mov esi,OFFSET arrayW

 

mov ax,[esi]

; либо: add esi,TYPE arrayW

add esi,2

add ax,[esi]

 

add esi,2

; AX = сумма элементов

add ax,[esi]

Задача: изменить пример для работы с двойными словами.

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

Web site Examples

56

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

 

 

Операнды с индексом

К косвенному операнду может добавляться смещение, которое будет учитываться при вычислении эффективного

адреса. Варианты описания:

[label + reg]

label[reg]

.data

 

arrayW WORD 1000h,2000h,3000h

 

.code

 

mov esi,0

; AX = 1000h

mov ax,[arrayW + esi]

mov ax,arrayW[esi]

; альтернативный формат

add esi,2

 

add ax,[arrayW + esi]

 

etc.

 

Задача: изменить пример для работы с двойными словами.

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

Web site Examples

57

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

 

 

Масштабирование индекса

Косвенный операнд и операнд с индексом могут масштабироваться на величину соответствующую размеру

элемента массива. Для этого индекс умножается на TYPE

для массива:

.data

arrayB BYTE 0,1,2,3,4,5 arrayW WORD 0,1,2,3,4,5 arrayD DWORD 0,1,2,3,4,5

.code

 

 

mov esi,4

;

04

mov al,arrayB[esi*TYPE arrayB]

mov bx,arrayW[esi*TYPE arrayW]

;

0004

mov edx,arrayD[esi*TYPE arrayD]

;

00000004

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

Web site Examples

58

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

 

 

Указатели

Переменная указатель содержит смещение относительно

начала сегмента другой переменной.

.data

arrayW WORD 1000h,2000h,3000h

ptrW DWORD arrayW

 

.code

 

mov esi,ptrW

; AX = 1000h

mov ax,[esi]

Альтернативный формат:

ptrW DWORD OFFSET arrayW

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

Web site Examples

59

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

 

 

Команды JMP и LOOP

Команда JMP

Команда LOOP

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

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

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

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

Web site Examples

60

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

 

 

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