Автор работы: Пользователь скрыл имя, 21 Ноября 2012 в 19:19, лабораторная работа
Цель работы: показать процессы ассемблирования, компоновки и выполнения программ на высокопроизводительных микропроцессорных отладочных устройствах.
При разработке программ на ассемблере требуются: любой редактор для набора текста исходной программы, Ассемблер (в данном случае MASM) и программа-компоновщик LINK.
Шаг ассемблирования включает в себя трансляцию исходного текста в машинный объектный код и генерацию модуля с расширением .OBJ. Этот формат еще не готов к исполнению, необходим шаг компоновки - то есть преобразование модуля .OBJ в модуль .EXE (исполняемый модуль).
M2 . . . . . . . . . . . . . . . L NEAR 0019 CODESG
@FILENAME . . . . . . . . . . . TEXT D2e
38 Source Lines
38 Total Lines
11 Symbols
47456 + 396912 Bytes symbol space free
0 Warning Errors
0 Severe Errors
Print Screen экрана D2e.exe
Листинг D2с.сom
page 60,132
title D2c(.COM)
0000 codesg segment para 'code'
assume cs:codesg,ds:codesg,ss: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 B8 0600 mov ax,0600h ;АН 06 (прокрутка) AL 00 (весь экран)
010C B7 00 mov bh,00 ;нормальный атрибут (черно/белый)
010E B9 0000 mov cx,0000 ;верхняя левая позиция
0111 BA 184F mov dx,184fh ;нижняя правая позиция
0114 CD 10 int 10h ;передача управления в BIOS
0116 B8 1000 mov ax,1000h
0119 BB FFFF m: mov bx,0ffffh
011C 4B m2: dec bx
011D 75 FD jnz m2
011F 48 dec ax
0120 75 F7 jnz m
0122 C3 ret
0123 main endp
0123 codesg ends
end begin
Segments and Groups:
N a m e Length Align Combine Class
CODESG . . . . . . . . . . . . . 0123 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
M . . . . . . . . . . . . . . . L NEAR 0119 CODESG
M2 . . . . . . . . . . . . . . . L NEAR 011C CODESG
MAIN . . . . . . . . . . . . . . N PROC 0109 CODESG Length = 001A
@FILENAME . . . . . . . . . . . TEXT D2c
29 Source Lines
29 Total Lines
11 Symbols
47454 + 396914 Bytes symbol space free
0 Warning Errors
0 Severe Errors
Print Screen экрана D2c.com
Задание 3
Листинг D3e.exe
PAGE 60,132
TITLE D3e.(ЕХЕ)<Составление лабораторного варианта>
0000 STACKSG SEGMENT PARA STACK 'Stack'
0000 0020 DW 32 DUP(?)
0040 STACKSG ENDS
0000 DATASG SEGMENT PARA 'Data'
0000 68 65 6C 6C 6F 21 21 namprmr db 'hello!!','$'
24
0008 DATASG ENDS
0000 CODESG SEGMENT PARA 'Code'
0000 BEGIN PROC FAR ;начало процедуры begin,пересылки длинные
ASSUME CS:CODESG, DS:DATASG, SS:STACKSG, ES:DATASG
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 09 mov ah, 09 ;запрос вывода на экран
000B 8D 16 0000 R lea dx, namprmr ;загрузка адреса сообщения
000F CD 21 int 21h
; mov ax,0600h ; АН 06 (прокрутка) AL 00 (весь экран
; mov bh,07 ; нормальный атрибут (черно/белый)
; mov cx,0000 ;верхняя левая позиция
; mov dx,184fh ;нижняя правая позиция
; int 10h ;передача управления в BIOS
0011 BA FFFF mov dx,0ffffh
0014 BB FFFF m: mov bx,0ffffh
0017 4B m1: dec bx
0018 75 FD jnz m1
001A 4A dec dx
001B 75 F7 jnz m
001D CB ret
001E BEGIN ENDP ;конец процедуры BEGIN
001E CODESG ENDS ;конец сегмента кодового
END BEGIN
Segments and Groups:
N a m e Length Align Combine Class
CODESG . . . . . . . . . . . . . 001E PARA NONE 'CODE'
DATASG . . . . . . . . . . . . . 0008 PARA NONE 'DATA'
STACKSG . . . . . . . . . . . . 0040 PARA STACK 'STACK'
Symbols:
N a m e Type Value Attr
BEGIN . . . . . . . . . . . . . F PROC 0000 CODESG Length = 001E
M . . . . . . . . . . . . . . . L NEAR 0014 CODESG
M1 . . . . . . . . . . . . . . . L NEAR 0017 CODESG
NAMPRMR . . . . . . . . . . . . L BYTE 0000 DATASG
@FILENAME . . . . . . . . . . . TEXT D3e
43 Source Lines
43 Total Lines
12 Symbols
47452 + 396916 Bytes symbol space free
0 Warning Errors
0 Severe Errors
Print Screen экрана D3e.exe
Листинг D3с.сom
page 60,132
title D3c (COM);
;-----------------------------
0000 codesg segment para 'code'
assume cs:codesg,ds:codesg,ss: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 B8 0600 mov ax,0600h ;АН 06 (прокрутка) AL 00 (весь экран)
010C B7 07 mov bh,07 ;нормальный атрибут (черно/белый)
010E E2 F1 E5 F5 20 E1 EB namprmr db 'всех благ!','$'
E0 E3 21 24
0119 B9 0000 mov cx,0000 ;верхняя левая позиция
011C BA 184F mov dx,184fh ;нижняя правая позиция
011F CD 10 int 10h ;передача управления в BIOS
0121 B4 09 mov ah, 09 ;запрос вывода на экран
0123 8D 16 010E R lea dx, namprmr ;загрузка адреса сообщения
0127 CD 21 int 21h ;вызов DOS
0129 B8 1000 mov ax,1000h
012C BB FFFF m: mov bx,0ffffh
012F 4B m2: dec bx
0130 75 FD jnz m2
0132 48 dec ax
0133 75 F7 jnz m
0135 C3 ret
0136 main endp
0136 codesg ends
end begin
Segments and Groups:
N a m e Length Align Combine Class
CODESG . . . . . . . . . . . . . 0136 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
M . . . . . . . . . . . . . . . L NEAR 012C CODESG
M2 . . . . . . . . . . . . . . . L NEAR 012F CODESG
MAIN . . . . . . . . . . . . . . N PROC 0109 CODESG Length = 002D
NAMPRMR . . . . . . . . . . . . L BYTE 010E CODESG
@FILENAME . . . . . . . . . . . TEXT D3c
40 Source Lines
40 Total Lines
12 Symbols
47452 + 396916 Bytes symbol space free
0 Warning Errors
0 Severe Errors
Print Screen экрана D3c.com
Задание 4
Листинг D4e.exe
Page 60,132
TITLE D4e.EXE
0000 STACKSG SEGMENT PARA STACK 'Stack'
0000 0020 DW 32 DUP(?)
0040 STACKSG ENDS
0000 DATASG SEGMENT PARA 'Data'
0000 00 24 CTR DB 00,'$'
0002 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 8E C0 mov es,ax
000B E8 0018 R call b10clr
000E E8 0026 R call c10set
0011 E8 0030 R call d10disp
0014 E8 0042 R CALL Z
0017 CB ret
0018 b10clr proc NEAR
0018 B8 0600 mov ax,0600h
001B B7 07 mov bh,07
001D B9 0000 mov cx,0000
0020 BA 184F mov dx,184fh
0023 CD 10 int 10h
0025 C3 RET
0026 b10clr endp
0026 c10set proc NEAR
0026 B4 02 mov ah,02
0028 B7 00 mov bh,00
002A BA 0000 mov dx,0000
002D CD 10 int 10h
002F C3 ret
0030 c10set endp
0030 d10disp proc NEAR
0030 B9 0100 mov cx,256
0033 8D 16 0000 R d20: lea dx,ctr
0037 B4 09 mov ah,09
0039 CD 21 int 21h
003B FE 06 0000 R inc ctr
003F E2 F2 loop d20
0041 C3 ret
0042 d10disp endp
0042 Z PROC NEAR
0042 BA FFFF MOV DX,0FFFFH
0045 BB FFFF M2:MOV BX,0FFFFH
0048 4B M1:DEC BX
0049 75 FD JNZ M1
004B 4A DEC DX
004C 75 F7 JNZ M2
004E C3 RET
004F Z ENDP
004F BEGIN ENDP
004F CODESG ENDS
END BEGIN
Segments and Groups:
N a m e Length Align Combine Class
CODESG . . . . . . . . . . . . . 004F PARA NONE 'CODE'
DATASG . . . . . . . . . . . . . 0002 PARA NONE 'DATA'
STACKSG . . . . . . . . . . . . 0040 PARA STACK 'STACK'
Symbols:
N a m e Type Value Attr
B10CLR . . . . . . . . . . . . . N PROC 0018 CODESG Length = 000E
BEGIN . . . . . . . . . . . . . F PROC 0000 CODESG Length = 004F
C10SET . . . . . . . . . . . . . N PROC 0026 CODESG Length = 000A
CTR . . . . . . . . . . . . . . L BYTE 0000 DATASG
D10DISP . . . . . . . . . . . . N PROC 0030 CODESG Length = 0012
D20 . . . . . . . . . . . . . . L NEAR 0033 CODESG
M1 . . . . . . . . . . . . . . . L NEAR 0048 CODESG
M2 . . . . . . . . . . . . . . . L NEAR 0045 CODESG
Z . . . . . . . . . . . . . . . N PROC 0042 CODESG Length = 000D
@FILENAME . . . . . . . . . . . TEXT D4e
70 Source Lines
70 Total Lines
17 Symbols
47438 + 396914 Bytes symbol space free
0 Warning Errors
0 Severe Errors
Print Screen экрана D4e.exe
Листинг D4с.сom
page 60,132
title D4c (COM)
0000 codesg segment para 'code'
assume cs:codesg,ds:codesg,ss:codesg,
0100 org 100h
0100 EB 02 begin: jmp short main
0102 00 24 ctr db 00,'$'
; основная процедура
----------------------------
0104 main proc near
0104 E8 0111 R call b10clr ;очистить экран
0107 E8 011F R call c10set ;установить курсор
010A E8 0129 R call d10disp ;вывести символ на экран
010D E8 013B R call Z
0110 C3 ret
0111 main endp
; очистка экрана
-------------------
0111 b10clr proc NEAR
0111 B8 0600 mov ax,0600h
0114 B7 07 mov bh,07
0116 B9 0000 mov cx,0000 ;левая верхняя позиция
0119 BA 184F mov dx,184fh ;правая нижняя позиция
011C CD 10 int 10h
011E C3 ret
011F b10clr endp
; установка курсора в 00,00
------------------------------
011F c10set proc NEAR
011F B4 02 mov ah,02
0121 B7 00 mov bh,00
0123 BA 0000 mov dx,0000
0126 CD 10 int 10h
0128 C3 ret
0129 c10set endp
;вывод на экран ASCII символов
0129 d10disp proc NEAR
0129 B9 0100 mov cx,256 ;256 итераций
012C 8D 16 0102 R d20: lea dx,ctr ;адрес счетчика
0130 B4 09 mov ah,09 ;функция вывода символа
0132 CD 21 int 21h
0134 FE 06 0102 R inc ctr ;увеличить содерж. счетчика
0138 E2 F2 loop d20 ;уменьшить сх, если не 0 - цикл
013A C3 ret
013B d10disp endp
013B Z PROC NEAR
013B B8 FFFF MOV ax,0ffffH
013E BB FFFF M2:MOV BX,0FFFFH
0141 4B M1:DEC BX
0142 75 FD JNZ M1
0144 48 DEC ax
0145 75 F7 JNZ M2
0147 C3 RET
0148 Z ENDP
0148 codesg ends
end begin
Segments and Groups:
N a m e Length Align Combine Class
CODESG . . . . . . . . . . . . . 0148 PARA NONE 'CODE'
Symbols:
N a m e Type Value Attr
B10CLR . . . . . . . . . . . . . N PROC 0111 CODESG Length = 000E
BEGIN . . . . . . . . . . . . . L NEAR 0100 CODESG
C10SET . . . . . . . . . . . . . N PROC 011F CODESG Length = 000A
CTR . . . . . . . . . . . . . . L BYTE 0102 CODESG
D10DISP . . . . . . . . . . . . N PROC 0129 CODESG Length = 0012
D20 . . . . . . . . . . . . . . L NEAR 012C CODESG
M1 . . . . . . . . . . . . . . . L NEAR 0141 CODESG
M2 . . . . . . . . . . . . . . . L NEAR 013E CODESG
MAIN . . . . . . . . . . . . . . N PROC 0104 CODESG Length = 000D
Z . . . . . . . . . . . . . . . N PROC 013B CODESG Length = 000D
@FILENAME . . . . . . . . . . . TEXT D4c
67 Source Lines
67 Total Lines
14 Symbols
47454 + 396914 Bytes symbol space free
0 Warning Errors
0 Severe Errors
Print Screen экрана D4c.com
Задание 5
Листинг D5e.exe
page 60,132
title D5e (exe) Ввод и вывод
;-----------------------------
0000 stacksg segment para 'stack'
0000 0020[ dw 32 dup(?)
????
]
0040 stacksg ends
;-----------------------------
0000 datasg segment para 'data'
0000 namepar label byte ;имя списка параметров:
0000 14 maxnlen db 20 ;максимальная длина имени
0001 ?? namelen db ? ;число введенных символов
0002 0014[ namefld db 20 dup(' '),'$' ;Введеннoe имя и ограничитель
20
]
24
0017 57 68 61 74 20 69 73 primpt db 'What is you Name?','$'
20 79 6F 75 20 4E 61
6D 65 3F 24
0029 datasg ends
;-----------------------------
0000 codesg segment para 'code'
0000 begin proc far
assume cs:codesg,ds:datasg,ss:
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 8E C0 mov es,ax
000B E8 002D R call q10clr ;очистка экрана
000E a1LOOP:
000E BA 0000 mov dx,0000 ;установка курсора в 0
0011 E8 003B R call q20curs ;
0014 E8 0042 R call b10prmp ;выдать текст запроса
0017 E8 004B R call d10inpt ;ввести имя
001A E8 002D R call q10clr ;очистить экран
001D 80 3E 0001 R 00 cmp namelen,00 ;имя введено?
0022 74 08 je a2 ;нет - выйти
0024 E8 0054 R call e10code ;выдать сигнал и ограничитель '$'
0027 E8 0065 R call f10cent ;центрирование и вывод
002A EB E2 jmp a1LOOP
002C a2:
002C CB ret ; вернуться в DOS