prepod

Путь к Файлу: /информатика / Архитектура ЭВМ Лаб 1, ассемблер, линейные программы.doc

Ознакомиться или скачать весь учебный материал данного пользователя
Скачиваний:   1
Пользователь:   prepod
Добавлен:   29.11.2015
Размер:   114.0 КБ
СКАЧАТЬ

Архитектура ЭВМ.

Лабораторная работа №1.

Программная модель микропроцессора. Регистры. Компиляторы с языка ассемблера и отладчики. Разработка и отладка программ арифметических операций с целыми числами.

1. ЦЕЛЬ  РАБОТЫ: Закрепление знаний о языке ассемблера, составление простейшей программы арифметических операций с целыми числами, ее исполнение с помощью отладчика.

2. ОСНОВНЫЕ   СВЕДЕНИЯ.

2.1. Семейство микропроцессоров Intel.

Микропроцессоры Intel для персональных  IBM  и IBM-совместимых компьютеров совместимы «снизу вверх», начиная с 16-разрядного микропроцессора i8086. Первым 32-разрядным микропроцессором стал i80386, начиная с микропроцессора i80486 были аппаратно совмещены в одном устройстве микропроцессор и математический сопроцессор.

В дальнейшем были разработаны микропроцессоры Pentium (i80586), Pentium Pro, Pentium II, Celeron, Pentium III, Pentium IV. По существу, каждый из них обладает собственной системой команд. В языке ассемблера имеется команда, позволяющая определить тип микропроцессора и построить наиболее эффективную программу именно для данного типа.

Мы не будем рассматривать особенности каждого из перечисленных типов микропроцессоров, а остановимся на той общей базе команд, которая позволит создавать эффективные программы для 32-разрядных микропроцессоров.

Совместимость  «снизу вверх» означает возможность исполнения программ, разработанных для ранних моделей микропроцессоров, на более современных моделях. Она предъявила определенные требования к архитектуре микропроцессора и структуре блока оперативной памяти.

В частности, в 16-разрадных микропроцессорах имеются регистры, в которых возможно выделение старшей и младшей 8-разрядных частей, в 32-разрядных микропроцессорах возможно выделение младшей 16-разрядной а также и 8-разрядных частей регистра.

Кроме того, требования совместимости привели к правилу «меньшее по меньшему адресу», так что  записанное в памяти число представляется инвертированным.

С этими особенностями можно подробно ознакомиться, если откомпилированную программу на языке ассемблера исполнять с помощью отладчика, например, cv.exe. В этом случае имеется возможность просмотра содержимого регистров и оперативной памяти в 16-ричной системе счисления. Каждый байт представляется в виде двух 16-ричных цифр, каждая из которых может рассматриваться как четыре двоичных цифры. 2.2. Программная модель микропроцессора.

32-разрядные микропроцессоры имеют архитектуру IA-32 (32-bit Intel Architecture). В рамках общей для всех IA-32 микропроцессоров базы можно представить микропроцессор как набор регистров различной разрядности.

Регистры общего назначения EAX, EBX, ECX, EDX, EBP, ESI, EDI, ESP являются 32-разрядными, с возможностью выделения младшей 16-разрядной части, обозначаемой как AX, BX, CX, DX, BP, SI, DI, SP соответственно. Собственно, при переходе к 32-разрядным регистрам к названию 16-разрядного регистра была добавлена буква E (Extended, расширенный).

Кроме того, 16-разрядные регистры AX, BX, CX, DX могут быть разделены на младшую, обозначаемую как AL, BL, CL, DL и старшую, обозначаемую как AH, BH, CH, DH 8-разрядные части. Буквы L (Low, младший) и H (High, старший) были впервые использованы при переходе от 8-разрядных регистров к 16-разрядным.

 

 

 

 

 

 

Регистры общего назначения представляются следующей схемой, в которой отмечены номера разрядов, названия регистров и их частей.

31                                  16

15                                    8

7                                      0

EAX

               AH               AX

               AL

EBX

               BH               BX

               BL

ECX

               CH               CX

               CL

EDX

               DH               DX

               DL

EBP

                                    BP

 

ESI

                                    SI

 

EDI

                                    DI

 

ESP

                                    SP

 

Названия регистров общего назначения в основном соответствуют их использованию в командах: регистр EAX–аккумулятор, регистр EBX–базовый регистр, регистр ECX–счетчик, регистр EDX–регистр данных, регистр EBP–дополнительный указатель базы, регистр ESI–индексный регистр источника, регистр EDI–индексный регистр приемника, регистр ESP–указатель стека.

32-разрядные регистр флагов EFLAGS  и указатель команд EIP объединяются в регистры состояния и управления с возможностью выделения 16-разрядной младшей части FLAGS и IP соответственно:

31                                                        16

15                                                          0

EFLAGS

                       FLAGS

EIP

                           IP

 

16-разрядные сегментные регистры CS, SS, DS, ES, FS, GS (разряды с 0 по 15) не подразделяются на части и имеют названия: CS–сегмент кода (программы), SS–сегмент стека, DS–сегмент данных, ES, FS, GS–дополнительные сегменты данных.

32-разрядные системные регистры CR0, CR2, CR3, DR0, DR1, DR2, DR3, DR4, DR5, DR6, DR7, TR6, TR7 предназначены для страничной организации памяти и используются в основном разработчиками операционных систем, их мы рассматривать не будем.

Восемь 80-разрядных регистров математического сопроцессора st(0) – st(7) объединяются в стек и служат для выполнения операций с вещественными числами (числами с плавающей точкой). Форматы данных с плавающей точкой и операции с ними рассмотрим позже.

Микропроцессоры IA-32 имеют следующие режимы: реальный режим (real mode), защищенный режим (protected mode), режим виртуального процессора 8086 (virtual 8086 mode) и режим системного управления (System Management Mode). Микропроцессор всегда начинает работу в реальном режиме.

2.3. Формат команды языка ассемблера.

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

Микропроцессоры IA-32 являются двухадресными (двухоперандными), т.е. команда может содержать один или два операнда или не содержать операндов вовсе. В случае двух операндов они разделяются запятыми. Комментарий игнорируется компилятором и служит для пояснения программы или ее фрагментов.

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

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

Язык ассемблера легко сочетается с языками высокого уровня (Паскаль, Си), поэтому, как правило, большую программу разрабатывают на языке высокого уровня, а наиболее ответственные фрагменты – на языке ассемблера.

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

Рассмотрим команды переноса и арифметические команды с целыми числами. Отметим, что занесение результата операции всегда происходит по первому адресу (за одним - двумя исключениями), поэтому первый адрес не может быть непосредственным операндом (константой), а должен быть или регистром, или набором байтов оперативной памяти. Второй адрес может быть как регистром или ячейкой оперативной памяти, так и непосредственным операндом.

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

Команда переноса имеет мнемокод MOV, за которым следуют два операнда, разделенные запятой. Мнемокод может быть записан как большими, так и малыми буквами. Сокращенная запись формата команды MOV op1, op2 ; op1 <– op2 op8, op16, op32

означает, что второй операнд заносится по первому адресу (и остается по второму адресу), причем первый и второй операнды равны по размеру и могут содержать 8, 16 или 32 разряда. Если требуется провести операцию с неравными по размеру операндами, меньший операнд конвертируется в больший (этот вопрос рассмотрен далее).

Запишем в сокращенном виде команды сложения (мнемокод ADD), вычитания (SUB), умножения (MUL, IMUL), деления (DIV, IDIV):

ADD  op1, op2 ;      op1 <– (op1 + op2)                                          op8, op16, op32

SUB  op1, op2 ;      op1 <– (op1 – op2)                                           op8, op16, op32

MUL, IMUL op ;    AX <– (AL * op)                                                                  op8

MUL, IMUL op ;    (DX:AX ) <– (AX * op)                                                      op16

MUL, IMUL op ;    (EDX:EAX) <– (EAX*op)                                                 op32

DIV, IDIV  op ;  AH <– ( AX mod op), AL <– (AX div op)                               op8

DIV, IDIV  op ;  DX <– ( DX:AX mod op), AX <– (DX:AX div op)                op16

DIV, IDIV  op ; EDX <– (EDX:EAX mod op), EAX <– (EDX:EAX div op)   op32

NEG op ;                   op <– (–op)                                                      op8, op16, op32

INC  op ;                    op <– (op + 1)                                                 op8, op16, op32

DEC  op ;                   op <– (op – 1)                                                 op8, op16, op32

Дадим краткие пояснения. Команды сложения и вычитания действуют как с целыми без знака (неотрицательными), так и знаковыми целыми, причем последние представляются в дополнительном коде. Операнды могут иметь размер 8, 16 или 32 разряда. По первому адресу заносится сумма (разность) первого и второго операндов.

Команды умножения и деления различают беззнаковые и знаковые числа, в последнем случае впереди мнемокода добавляется буква I (integer, целое). Как видно, эти команды имеют один операнд, второй операнд задается в неявном виде как конкретный регистр.

При умножении результат имеет вдвое большую разрядность по сравнению с множителями, поэтому при умножении 16-разрядных или 32-разрядных операндов для результата используется пара регистров, например, при op16 это регистры DX:AX, при op32 это регистры EDX:EAX, в первом регистре старшая часть результата, во втором – младшая часть.

При делении делимое также помещается в конкретном регистре или паре регистров, делитель является единственным операндом, но в этом случае разрядность делимого вдвое больше разрядности частного и делителя. Результатов операции здесь два: неполное частное (целая часть частного) и остаток от деления. В сокращенной записи mod означает остаток от деления, div – операцию целочисленного деления

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

Команда NEG меняет знак операнда, команда инкремента INC увеличивает значение операнда на единицу, команда декремента DEC уменьшает значение операнда на единицу. В этих командах операнд – регистр или ячейка памяти (не непосредственный операнд). 2.6. Разработка и отладка программ арифметических операций с целыми числами.

Пользуясь сокращенной записью форматов арифметических операций (раздел 2.4), легко разработать программу с этими операциями.

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

Отметим, что содержимое всех регистров выводится в 16-ричной системе счисления, для отрицательных чисел используется дополнительный код. При выполнении работы следует повторить представление чисел в различных системах счисления и перевод целых чисел из одной системы счисления в другую. Рекомендуется для проверки пользоваться калькулятором Windows, который может производить действия в десятичной (Dec), двоичной (Bin), 16-ричной (Hex) и восьмеричной (Oct, в языке ассемблера не используется) системах счисления в инженерном виде.

В командах могут использоваться числа, адресуемые в непосредственном режиме. Если число задается в десятичной системе счисления, оно записывается в обычном виде, без суффикса, например, 145.  Для 16-ричного числа в конце ставится суффикс H или h (hexadecimal), причем, если число начинается с цифр A, B, C, D, E, F (или a, b, c, d, e, f), впереди ставится нуль, например 142h, 0d2fh. Для двоичного числа в конце ставится суффикс B или b (binary), например 10011010b.

 Рассмотрим простейшую программу. Пусть некоторое целое число Xi  (i = 1, 2 ,3) требуется сложить с числом a, от результата вычесть число b, полученный результат умножить на число c, полученный результат разделить на число d . Определить неполное частное e и остаток от деления f. Действия произвести с X1=460 (1cch), X2=865 (361h), X3=1024 (400h), a=12153(2f79h), b=6711(1a37h), c=21815(5537h), d=23007(52dfh). Общая формула вычислений: Zi = (Xi + a – b ) * c ; ei = Zi div d;   fi = Zi mod d.

Т.к. исходное число Xi задается в трех вариантах, будем заносить его перед исполнением программы в регистр AX. Второй операнд постоянен, будем использовать для него регистр BX. Программу составим в двух вариантах: полное определение сегментов (более ранние версии компиляторов) и упрощенное определение сегментов (более поздние версии компиляторов). Компиляцию проведем с помощью компилятора TASM в режиме MASM, компоновку с помощью TLINK, исполнение в пошаговом режиме с помощью TD.

Первый вариант программы:

stk     segment para stack ‘stack’  ; описание сегмента стека

          db 100h dup (?)                  ; 256 байтов в сегменте стека

stk     ends                                    ; конец сегмента стека

cseg   segment para public ‘code’; описание сегмента кода

          assume cs:cseg, ss:stk        ; инициализация сегментных регистров

; занести операнд Xi в регистр ax

start:  add ax, 2f79h ; сложение 12153 с содержимым ax, результат в ax

sub ax, 1a37h   ; вычитание 6711 из регистра ax, результат в ax

mov bx, 5537h ; занесение 21815 в регистр bx

mul bx             ; умножение  регистра ax на bx, результат в dx:ax

mov bx, 59dfh ; занесение 23007 в bx

div bx     ; деление (dx:ax) на bx, частное в ax , остаток в dx cseg  ends                ; конец сегмента кода

end  start       ; конец, указание на начало

Второй вариант программы:

model small ; модель памяти, 1 сегмент кода, 1 группа данных

.stack 100h ; сегмент стека 256 байтов

.code  ; сегмент кода (программы)

; занести операнд Xi в регистр ax

start:  add ax, 2f79h ; сложение 12153 с содержимым ax, результат в ax

sub ax, 1a37h   ; вычитание 6711 из регистра ax, результат в ax

mov bx, 5537h ; занесение 21815 в регистр bx

mul bx          ; умножение  регистра ax на bx, результат в dx:ax

mov bx, 59dfh ; занесение 23007 в bx

div bx     ; деление (dx:ax) на bx, частное в ax , остаток в dx end  start       ; конец, указание на начало

 


Лабораторная работа №1.

Программная модель микропроцессора. Регистры. Компиляторы с языка ассемблера и отладчики. Разработка и отладка программ арифметических операций с целыми числами.

 

Написать линейную программу на ассемблере, выполняющую действия по следующей формуле: Zi = (Xi + a – b ) * c/d  и вычислить результат для каждого значения Xi.

 

ВАРИАНТЫ ЗАДАНИЙ.

 

№ варианта

 

X1

 

X2

 

X3

 

a

 

b

 

c

 

d

1

676

123

145

2205

1236

1357

1753

2

586

649

934

1574

8432

1632

1835

3

537

726

806

8612

3120

9453

2642

4

625

693

946

1624

8431

1835

2261

5

694

890

108

1367

6056

1537

2046

6

472

755

786

9832

2136

8934

1204

7

403

472

676

2108

1523

9035

1364

8

628

799

874

1437

3425

1205

1582

9

410

625

726

8032

1641

1603

2174

10

424

693

810

1043

5273

1305

1735

 

 

 

 

 

Лабораторная работа №1.

Программная модель микропроцессора. Регистры. Компиляторы с языка ассемблера и отладчики. Разработка и отладка программ арифметических операций с целыми числами.

 

Написать линейную программу на ассемблере, выполняющую действия по следующей формуле: Zi = (Xi + a – b ) * c/d  и вычислить результат для каждого значения Xi.

 

ВАРИАНТЫ ЗАДАНИЙ.

 

№ варианта

 

X1

 

X2

 

X3

 

a

 

b

 

c

 

d

1

676

123

145

2205

1236

1357

1753

2

586

649

934

1574

8432

1632

1835

3

537

726

806

8612

3120

9453

2642

4

625

693

946

1624

8431

1835

2261

5

694

890

108

1367

6056

1537

2046

6

472

755

786

9832

2136

8934

1204

7

403

472

676

2108

1523

9035

1364

8

628

799

874

1437

3425

1205

1582

9

410

625

726

8032

1641

1603

2174

10

424

693

810

1043

5273

1305

1735

 

 

Наверх страницы

Внимание! Не забудьте ознакомиться с остальными документами данного пользователя!

Соседние файлы в текущем каталоге:

На сайте уже 21970 файлов общим размером 9.9 ГБ.

Наш сайт представляет собой Сервис, где студенты самых различных специальностей могут делиться своей учебой. Для удобства организован онлайн просмотр содержимого самых разных форматов файлов с возможностью их скачивания. У нас можно найти курсовые и лабораторные работы, дипломные работы и диссертации, лекции и шпаргалки, учебники, чертежи, инструкции, пособия и методички - можно найти любые учебные материалы. Наш полезный сервис предназначен прежде всего для помощи студентам в учёбе, ведь разобраться с любым предметом всегда быстрее когда можно посмотреть примеры, ознакомится более углубленно по той или иной теме. Все материалы на сайте представлены для ознакомления и загружены самими пользователями. Учитесь с нами, учитесь на пятерки и становитесь самыми грамотными специалистами своей профессии.

Не нашли нужный документ? Воспользуйтесь поиском по содержимому всех файлов сайта:



Каждый день, проснувшись по утру, заходи на obmendoc.ru

Товарищ, не ленись - делись файлами и новому учись!

Яндекс.Метрика