Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
lab1-7l.doc
Скачиваний:
2
Добавлен:
13.11.2019
Размер:
188.43 Кб
Скачать
  1. Способы адресации данных

1) lea DX,op1 - загрузка эффективного адреса операнда op1

в регистр DX

(load effective address)

2) les DX,op1 - загрузка адреса операнда op1 в два регистра:

ES <- сегмент, DX <- смещение

3) lds DX,op1 - загрузка адреса операнда op1 в два регистра:

DS <- сегмент, DX <- смещение

  1. [r16] - содержимое регистра (только SI,DI,BP,BX)

5) ES:[SI] - содержимое ячейки в сегменте ES

со смещением, хранящимся в SI

ПРИЛОЖЕНИЕ 2

Ниже приводится примерная структура программы, в которой достаточно только дописать самое главное - тело процедуры работы с вещественными числами. Процедура должна быть оформлена в виде отдельного файла MATH.ASM и откомпиллирована с помощью Турбо Ассемблера (TASM) .

{$N+} {Использование математического сопроцессора}

USES crt;

VAR op1,op2,op3,op4 : SINGLE;

i1 : LONGINT absolute op1;

i2 : LONGINT absolute op2;

{$F+}

procedure MATH(var op1,op2); external;

{$L Math.obj}

{$F-}

function HEX(j:LONGINT):STRING;

{Перевод числа в шестнадцатеричную форму}

const s:string='0123456789ABCDEF';

var st:string;

k,n:byte;

begin

st:='';

for k:=1 to 8 do

begin

n:=j and 15;

st:=s[n+1]+st;

j:=j shr 4;

end;

Hex:=st;

end;

begin

repeat

clrscr;

write(' Input Float 1: ');

readln(op1);

writeln('op1= ',op1);

writeln(' i1= ',i1,' hex = ',Hex(i1));

write(' Input Float 2: ');

readln(op2);

writeln('op2= ',op2);

writeln(' i2= ',i2,' hex = ',Hex(i2));

op3:=op1*op2;

op4:=op1+op2;

MATH(op1,op2);

writeln;

writeln('произведение = ',op1);

writeln(' hex = ',Hex(i1));

op1:=op3;

writeln('проверка = ',op3);

writeln(' hex = ',Hex(i1));

writeln('сумма = ',op2);

writeln(' hex = ',Hex(i2));

op2:=op4;

writeln('проверка = ',op4);

writeln(' hex = ',Hex(i2));

until readkey = #27;

end.

; FILE MATH.ASM

TITLE $Demo

.MODEL TPASCAL

.386

.CODE

MATH PROC FAR op1:DWORD, op2:DWORD

PUBLIC MATH;

; Start Code

push DS ; сохраняем DS в стеке

lds SI,op1 ; загружаем op1 в DS:SI

les DI,op2 ; загружаем op2 в ES:DI

mov EAX,DS:[SI] ; 1 operand in eax

mov EBX,ES:[DI] ; 2 operand in ebx

; Здесь надо вставить содержательную часть процедуры сложения и

; умножения вещественных чисел и записать результаты в EAX и EBX

mov DS:[SI],EBX ; произведение в op1

mov ES:[DI],EAX ; сумма в op2

; exit code

pop DS ; восстанавливаем DS

ret

MATH endp

CODE ENDS

END

Лабораторная работа №3

ЗНАКОМСТВО С ПРЕРЫВАНИЯМИ

ЦЕЛЬ РАБОТЫ

Изучение системы прерываний ЭВМ, и обработка этих прерываний.

ЗАДАНИЕ НА РАБОТУ

Написать программу обработки прерывания 33h - "мыши". Программа должна вывести на экран курсор "мыши" и при перемещении отображать текущие координаты курсора. Перемещение должно осуществляться в окне размером примерно в пол-экрана. Нажатие на правую кнопку мыши должно отключать отображение текущих координат, нажатие на левую кнопку - вновь включать его.

РЕКОМЕНДАЦИИ ПО ВЫПОЛНЕНИЮ РАБОТЫ

Все процедуры опроса состояния "мыши" целесообразно оформить в виде отдельных базовых процедур и использовать их потом в различных комбинациях в основной программе. Вызов прерываний можно выполнить, используя встроенные функции языка Pascal (intr) или C (int86).

Вот пример функции, определяющей наличие в системе драйвера "мыши". Аналогично можно организовать и все остальные функции (процедуры).

Function MouseInit:BOOLEAN;

Var

InitDriver : INTEGER;

Begin

asm

mov AX,00h

int 33h

mov InitDriver,AX

end;

If InitDriver = 0 then begin

clrscr;

write('Error: Mouse Driver not installed!');

halt;

end;

MouseInit := TRUE;

End;

ПРИЛОЖЕНИЕ 1.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]