Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
лабораторная работа №7.docx
Скачиваний:
3
Добавлен:
16.09.2019
Размер:
245.81 Кб
Скачать

Министерство образования и науки Российской Федерации

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

«Алтайский государственный технический университет им. И.И. Ползунова»

Факультет (институт) Информационных технологий

Кафедра Вычислительные системы и информационная безопасность

Отчет защищен с оценкой___________

Преподаватель _______В.И. Грозов

(подпись)

“____”___________ 2012 г.

Отчет

по лабораторной работе №7

Трансляция, компоновка и отладка программ.

название лабораторной работы

по дисциплине Аппаратные средства и вычислительная техника

наименование дисциплины

ЛР 090900.06.000О

обозначение документа

Студент группы ИБ-11____________________________А.С. Ефимов

и.о., фамилия

Преподаватель ______доцент кафедры ВСИБ___________В.И. Грозов

должность, ученое звание и.о., фамилия

БАРНАУЛ 2012

Цель работы:

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

1)

Рис.1 трансляция, создание листинга, компоновка и создание .exe файла

Листинг программы:

Turbo Assembler Version 3.1 10/04/12 20:06:58 Page 1

1.asm

1 0000 stack segment para stack 'stack'

2 0000 40*(73 74 61 63 6B) db 64 dup('stack') ; Область стека

3 0140 stack ends

4 0000 dseg segment para public 'data'

5 0000 0A 14 1E 28 source db 10,20,30,40

6 0004 04*(??) dest db 4 dup(?) ; эта таблица будет ; скопирована

7 0008 dseg ends ; в эту таблицу в обратном ; порядке

Turbo Assembler Version 3.1 10/04/12 20:06:58 Page 2

1.asm

Формирование сегмента кода

8 0000 cseg segment para public 'code'

9 assume cs:cseg,ds:dseg,ss:stack

10 0000 our_prog proc far

11 0000 1E push ds ; поместить в стек номер блока ; адреса возврата

12 0001 2B C0 sub ax,ax ; обнулить регистр AX

13 0003 50 push ax ; поместить в стек значение адреса ; возврата=0

14 0004 B8 0000s mov ax,dseg ;инициировать адрес сегмента ; данных

15 0007 8E D8 mov ds,ax

; присвоить элементам таблицы DEST нулевые начальные значения

16 0009 C6 06 0004r 00 mov dest,0 ; обнуление 1-го байта

17 000E C6 06 0005r 00 mov dest+1,0 ; обнуление 2-го байта

18 0013 C6 06 0006r 00 mov dest+2,0 ; обнуление 3-го байта

19 0018 C6 06 0007r 00 mov dest+3,0 ; обнуление 4-го байта

; скопировать таблицу SOURCE в таблицу DEST в обратном порядке, в качестве

; промежуточной ячейки пересылки использовать регистр AL

20 001D A0 0000r mov al,source

21 0020 A2 0007r mov dest+3,al

22 0023 A0 0001r mov al,source+1

23 0026 A2 0006r mov dest+2,al

24 0029 A0 0002r mov al,source+2

25 002C A2 0005r mov dest+1,al

26 002F A0 0003r mov al,source+3

27 0032 A2 0004r mov dest,al

28 0035 CB ret ; возврат управления отладчику db

29 0036 our_prog endp

30 0036 cseg ends

31 end our_prog

Turbo Assembler Version 3.1 10/04/12 20:06:58 Page 3

Symbol Table

Symbol Name Type Value

??DATE Text "10/04/12"

??FILENAME Text "1 "

??TIME Text "20:06:58"

??VERSION Number 030A

@CPU Text 0101H

@CURSEG Text CSEG

@FILENAME Text 1

@WORDSIZE Text 2

DEST Byte DSEG:0004

OUR_PROG Far CSEG:0000

SOURCE Byte DSEG:0000

Groups & Segments Bit Size Align Combine Class

CSEG 16 0036 Para Public CODE

DSEG 16 0008 Para Public DATA

STACK 16 0140 Para Stack STACK

2) Внесли в программу следующие изменения: задали исходную таблицу SOURCE из 5 двухбайтовых шестнадцатеричных переменных и скопировали эту новую таблицу в DEST.

Части программы где формируется сегмент данных изменили директиву dbна dw,добавили еще одно значение, стали использовать весь регистр axза место только его младшего байта al, при копировании таблицыSOURCE в таблицу DEST в обратном порядке добавили две строчки для ещё одной переменной (movax,sourcemovdest+4,ax) и сместили нумерацию байтов.

Рис.2 трансляция, создание листинга, компоновка и создание .exe файла

Листинг программы:

Turbo Assembler Version 3.1 10/04/12 20:27:04 Page 1

2.asm

1 0000 stack segment para stack 'stack'

2 0000 40*(73 74 61 63 6B) db 64 dup('stack') ; область стека

3 0140 stack ends

4 0000 dseg segment para public 'data'

5 0000 0A 14 1E 28 32 source db 10,20,30,40,50 ; эта таблица будет

; скопирована

6 0005 05*(??) dest db 5 dup(?) ; в эту таблицу в обратном ; порядке

7 000A dseg ends

Turbo Assembler Version 3.1 10/04/12 20:27:04 Page 2

2.asm

Формирование сегмента кода

8 0000 cseg segment para public 'code'

9 assume cs:cseg,ds:dseg,ss:stack

10 0000 our_prog proc far

11 0000 1E push ds ; поместить в стек номер ; блока адреса возврата

12 0001 2B C0 sub ax,ax ; обнулить регистр AX

13 0003 50 push ax ; поместить в стек ; значение адреса возврата=0

14 0004 B8 0000s mov ax,dseg ; инициировать адрес сегмента ; данных

15 0007 8E D8 mov ds,ax

; присвоить элементам таблицы DEST нулевые начальные значения

16 0009 C6 06 0005r 00 mov dest,0 ; обнуление 1-го байта

17 000E C6 06 0006r 00 mov dest+1,0 ; обнуление 2-го байта

18 0013 C6 06 0007r 00 mov dest+2,0 ; обнуление 3-го байта

19 0018 C6 06 0008r 00 mov dest+3,0 ; обнуление 4-го байта

20 001D C6 06 0009r 00 mov dest+4,0 ; обнуление 5-го байта

; скопировать таблицу SOURCE в таблицу DEST в обратном порядке, в качестве

; промежуточной ячейки пересылки использовать регистр AL

21 0022 A0 0000r mov al,source

22 0025 A2 0009r mov dest+4,al

23 0028 A0 0001r mov al,source+1

24 002B A2 0008r mov dest+3,al

25 002E A0 0002r mov al,source+2

26 0031 A2 0007r mov dest+2,al

27 0034 A0 0003r mov al,source+3

28 0037 A2 0006r mov dest+1,al

29 003A A0 0004r mov al,source+4

30 003D A2 0005r mov dest,al

31 0040 CB ret ; возврат управления отладчику db

32 0041 our_prog endp

33 0041 cseg ends

34 end our_prog

Turbo Assembler Version 3.1 10/04/12 20:27:04 Page 3

Symbol Table

Symbol Name Type Value

??DATE Text "10/04/12"

??FILENAME Text "2 "

??TIME Text "20:27:04"

??VERSION Number 030A

@CPU Text 0101H

@CURSEG Text CSEG

@FILENAME Text 2

@WORDSIZE Text 2

DEST Byte DSEG:0005

OUR_PROG Far CSEG:0000

SOURCE Byte DSEG:0000

Groups & Segments Bit Size Align Combine Class

CSEG 16 0041 Para Public CODE

DSEG 16 000A Para Public DATA

STACK 16 0140 Para Stack STACK

3.1) В сегменте данных определить переменные, заполнив их следующими значениями:

5байтов A, B, C, D, E:

Рис.3 трансляция, создание листинга, компоновка и создание .exe файла

Листинг программы:

Turbo Assembler Version 3.1 10/04/12 21:08:25 Page 1

1.asm

1 0000 stack segment para stack 'stack'

2 0000 40*(73 74 61 63 6B) db 64 dup('stack') ; область стека

3 0140 stack ends

4 0000 dseg segment para public 'data'

5 0000 0A 14 1E 28 32 source db 10,20,30,40,50

6 0005 01 a db 01 ;ввод переменной A

7 0006 01 b db 01 ;ввод переменной B

8 0007 01 c db 01 ;ввод переменной C

9 0008 01 d db 01 ;ввод переменной D

10 0009 01 e db 01 ;ввод переменной E

11 000A dseg ends

Turbo Assembler Version 3.1 10/04/12 21:08:25 Page 2

1.asm