Ассемблирование и выполнение программ

Автор работы: Пользователь скрыл имя, 21 Ноября 2012 в 19:19, лабораторная работа

Описание

Цель работы: показать процессы ассемблирования, компоновки и выполнения программ на высокопроизводительных микропроцессорных отладочных устройствах.
При разработке программ на ассемблере требуются: любой редактор для набора текста исходной программы, Ассемблер (в данном случае MASM) и программа-компоновщик LINK.
Шаг ассемблирования включает в себя трансляцию исходного текста в машинный объектный код и генерацию модуля с расширением .OBJ. Этот формат еще не готов к исполнению, необходим шаг компоновки - то есть преобразование модуля .OBJ в модуль .EXE (исполняемый модуль).

Работа состоит из  1 файл

лаба4.docx

— 142.17 Кб (Скачать документ)

МИНОБРНАУКИ РОССИИ

Федеральное государственное бюджетное образовательное  учреждение

высшего профессионального  образования

«ВОЛОГОДСКИЙ  ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ»

(ВоГТУ)

 

 

 

 

 

Кафедра АВТ

 

 

 

 

 

 

 

 

« ВМ, сети и  системы»

 

Отчёт по лабораторной работе № 4

АССЕМБЛИРОВАНИЕ И ВЫПОЛНЕНИЕ ПРОГРАММ

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

                                                                                      Выполнил: Малышев Д. И.

                                                                         Группа: ЗЭМИ - 51

                                                                        Шифр: 0807302404

                                                                                      Проверил: Анкудинов В. Б.

  

 

 

 

    Вологда

Цель работы:  показать  процессы  ассемблирования, компоновки и выполнения программ на высокопроизводительных микропроцессорных отладочных устройствах.    

 При разработке программ на ассемблере требуются: любой редактор для  набора  текста  исходной  программы, Ассемблер (в данном случае MASM) и программа-компоновщик LINK.

 Шаг ассемблирования включает в себя трансляцию исходного текста в машинный объектный код и генерацию модуля с расширением .OBJ. Этот формат еще не готов к исполнению, необходим шаг компоновки - то есть преобразование модуля .OBJ в модуль .EXE (исполняемый модуль).

 Программа LINK осуществляет следующее:

1. Завершает формирование  в модуле .OBJ адресов, которые   остались неопределенными после  ассемблирования.

2. Компонует  более   одного отдельно ассемблированного  модуля в одну загрузочную программу. Это две или более ассемблерных  программ или ассемблерная программа и программы, написанные на языках высокого уровня, таких как ПАСКАЛЬ или БЕЙСИК.

3. Формирует исполняемый  модуль .exe командами загрузки для выполнения.

Для коррекции  программы  .EXE требуется внести изменения в  исходную программу и проделать  весь путь до получения нового исполняемого модуля.

    

1.1. Ассемблирование  программы  

Исходный модуль должен иметь  расширение .ASM. Для ассемблирования  исходного  модуля  необходимо  запустить  программу   Ассемблер MASM.EXE.

Ассемблер преобразует мнемокоды в машинные коды и выдает на экран сообщение об ошибках.

1.2. Компоновка  программы  

Если в  результате ассемблирования  не обнаружено ошибок, то необходимо переходить к компановке исполняемой программы при помощи LINK.

Для выполнения этого шага необходимо запустить программу LINK и ответить на следующие предложения:    

После получения исполняемого модуля .EXE его можно  протестировать при помощи программы DEBUG.

 

1.3. Правила  составления исходной программы

для получения  исполняемой типа .EXE и .COM      

При составлении исходной программы необходимо помнить, что  правила  составления  ее для получения  исполняемой типа .ЕХЕ и типа. СОМ несколько различны. Для написания исходного текста можно пользоваться любым  текстовым редактором, установленным на ПЭВМ.  Удобнее пользоваться, в нашем случае, редактором NE.COM (см. каталог NORTON).

Эти правила достаточно формальны  и связаны с операционной  системой установленной на данном конкретном вычислителе.

Для .ЕХЕ программ эти правила следующие:

1.В начале задается директива Ассемблеру о формате страницы листинга и имени исходной программы    

2. Резервирование  стековой  памяти . Резервируется не менее 32 слов    

3. Определение данных (если  это требуется  проектируемой   программой)

Поле FLDA определяет слово, содержащее десятичное значение 250, которое  Ассемблер  транслирует  в шестнадцатиричное 00FA. Поле FLDB определяет слово с десятичным значением 125.  Поле  FLDC  определяет слово с неизвестным значением, обозначенным знаком (?).

4. Сегмент кода имеет  имя CODESG. Особенности: директива  ASSUME (установить  для Ассемблера  связь между сегментами и сегментными  регистрами CS, DS, ES, SS) указывает на  определение DATASG  через  регистр  DS,- STACKSG через регистр SS, - дополнительный  сегментный регистр не задействован ES    

Процедура FAR  переводит  Ассемблер в режим формирования адресов посылок ДЛИННЫЙ (межсегментный).

Далее идет обязательная процедура  по организации стека

Затем две команды, обеспечивающие адресацию сегмента данных

Далее идет текст исходной программы в мнемокодах.

Завершается кодовый сегмент  следующим образом:

 

BEGIN    ENDP       ;конец процедуры BEGIN

CODESG   ENDS       ;конец сегмента кодового

END    BEGIN

 

При работе LINK автоматически  генерируется  особый  формат  для .ЕХЕ  файлов, в котором присутствует специальный начальный блок (заголовок) размером не менее 512 байт.

Для выполнения программ можно  создавать .СОМ  файлы.  Программа EXE2BIN.EXE в операционной системе DOS преобразует .ЕХЕ файлы в формат BIN. Для получения исполняемого файла .СОМ BIN файл средствами DOS необходимо переименовать в СОМ.

При работе EXE2BIN, в случае обнаружения ошибки, выдается сообщение  о  невозможности преобразования .ЕХЕ модуля в формат .BIN без указания конкретной причины. (EXE2BIN - преобразователь из  .ЕХЕ  в BIN (двоичный) формат (EXE-to-BIN)).

Программа .СОМ  ограничена размером одного сегмента (64К). Стек в .СОМ программах  генерируется  автоматически.  Размер  .СОМ  файла всегда меньше .ЕХЕ. Формат исходной программы для .COM типа исполняемой  программы  несколько отличается от исходной программы для типа .EXE

    

            org 100h ;обязательный атрибут исходной программы

 

Для .СОМ файлов DOS автоматически определяет стек и устанавливает одинаковый сегментный адрес во всех четырех сегментных  регистрах.

Если опущен ORG 100H, то на данные в префиксе программного сегмента  будут установлены неправильные ссылки с непредсказуемым результатом при выполнении.

 

1.4. Устройства  ввода-вывода для проведения эксперимента

Для проведения эксперимента по проверке правильности составленной программы управления предлагается использовать клавиатуру и дисплей.  В базовой системе ввода-вывода (BIOS), резидентно расположенной в  ПЗУ каждой ПЭВМ, есть подпрограммы обращения к этим устройствам  и всем, входящим в состав машины.

Все необходимые  экранные  и клавиатурные операции можно выполнить  с помощью команды INT  10H,  которая  передает  управление  непосpедственно в BIOS.

Для выполнения более сложных  операций существует прерывание более  высокого уровня INT 21H, которое сначала  передает управление в DOS.(Например, при  вводе с клавиатуры потребуется подсчет  введенных символов, проверка на максимальное число символов и проверка на символ "Enter").

 

 

1.4.1. Установка  курсора

Обычный монитор  имеет 25 строк и 80 столбцов. В каждую позицию  экрана курсор может быть установлен.

Подпрограмма INT  10H включает в себя установку курсора в  любую позицию и очистку экрана.

1.4.2. Очистка  экрана

Очистка экрана может начинаться с любой позиции и заканчиваться в любой другой с большим номером. Начальное значение строки и столбца заносятся в регистр СХ, конечное в DX, значение 07 - в регистр ВН

и 0600Н в АХ.

 

1.4.3. Экранные  и клавиатурные операции в  базовой версии DOS

Вывод на экран базовой  версии DOS требует определения текстового  сообщения  в  области данных, установки в регистр АН значения 09 (вызов функции DOS) и указания команды DOS INT  21H.Конец сообщения определяется ограничителем ($).

 

1.4.4. Вывод  на экран набора символов ASCII-кода   

Большинство из 256 ASCII кодов  имеют символьное представление  и могут быть выведены на экран. Шестнадцатиричные коды 00 и ff не имеют символов и выводятся на экран в виде пробелов, хотя символ пробела имеет ASCII-код 20Н.

В таблице 2 приведена программа (СОМ), которая выводит на экран полный  набор символов ASCII-кода. Программа вызывает три процедуры: b10clr, c10set, d10disp. Первая очищает экран, вторая  устанавливает курсор  в положение 0,0, а третья выводит содержимое поля СТR, которое вначале инициализировано значением 00 и затем увеличивается на 1 при каждом выводе на экран,  пока  не  достигнет  шестнадцатиричного значения FF.

 

1.4.5. Ввод  данных с клавиатуры    

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

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

Во-вторых, в списке параметров должно быть определено поле, куда команда  возвращает действительную длину введенного текста в байтах.

 

Задание 1

Листинг D1e.EXE

Page 60,132

TITLE D1e.EXE

 

0000    STACKSG SEGMENT PARA STACK 'Stack'

0000    STACKSG ENDS

 

0000    DATASG   SEGMENT  PARA  'Data'

0000    DATASG   ENDS

0000    CODESG   SEGMENT  PARA  'Code'

0000    BEGIN PROC FAR 

ASSUME CS:CODESG, DS:DATASG, SS:STACKSG, ES:NOTHING

 

 0000  1E   PUSH   DS

 0001  2B C0   SUB    AX,AX

 0003  50   PUSH   AX

 

 0004  B8 ---- R  MOV  AX,  DATASG

 0007  8E D8   MOV  DS,  AX

 

 0009  B4 02   MOV AH,02

 000B  B7 00   MOV BH,00

 000D  B6 0A   MOV DH,10

 000F  B2 41   MOV DL,65

 0011  CD 10   INT 10H

 

 0013  BA 0000   MOV DX,00

 0016  BB 0000   M2:MOV BX,00

 0019  4B   M1:DEC BX

 001A  75 FD   JNZ M1

 001C  4A   DEC DX

 001D  75 F7   JNZ M2

 001F  CB   RET

 

0020    BEGIN    ENDP    

0020    CODESG   ENDS 

END    BEGIN

 

Segments and Groups:

 

                N a m e          Length  Align Combine Class

 

CODESG . . . . . . . . . . . . .   0020 PARA NONE 'CODE'

DATASG . . . . . . . . . . . . .   0000 PARA NONE 'DATA'

STACKSG  . . . . . . . . . . . .   0000 PARA STACK 'STACK'

Symbols:           

 

                N a m e          Type  Value  Attr

 

BEGIN  . . . . . . . . . . . . .   F PROC 0000 CODESG Length = 0020

 

M1 . . . . . . . . . . . . . . .   L NEAR 0019 CODESG

M2 . . . . . . . . . . . . . . .   L NEAR 0016 CODESG

 

@FILENAME  . . . . . . . . . . .   TEXT  D1e  

 

     37 Source  Lines

     37 Total   Lines

     11 Symbols

  47456 + 396912 Bytes symbol space free

 

      0 Warning Errors

      0 Severe  Errors 

Print Screen экрана D1e.EXE

 

Листинг D1с.сom

page   60,132

     title  D1c (.COM)

0000         codesg  segment para 'code'

     assume cs:codesg,ds:codesg,ss:codesg,es:codesg

     ;-----------------------------

0100                org 100h ;обязательный атрибут исходной программы

     ;-----------------------------

 0100  EB 07 90        begin: jmp main

     ;-----------------------------

 0103  00FA        flda     dw   250

 0105  007D        fldb     dw   125

 0107  ????        fldc     dw   ?

0109         main proc  near      ; near - короткая передача

 0109  B4 02          MOV AH,02

 010B  B7 00     MOV BH,00

 010D  B6 05     MOV DH,05

 010F  B2 0C     MOV DL,12

 0111  CD 10     INT 10H

 

 0113  B8 0002     mov ax,02

 0116  BB 0000     m2: mov bx,00

 0119  4B     m1: dec bx

 011A  75 FD         jnz m1

 011C  48       dec ax

 011D  75 F7       jnz m2

 

 011F  C3             ret

0120         main  endp

0120         codesg  ends

           end  begin

D1c (.COM)                                                  Symbols-1

 

 

Segments and Groups:

 

                N a m e          Length  Align Combine Class

 

CODESG . . . . . . . . . . . . .   0120 PARA NONE 'CODE'

Symbols:           

 

                N a m e          Type  Value  Attr

 

BEGIN  . . . . . . . . . . . . .   L NEAR 0100 CODESG

 

FLDA . . . . . . . . . . . . . .   L WORD 0103 CODESG

FLDB . . . . . . . . . . . . . .   L WORD 0105 CODESG

FLDC . . . . . . . . . . . . . .   L WORD 0107 CODESG

 

M1 . . . . . . . . . . . . . . .   L NEAR 0119 CODESG

M2 . . . . . . . . . . . . . . .   L NEAR 0116 CODESG

MAIN . . . . . . . . . . . . . .   N PROC 0109 CODESG Length = 0017

 

@FILENAME  . . . . . . . . . . .   TEXT  D1c  

 

     30 Source  Lines

     30 Total   Lines

     11 Symbols

 

  47454 + 396914 Bytes symbol space free

 

      0 Warning Errors

      0 Severe  Errors

 

Print Screen экрана D1c.com

 

 

Задание 2

 

Листинг D2e.exe

 

Page 60,132

TITLE D2e.EXE

 

0000    STACKSG SEGMENT PARA STACK 'Stack'

0000    STACKSG ENDS

 

0000    DATASG   SEGMENT  PARA  'Data'

0000    DATASG   ENDS

 

0000    CODESG   SEGMENT  PARA  'Code'

0000    BEGIN PROC FAR 

ASSUME CS:CODESG, DS:DATASG, SS:STACKSG, ES:NOTHING

 

 0000  1E   PUSH   DS

 0001  2B C0   SUB    AX,AX

 0003  50   PUSH   AX

 

 0004  B8 ---- R  MOV  AX,  DATASG

 0007  8E D8   MOV  DS,  AX

 

 0009  B8 0600     mov ax,0600h

 000C  B3 46     MOV BL,70     

 000E  B9 0000     mov cx,0000  

 0011  BA 184F     mov dx,184fh 

 0014  CD 10     int 10h           

 

 

 0016  BA 0000   MOV DX,00

 0019  BB 0000   M2:MOV BX,00

 001C  4B   M1:DEC BX

 001D  75 FD   JNZ M1

 001F  4A   DEC DX

 0020  75 F7   JNZ M2

 0022  CB   RET

 

0023    BEGIN    ENDP    

0023    CODESG   ENDS 

END    BEGIN

 

Segments and Groups:

 

                N a m e          Length  Align Combine Class

 

CODESG . . . . . . . . . . . . .   0023 PARA NONE 'CODE'

DATASG . . . . . . . . . . . . .   0000 PARA NONE 'DATA'

STACKSG  . . . . . . . . . . . .   0000 PARA STACK 'STACK'

 

Symbols:           

 

                N a m e          Type  Value  Attr

 

BEGIN  . . . . . . . . . . . . .   F PROC 0000 CODESG Length = 0023

 

M1 . . . . . . . . . . . . . . .   L NEAR 001C CODESG

Информация о работе Ассемблирование и выполнение программ