Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЭВМ практические.docx
Скачиваний:
101
Добавлен:
11.04.2015
Размер:
275.2 Кб
Скачать

Практическая работа №6

Архитектура ЭВМ и вычислительных систем

Тема: Программирование и отладка программ

Цель работы: Знакомство со средой Turbo Assembler. Изучение работы программ tasm, tlink. Отладка программы в среде Turbo Debugger.

Средства: Программы tasm, tlink, Turbo Debugger

Литература:

Юров В.И. Assembler. Практикум. – Спб.: Питер, 2001 г.

Краткие теоретические сведения:

Создание новой программы

Рис. 1.1 Редактирование, ассемблирование, компоновка и выполнение.

Для ассемблирования файла HELLO.ASM наберите: TASM hello, и нажмите клавишу Enter. Если вы не задали другое имя, файл HELLO.ASM будет ассемблирован в файл HELLO.OBJ. (Заметим, что расширение имени файла вводить не требуется. Турбо Ассемблер подразумевает в этом случае, что файл имеет расширение .ASM.) На экране вы увидите следующее:

Turbo Assembler Version 3.0 Copyright (C) 1988,1991 (1)

by Borland International Inc.

Assembling file: HELLO.ASM (2)

Error messages: None (3)

Warning messages: None (4)

Passes: 1 (5)

Remaining memory: 266K (6)

1 - Турбо Ассемблер, версия 3.0; авторские права фирмы Borland, 1991 г.;

2 - ассемблирован файл HELLO.ASM;

3 – сообщения об ошибках: нет;

4 - предупреждающие сообщения: нет;

5 – число проходов: 1;

6 - остается памяти: 266К

Для компоновки программы используется программа TLINK, представляющая собой поставляемый вместе с Турбо Ассемблером компоновщик. Введите командную строку: TLINK HELLO

Здесь опять не требуется вводить расширение имени файла. Компоновщик TLINK по умолчанию предполагает, что этим расширением является расширение .OBJ. Когда компоновка, компоновщик автоматически присвоит файлу с расширением .EXE имя, совпадающее с именем вашего объектного файла (если вы не определили другое имя). При успешной компоновке на экране появляется сообщение:

Turbo Linker Version 3.0 Copyright (c) 1988, 1991 by Borland

International Inc.

Задание:

Составить программу вывода на экран слова «Привет!».

Порядок выполнения работы:

  1. Составить алгоритм программы

  2. По алгоритму написать листинг программы

  3. Скопмпонаовать ЕХЕ программу

  4. Отладить в TurboDebuger.

Контрольные вопросы:

  1. Пример регистровой адресации

  2. Что такое прерывание?

  3. Какие команды вы использовали в программе и почему?

  4. Как вызвать функцию вывода на экран прерывания DOS?

  5. Функция выхода из программы, её параметры

Практическая работа №7

Архитектура ЭВМ и вычислительных систем

Тема: Программирование арифметических и логических операций

Цель работы: Изучить арифметические и логические команды языка Ассемблера

Средства: Turbo Assembler, Turbo Debuger

Литература: Юров В.И. Assembler. Практикум. – Спб.: Питер, 2001 г

Краткие теоретические сведения:

Команды сложения и вычитания

В ПК имеется несколько команд сложения и вычитания. Основными из них являются следующие:

Сложение: ADD op1, op2

Вычитание (subtract): SUB op1, op2

В этих командах допустимы следующие комбинации операндов:

ор1 ор2

r8 i8, r8, m8 сложение/вычитание байтов

m8 i8, r8

r16 il6, rl6, ml6 сложение/вычитание слов

m1б il6, rl6

Команда ADD складывает операнды и записывает их сумму на место первого операнда: ор1:=ор1+ор2. По команде SUB из первого операнда вычитается второй операнд и полученная разность записывается вместо первого операнда: ор1:=ор1-ор2.

Например:

ADD АН, 12 ;АН:=АН+12

SUB SI, Z ;SI:=SI-Z

ADD Z,-300 ;Z:=Z+(-300)

Команды ADD и SUB работают как с числами размером в байт, так и с числами размером в слово; нельзя, чтобы один операнд был байтом, а другой - словом. При этом числа могут быть как знаковыми, так и беззнаковыми. В этих командах меняются флаги переноса CF, переполнения OF, знака SF и нуля ZF.

Следующая пара команд сложения и вычитания:

Увеличение на 1 (increment): INC op

Уменьшение на 1 (decrement): DEC op

В этих командах допустимы следующие типы операнда: r8, m8, rl6, ml6.

Примеры:

INC BL

DEC WORD PTR A

Команда INC аналогична команде ADD op, l , т. е. увеличивает свой операнд на 1: ор1:=ор1+1, а команда DEC аналогична команде SUB op, l , т. е. уменьшает операнд на 1: ор1:=ор1-1 (единственное отличие: команды INC и DEC не меняют флаг переноса CF). Выгода от команд INC и DEC в том, что они занимают меньше места в памяти и выполняются быстрее, чем соответствующие команды ADD и SUB.

Еще одна команда из группы сложения и вычитания:

Изменение знака (negative): NEG op

Допустимые типы операнда этой команды: r8, m8, rl6, ml6. Команда NEG рассматривает свой операнд как число со знаком и меняет его знак на противоположный: ор:=-ор. Например:

MOV АН, 1

NEG АН ;            АН:=-1 (0FFh)

Здесь есть особый случай: если ор=-128 (80h), то операнд не меняется, т. к. нет знакового числа +128. Аналогично для чисел-слов: если значение операнда равно минимальному отрицательному числу -32768 (8000h), то команда не меняет операнд.

В этом особом случае флаг OF получает значение 1 (при других операндах OF=0). При нулевом операнде флаг CF равен 0, при других - 1. Флаги SF и ZF меняются как обычно.

И, наконец, рассмотрим еще пару команд сложения и вычитания:

Сложение с учетом переноса (add with carry):              ADC op1, op2

Вычитание с учетом заема (subtract with borrow):         SBB op1, op2

Допустимые типы операндов - как в командах ADD и SUB. Эти команды аналогичны командам обычного сложения и вычитания (ADD и SUB) за одним исключением - в команде ADC к сумме операндов еще прибавляется значение флага переноса CF: opl:=opl+op2+CF, а в команде SBB из разности операндов еще вычитается значение этого флага: opl:=opl-op2-CF.

Зачем это нужно? В ПК одной командой можно сложить (вычесть) только числа размером в байт или слово. Сложение же (вычитание) чисел других размеров, например двойных слов, приходится реализовывать нам самим через сложение (вычитание) чисел размером в слово или байт. Здесь-то и оказываются полезными команды ADC и SBB.

Рассмотрим, для примера, как можно сложить следующие два числа размером в двойное слово: X=1204F003h и Y=8052300Fh. Условно разбиваем каждое число на два слова. Сначала складываем младшие (правые) части их, используя команду ADD. Может получиться единица переноса, которую надо учесть при сложении старших (левых) частей чисел. Как это сделать? Вспомним, что единица переноса попадает во флаг CF, поэтому к сумме старших частей надо добавить и значение этого флага (если единицы переноса не было, то CF=0, поэтому и здесь можно прибавлять CF), а такое сложение как раз и осуществляет команда ADC. Следовательно, старшие части чисел надо складывать по команде ADC.

Если для определенности считать, что число Х размещается в двух регистрах АХ (старшие цифры) и ВХ (младшие), а число Y - в регистрах СХ (старшие цифры) и DX (младшие), и если сумму этих двух чисел надо записать вместо числа X, т. е. надо реализовать (AX,BX):=(AX,BX)+(CX,DX), тогда это делается так:

ADD BX, DX ; ВХ: =Xмл+Yмл, CF=перенос

ADC AX, CX ; AX:=Xст+Yст+CF

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

Аналогичным образом реализуется вычитание беззнаковых чисел размером в двойное слово, для чего используется команда SBB. Например, вычитание (AX,BX):=(AX,BX)-(CX,DX) реализуется так:

SUB BX, DX ; ВХ: =Xмл-Yмл, CF=заем еденицы

SBB АХ, СХ ; AX:=Xст-Yст-CF

С помощью команд ADC и SBB можно реализовать сложение и вычитание чисел любого размера, причем эти операции для беззнаковых и знаковых чисел реализуются одинаково.