Министерство образования и науки Российской Федерации
Федеральное государственное бюджетное образовательное учреждение высшего профессионального образования
«Алтайский государственный технический университет им. И.И. Ползунова»
Факультет (институт) Информационных технологий
Кафедра Вычислительные системы и информационная безопасность
Отчет защищен с оценкой___________
Преподаватель _______В.И. Грозов
(подпись)
“____”___________ 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