Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Архитектура ЭВМ и систем. Лабораторная работа. Учебное пособие

.pdf
Скачиваний:
0
Добавлен:
06.09.2026
Размер:
1 Мб
Скачать
Контрольные вопросы
1. Какой формат адреса использует процессор i486?
2. Каким образом в памяти хранятся величины размером в слово и
двойное слово?
3. Предположим, что введена команда "E DS:20D 10 20 30 40 50".
Напишите команду, которая заменит значение 40 на 60.
4. Напишите команды, которые установит значение регистра AX в
десятичное число 12345, регистра BX – в 55785.
5. Напишите битовое представление символов 'А', '%', '7' (десятич
-
ные ASCII-коды 65, 37, 55).
6. Напишите битовые представления десятичных чисел 4567, –1060,
– 4538.
7. Измените знак у следующих положительных двоичных чисел:
01011110, 01111111, 01100011.
8. Измените знак у следующих отрицательных двоичных чисел:
10000001, 11110011, 11111111.
9. Вычислите сумму следующих беззнаковых двоичных чисел:
00011001
+
11101001
01111111 00000001
01001111
+
11111111
+
10. Вычислите разность следующих беззнаковых двоичных чисел:
01011001
00000001
01100001 00010001
01101000
01101111
11. Напишите в шестнадцатеричной системе счисления следующие
десятичные числа: 2048, –5613, –37845.
12. Переведите в десятичный формат следующие знаковые числа:
FF00H, 8030H, 4096H.
13. Вычислите сумму следующих беззнаковых шестнадцатеричных
чисел:
F006
+
0FFA
01FC 3598
EDAB
+
AB37
+
14. Вычислите разность следующих беззнаковых шестнадцатерич-
ных чисел:
ADAB
ABFF
34F9 CFFD
63A8
CFDE
15. Определите шестнадцатеричное представление символов 'x', ':',
'8' (десятичные ASCII-коды 120, 58, 56).
16. Каким образом представляются отрицательные числа в процес-
соре i486?
21
17. Какие типы данных поддерживает процессор i486?
18. Напишите битовое представление следующих шестнадцатерич-
ных чисел: F89CH, DAB6H, 123BH.
19. Для каждой команды из следующей последовательности опреде-
лите начальный и конечный адреса и количество байтов, которое она занимает. Можно принять, что первая команда расположена, например, по адресу CS:0100H.
XXXX:XXXX 1E PUSH DS XXXX:XXXX B84000 MOV AX,0040 XXXX:XXXX 8ED8 MOV DS,AX XXXX:XXXX 8B4602 MOV AX,[BP+02] XXXX:XXXX A90002 TEST AX,0200
20. Определите размер, начальный и конечный адрес
и код каждой
команды или значение каждого данного в следующем фрагменте дизассемблированной программы:
0AD0:0200 B1FF MOV CL,FF 0AD0:0202 B3CC MOV BL,CC 0AD0:0204 28D9 SUB CL,BL 0AD0:0206 A10001 MOV AX,[0100] 0AD0:0209 03060201 ADD AX,[0102] 0AD0:020D A30401 MOV [0104],AX 0AD0:0210 C3 RET
ЛАБОРАТОРНАЯ РАБОТА № 3
ЭТАПЫ РАЗРАБОТКИ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ
НА НИЗКОМ УРОВНЕ
Цель: познакомить учащихся с процессами подготовки исход-
ного текста программы на языке Ассемблера, трансляции, компо­новки и отладки.
Назначение: данная лабораторная работа познакомит
учащихся с инструментами Debug, Turbo Assembler, Turbo Linker, Turbo De­bugger, которые будут ими в дальнейшем использоваться в ходе изучения архитектуры процессоров i486.
Задания для выполнения
Задание № 1. Используя утилиту debug, ввести, дизассемблиро-
вать и выполнить фрагмент программы, определяемый следующими
22
кодами. Записать в тетрадь мнемокоды инструкций процессора, а также результат выполнения программы на каждом шаге.
1. B8 00 20 BB FF 1F 29 D8 C3
2. 9C 58 31 C0 C3
3. 0E 58 05 01 00 8E C0 C3
4. BB 00 02 C6 07 AB A0 00 02 C3
5. B3 03 80 CB 0A 80 F3 05 80 E3 80 C3
6. 28 C9 FE C1 FE C1 B8 01 00 D3 E0 C3
7. B8 11 11 BA 44 44 92 C3
8. 8C CB 43 8E C3 C3
9. 06 B8 00 B8 8E C0 BB 30 02 26 89 1E 40 01 07 C3
10. 31 DB 81 CB FF 00 81 F3 FF FF 81 E3 00 F0 C3
11. B8 10 00 B3 08 F6 F3 C3
12. B8 11 00 F7 D8 B3 04 F6 FB F6 D8 F6 DC C3
13. B8 FB FF BB 06 00 F7 EB F7 D2 F7 D0 05 01 00
83 D2 00 C3
14. B0 10 2C 20 C3
15. B9 05 00 31 C0 40 E2 FD C3
16. BE 00 02 8B 04 2D 34 12-A3 00 02 C3
17. B8 01 00 48 48 C3
18. B3 FF 88 D8 F6 E3 C3
19. B9 10 00 8D 36 00 02 8D 3E 00 03 FD F3 A4 C3
20. B8 40 00 8E C0 26 A1 13 00 C3
Задание 2. Введите программу
в виде машинных кодов, диз-
ассемблируйте, пройдите по шагам. Сохраните код на диске в виде файла типа .COM. Выйдите из отладчика и запустите программу. В качестве отчета представьте листинг программы и выводимую ею информацию.
1. B4 09 8D 16 09 01 CD 21 C3 6D 6F 76 20 61 78 2C 62 78 24
2. B4 09 8D 16 09 01 CD 21 C3 69 6E 63 20 62 78 24
3. B4 09 8D 16 09 01 CD 21 C3 78 63 68 67 20 62 78 2C 63 78 24
4. B4 09 8D 16 09 01 CD 21 C3 69 6E 63 20 62 6C 24
5. B4 09 8D 16 09 01 CD 21 C3 61 64 64 20 63 78 2C 31 32 33 34 24
6. B4 09 8D 16 09 01 CD 21 C3 69 6E 74 20 33 30 24
7. B4 09 8D 16 09 01 CD 21 C3 73 68 6C 20 62 78 2C 63 6C 24
8. B4 09 8D 16 09 01 CD 21 C3 73 75 62 20 63 6C 2C 62 6C 24
B4 09 8D 16 09 01 CD 21 C3 69 6D 75 6C 20 5B 32 30-30 5D 24
9.
23
10. B4 09 8D 16 09 01 CD 21 C3 69 64 69 76 20 5B 32 35 5D 24
11. B4 09 8D 16 09 01 CD 21 C3 66 6C 64 20 5B 62 78 2B 32 35 30
5D 24
12. B4 09 8D 16 09 01 CD 21 C3 63 61 6C 6C 20 31 32 33 33 24
13. B4 09 8D 16 09 01 CD 21 C3 73 62 62 20 5B 32 33 34 35 5D 2C
73 69 24
14. B4 09 8D 16 09 01 CD 21 C3 6A 6D 70 20 66 61 72 20 70 74 72 20
31 32 33 34 3A 66 64 61 62 24
15. B4 09 8D 16 09 01 CD 21 C3 63 61 6C 6C 20 64 77 6F 72 64 20 70
74 72 20 5B 73 69 5D 24
16. B4 09 8D 16 09 01 CD 21 C3 61 64 63 20 5B 31 30 30 5D 2C 32
24
17. B4 09 8D 16 09 01 CD 21 C3 6E 65 67 20 64 78 24
18. B4 09 8D 16 09 01 CD 21 C3 73 75 62 20 65 73 3A 5B 64 69 5D
2C 32 30 30 24
19. B4 09 8D 16 09 01 CD 21 C3 6E 6F 74 20 5B 73 69 2B 62 78 5D
24
20. B4 09 8D 16 09 01 CD 21 C3 63 61 6C 6C 20 66 75 6E 63 24
Задание 3. Подготовить исходный текст простой программы на языке Ассемблера в виде текстового файла с расширением asm. Можно использовать пример, приведенный ниже.
8086 DSEG SEGMENT msg1 db«
Моя первая программа
на Ассемблере
DSEG ENDS CSEG SEGMENT
ASSUME ds:DSEG, cs:CSEG,
ss:SSEG beg:
push ds xor ax,ax push ax mov ax,DSEG mov ds,ax mov ah,9 lea dx,msg1
24
int 21h retf CSEG ENDS SSEG SEGMENT STACK dw 1024 dup(?) SSEG ENDS END beg
Изучить команды и директивы Ассемблера, использованные в примере выше. Познакомиться с функцией операционной системы MS-DOS 9H. Дать в тетради описание назначения каждой строки программы.
Задание 4. Транслировать исходный текст в объектный мо­дуль без отладочной информации, используя инструмент Turbo As­sembler (исполняемый файл tasm.exe). Изучить формат командной строки и назначение параметров, дать
в тетради описание основных
из них.
Задание 5. Скомпоновать программу в исполняемый модуль без отладочной информации, используя утилиту Turbo Linker (ис­полняемый файл tlink.exe). Изучить формат командной строки и на­значение параметров. Дать описание в тетради основных из них.
Задание № 6. Запустить полученный исполняемый модуль, при- вести в тетради результаты вывода на экран
.
Задание 7. Используя отладчик debug.exe, трассировать про­грамму, отслеживая изменение регистров и флажков процессора для каждой команды, описать их в тетради, указывая предыдущие и но­вые значения.
Задание № 8. Загрузить исполняемую программу в отладчик Turbo Debugger и пройти по шагам, отслеживая изменения регистров
процессора. Опробовать возможности расстановки контрольных то­чек. Просмотреть
результат выполнения программы.
Задание № 9. Создать исполняемый модуль программы, содер- жащий отладочную информацию. Загрузить его в отладчик Turbo
25
Debugger (запускаемый файл td.exe) и пройти по шагам, отслеживая
изменения в состоянии регистров процессора. Просмотреть результат вывода программы на экран.
Контрольные вопросы
1. Что представляет собой исходный файл программы на Ассембле-
ре? Какие средства могут использоваться для его создания?
2. Из каких этапов состоит процесс создания исполняемого модуля?
3. Какие файлы
генерирует транслятор ассемблера? Опишите их
назначение.
4. Какие файлы генерирует компоновщик? Опишите их назначение.
5. Какой адрес имеет точка входа в программу типа COM? Типа
EXE?
6. Какие команды имеет отладчик Debug для управления выполне-
нием программы?
7. Опишите процесс создания исполняемого COM-модуля на диске
при помощи отладчика Debug.
8. Опишите процесс загрузки программы
в отладчик Debug.
9. Каким образом процессор определяет, какая информация в памя-
ти является данными, какаяисполняемым кодом?
10. Какие существуют типы исполняемых модулей? Какие из них
могут содержать отладочную информацию?
11. Какие основные типы окон есть в отладчике Turbo Debugger?
Опишите их назначение.
12. Какие режимы выполнения программы предоставляет Turbo De-
bugger?
13. Что такое
точка останова? Какие типы точек останова предос-
тавляет отладчик Turbo Debugger?
14. В каких форматах позволяет представлять данные отладчик
Turbo Debugger?
15. Какие языки программирования поддерживает отладчик Turbo
Debugger?
16. Какие условия должны быть выполнены при создании испол-
няемого модуля типа COM?
17. Какие типы окон для работы с данными предоставляет отладчик
Turbo Debugger в режиме символьной отладки?
Опишите их
назначение и способы работы с ними.
26
18. Опишите назначение разделов окна "CPU" отладчика Turbo De-
bugger. Объясните, каким образом выполняются такие операции,
как изменение данных в памяти, установка новых значений ре­гистров, ввод инструкций процессора, определение новой точки выполнения программы, задание нового адреса дизассемблиро­вания и показа содержимого памяти.
19. Какие команды предоставляет отладчик Debug для работы с дан-
ными и
кодом?
20. Каким образом установить следующую исполняемую команду в
отладчике Debug?
ЛАБОРАТОРНАЯ РАБОТА № 4
РЕЖИМЫ АДРЕСАЦИИ.
УПРАВЛЕНИЕ ПОТОКОМ КОМАНД
Цель: познакомить учащихся со способами доступа к данным и
организации логики программ, используемыми процессором i486.
Назначение: данная лабораторная работа позволит овладеть способами обработки данных и подготовки кода на низком уровне, даст более глубокое
понимание таких понятий, как «указатель»,
«процедура», «цикл» и т.п., используемых в языках высокого уровня.
Р
ЕЖИМЫ АДРЕСАЦИИ
Неявная адресация. Операнд адресуется неявно, если он стан-
дартный для команды:
cld ;сбросить флаг направления sti ;разрешить прерывания
Регистровая адресация. При таком способе адресации операн­ды находятся во внутренних регистрах процессора:
inc ebx ;увеличить ebx на 1 xchg ch,bl ;поменять значения ch и bl местами div bl ;разделить ax на bl
27
Непосредственная адресация. Непосредственный операнд яв­ляется постоянным и не может быть изменен во время выполнения программы. Допускаются операнды размером 8, 16 и 32 бита:
mov al,0FFH ;поместить в al -1 add bx,2500H ;прибавить к bx 2500H
Адресация портов ввода-вывода. Для управления устройст­вами ввода-вывода процессор i486 использует два способа: за­пись/чтение по адресам физической памяти, на
которые спроециро­ваны ЗУ этих устройств (например, видеопамять) и по специальным адресам, которые называются портами ввода-вывода. Порты с адре­сами 0–255 могут указываться непосредственно. Старшие адреса должны задаваться в регистре dx. Записываемое или считываемое значение помещается в регистре al/ax/eax.
in al,30H ;считать из порта с адресом 30H один
;байт
out dx,eax ;записать в порт с
адресом в dx
;четыре байта
Прямая адресация. При прямой адресации адрес операнда в памяти является постоянной и указывается непосредственно (в квадратных скобках). Иногда, когда ассемблер не может определить размер операнда, его необходимо указывать явно. Для этого исполь­зуются директивы dword ptr, word ptr, byte ptr и т.п. Непосредствен­ный адрес определяет смещение относительно начала сегмента
, ко-
торое называется также эффективным адресом.
x db ? ;определим один байт mov [x],30H ;запишем по адресу
;метки x
значение 30H.
аdd word ptr [100H],8888H ;прибавим к сло-
ву по
;смещению 100H 8888H.
sub [20FH],al ;вычтем из байта по ;смещению 20FH ;значение al.
28
Базовая адресация. Адрес операнда задается содержимым лю­бого регистра общего назначения. Когда используются регистры esp или ebp, текущим сегментом считается сегмент стека (база находит­ся в ss).
Mov al,[ebx] ;поместить в al
значение байта
;по адресу со смещением из
ebx
div byte ptr [ebp] ;разделить ax на байт по
;смещению из ebp в сегменте
;стека
Базовая адресация со смещением.
Адрес операнда задается двумя компонентами: содержимым базового регистра (любой ре­гистр общего назначения) и постоянным смещением относительно базового адреса, представляющим собой целое знаковое число раз­мером 8, 16 или 32 бита (при вычислении адреса расширяется до размера адреса). Этот режим удобно, например, использовать для доступа к полям структуры по ее адресу в базовом регистре
.
Mov [bx+100H],al ;записать по адресу bx+10H
;значение из al.
Sub dx,[esi+200H] ;вычесть из ax значение слова
по
;адресу esi+200H
Индексная адресация со смещением. Используется для досту­па к элементам массива. Адрес массива задается постоянной состав­ляющей, индекс элемента – содержимым любого регистра общего назначения, кроме esp. Адрес элемента может масштабироваться в зависимости от размера элементов массива (1, 2, 4, 8 байтов
) путем умножения индекса на соответствующее число. Операция масшта­бирования обозначается знаком умножения.
array dd 400 dup(0) ;определим массив из 400
;двойных слов
mov esi,399 ;индекс последнего
элемента
mov array[esi*4],10H ;присвоим последнему
29
;элементу значение 10H mov 100H[di],al ;запишем в массив с
адресом
;100H и индексом из di
Базовая индексная адресация со смещением. Является ком­бинацией предыдущих режимов адресации. Адрес задается базой, масштабируемым индексом и смещением. Если базой является ebp или esp, адресация осуществляется относительно начала стека. Ко­гда регистр ebp является масштабируемым индексом, адрес вычис­ляется относительно регистра данных
.
mov ax,[edi+edx*2+100H] add ax,[esp+ebp*2-300H]
Стековая адресация. Стеком называется область памяти, рабо­та с которой производится по принципу «последним положили, пер­вым взяли». В качестве аналогии можно привести сложенные в пи­рамиду подносы. Согласно правилу организации стека. в процессоре i486 подносы полагается засовывать под низ и доставать снизу. Ко­гда данное помещается в
стек, его вершина, определяемая регист­рами sp/esp, уменьшается на необходимое значение, равное размеру операнда. Затем в память по адресу ss:esp/sp производится запись. База стека находится в сегментом регистре ss. При выборе данных из стека происходит все наоборот: сначала читается значение, затем вершина стека увеличивается. К стеку происходит обращение, на­пример, при выполнении команд push, pushf, call, int, pop, popf, ret, iret.
push ax ;поместить в стек значение ax push 100H ;поместить в стек ;непосредственное ;значение pop dword ptr [eax];вынуть из стека двойное слово и ;поместить по адресу в регистре ;eax pushf ;сохранить в стеке регистр ;флагов mov al,[bp] ;записать в al байт по адресу ;ss:[bp] mov [esp],si ;поместить по адресу ss:[esp]
;значение регистра si
30
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]