close

Вход

Забыли?

вход по аккаунту

?

ЛР 1 Коля

код для вставкиСкачать

Лабораторная работа №1.
Выполнил: студент Группы ВТ1-С08
Овчаренко Николай
Проверил: Калинин
Цель работы: 1 Осуществить раздельную трансляцию программы (используя программу лабораторной работы №3 с пятого семестра обучения);
2 Изучить директивы PUBLIC и EXTRN;
3 Изучить таблицы перекрестных ссылок и карту памяти (.map)
Краткие теоретические сведения: Для того, чтобы выполнить раздельную трансляцию нужно разделить программу (л.р. №3 пятого семестра обучения) на 2 модуля: первый модуль содержит процедуру, которая вызывается из второго - главного модуля. В первом модуле необходимо с использованием директивы PUBLIC указать на то, что процедура будет вызываться из другого модуля, соответственно в основном модуле необходимо с помощью директивы EXTRN указать, что вызываемая в данном модуле процедура описывается в другом - внешнем по отношению к нему модуле. Раздельная трансляция осуществляется следующим образом:
TASM main .asm /c /l
TASM second.asm /c /l
/c - указание на включение в файл листинга с информацией о перекрестных ссылках;
/l - указывает на необходимость создания файла листинга;
TLINK main.obj second.obj /m /s
/m - создать файл карты;
/s - в файл карты включается информация о сегментах (адрес, длина в байтах, класс, имя сегмента).
Выполнение:
Ниже будут приведены файлы листинга двух модулей (.lst) и файл карты памяти (.map).
Основной модуль: main.lst
Turbo Assembler Version 3.1 03/03/11 14:01:50 Page 1
main.asm
1 ; Laba_4 by KLyambda
2
30000 model small
4
50000 stk segment stack
60000 0100*(00) db256 dup(0)
70100 stk ends
8
90000 common_data segment para common "data"
100000 FF*(3F) string db 255 dup("?")
1100FF common_data ends
12
13 extrn mc:far
14
150000 code segment para
16 assume cs:code,ds:common_data
17
180000 main proc far
190000 B8 0000s mov ax,common_data
200003 8E D8 mov ds,ax
21
220005 B4 62 mov ah,62h;
230007 CD 21 int 21h ;получаю адрес PSPв bx
24
250009 9A 00000000se call mc
26000E B4 4C mov ah,4ch
270010 CD 21 int 21h
280012 main endp
290012 code ends
30 end main
Turbo Assembler Version 3.1 03/03/11 14:01:50 Page 2
Symbol Table
Symbol NameType Value Cref(defined at #)
??DATEText "03/03/11"
??FILENAMEText "main"
??TIMEText "14:01:50"
??VERSIONNumber 030A
@32BITText 0 #3
@CODEText _TEXT #3 #3
@CODESIZEText 0 #3
@CPUText 0101H
@CURSEGText CODE #5 #9 #15
@DATAText DGROUP #3
@DATASIZEText 0 #3
@FILENAMEText MAIN
@INTERFACEText 00H #3
@MODELText 2 #3
@STACKText DGROUP #3
@WORDSIZEText 2 #5 #9 #15
MAINFar CODE:0000 #1830
MCFar ----:---- Extern #1325
STRINGByte COMMON_DATA:0000 #10
Groups & SegmentsBit Size AlignCombineClass Cref(defined at #)
CODE16 0012 Paranone #1516
COMMON_DATA16 00FF ParaCommonDATA #9 16 19
DGROUPGroup #3 3
_DATA16 0000 WordPublicDATA #3
STK16 0100 ParaStack #5
_TEXT16 0000 WordPublicCODE #3 3
Дополнительный модуль: mc.lst
Turbo Assembler Version 3.1 03/03/11 14:01:50 Page 1
mc.asm
1
20000 model small
3
4 ; by KLyambda
5
60000 stk segment stack
70000 0100*(00) db256 dup(0)
80100 stk ends
9
10 public mc
11
120000 common_data segment para common "data"
130000 FF*(3F) string db 255 dup("?")
1400FF common_data ends
15
160000 code segment para
17 assume cs:code,ds:common_data
18
190000 begin:
200000 mcproc far
21
220000 8E C3 mov es,bx
230002 BE 0080 mov si,80h
240005 26: 8A 2C mov ch,byte ptr es:[si] ;получаю число введённых символов
25
260008 46 inc si
270009 33 C0 xor ax,ax
28000B BB 0000r mov bx,offset string ;получаюсмещение строки, вкоторойбуду хранить изменённыйбуфер
29000E BF 0000 mov di,0h
30
310011 26: 8A 14 m1: mov dl,es:[si] ;очереднойсимвол из строки в регистр dl
320014 80 FA 61 cmp dl,61h ;сравниваюс 61h
330017 72 3F jbnext
340019 73 00 jae m3
35
36
37001B m3:
38001B 80 FA 7A cmp dl,7Ah ;сравниваюс 7Ah
39001E 77 02 jam2
400020 76 14 jbe m5
41
420022 m2:
430022 80 FA A0 cmp dl,160
440025 72 31 jbnext
450027 73 0D jae m5
46
470029 m4:
480029 80 E2 DF and dl,11011111b ;инвертирую пятый бит
49002C 88 11 mov byte ptr[bx+di],dl
50002E 47 inc di ;увеличиваю смещение
51002F 46 inc si ;адресую следующийсимвол
520030 FE CD dec ch ;уменьшаю значениесчётчика в cx
530032 75 DD jnz m1 ;если cx не 0, то переход на m1
540034 74 2A jzexit ;если cx 0, то переход на exit
55
560036 m5:
570036 80 FA AF cmp dl,175
Turbo Assembler Version 3.1 03/03/11 14:01:50 Page 2
mc.asm
580039 76 EE jbe m4
59003B 77 00 jam6
60003D m6:
61003D 80 FA E0 cmp dl,224
620040 72 16 jbnext
630042 73 00 jae m7
640044 m7:
650044 80 FA EF cmp dl,239
660047 77 0F janext
670049 76 00 jbe m8
68004B m8:
69004B 80 EA 50 sub dl,50h
70004E 88 11 mov byte ptr[bx+di],dl
710050 47 inc di ;увеличиваю смещение
720051 46 inc si ;адресую следующийсимвол
730052 FE CD dec ch ;уменьшаю значениесчётчика в cx
740054 75 BB jnz m1 ;если cx не 0, то переход на m1
750056 74 08 jzexit ;если cx 0, то переход на exit
76
770058 next:
780058 88 11 mov byte ptr[bx+di],dl
79005A 47 inc di ;увеличиваю смещение
80005B 46 inc si ;адресую следующийсимвол
81005C FE CD dec ch ;уменьшаю значениесчётчика в cx
82005E 75 B1 jnz m1 ;если cx не 0, то переход на m1
83
84
850060 exit:
860060 C6 01 24 mov byte ptr [bx+di],"$"
870063 B4 09 mov ah,09h
880065 BA 0000r lea dx,string
890068 CD 21 int 21h
90
91006A CB ret
92006B mcendp
93006B code ends
94 end begin
Turbo Assembler Version 3.1 03/03/11 14:01:50 Page 3
Symbol Table
Symbol NameType Value Cref(defined at #)
??DATEText "03/03/11"
??FILENAMEText "mc"
??TIMEText "14:01:50"
??VERSIONNumber 030A
@32BITText 0 #2
@CODEText _TEXT #2 #2
@CODESIZEText 0 #2
@CPUText 0101H
@CURSEGText CODE #6 #12 #16
@DATAText DGROUP #2
@DATASIZEText 0 #2
@FILENAMEText MC
@INTERFACEText 00H #2
@MODELText 2 #2
@STACKText DGROUP #2
@WORDSIZEText 2 #6 #12 #16
BEGINNear CODE:0000 #1994
EXITNear CODE:0060 54 75 #85
M1Near CODE:0011 #3153 7482
M2Near CODE:0022 39 #42
M3Near CODE:001B 34 #37
M4Near CODE:0029 #4758
M5Near CODE:0036 40 45 #56
M6Near CODE:003D 59 #60
M7Near CODE:0044 63 #64
M8Near CODE:004B 67 #68
MCFar CODE:0000 10 #20
NEXTNear CODE:0058 33 44 62 66 #77
STRINGByte COMMON_DATA:0000 #1328 88
Groups & SegmentsBit Size AlignCombineClass Cref(defined at #)
CODE16 006B Paranone #1617
COMMON_DATA16 00FF ParaCommonDATA #1217
DGROUPGroup #2 2
_DATA16 0000 WordPublicDATA #2
STK16 0100 ParaStack #6
_TEXT16 0000 WordPublicCODE #2 2
Карта памяти: main.map
Start Stop Length Name Class
00000H 00000H 00000H _TEXT CODE
00000H 00000H 00000H _DATA DATA
00000H 000FEH 000FFH COMMON_DATA DATA
00100H 00111H 00012H CODE 00120H 0018AH 0006BH CODE 00190H 0038FH 00200H STK Detailed map of segments
0000:0000 0000 C=CODE S=_TEXT G=(none) M=MAIN.ASM ACBP=48
0000:0000 0000 C=CODE S=_TEXT G=(none) M=MC.ASM ACBP=48
0000:0000 0000 C=DATA S=_DATA G=DGROUP M=MAIN.ASM ACBP=48
0000:0000 0000 C=DATA S=_DATA G=DGROUP M=MC.ASM ACBP=48
0000:0000 00FF C=DATA S=COMMON_DATA G=(none) M=MAIN.ASM ACBP=78
0000:0000 00FF C=DATA S=COMMON_DATA G=(none) M=MC.ASM ACBP=78
0010:0000 0012 C= S=CODE G=(none) M=MAIN.ASM ACBP=60
0012:0000 006B C= S=CODE G=(none) M=MC.ASM ACBP=60
0019:0000 0100 C= S=STK G=(none) M=MAIN.ASM ACBP=74
0019:0100 0100 C= S=STK G=(none) M=MC.ASM ACBP=74
Address Publics by Name
0012:0000 MC
Address Publics by Value
0012:0000 MC
Program entry point at 0010:000
Структура объектного модуля:
OBJ файл представляет собой набор записей со следующими полями: тип записи - 1 байт, длина записи - 2 байта, содержимое записи - не превышает 1024 байта, байт контрольной суммы.
main.obj
mc.obj
1
ОБНИНСКИЙ ИНСТИТУТ АТОМНОЙ ЭНЕРГЕТИКИ
НИЯУ "МИФИ"
Факультет Кибернетики
Кафедра КССТ
Обнинск 2010
Документ
Категория
Рефераты
Просмотров
6
Размер файла
91 Кб
Теги
коля
1/--страниц
Пожаловаться на содержимое документа