СП - ЛР 4 (1075953)
Текст из файла
Согласовано: Гапанюк Ю.Е. "__"_____________2010 г. | Утверждаю: Большаков С.А. "__"_____________2010 г. |
Лабораторная работа №4 по курсу
Системное программирование
"Перевод символов в шестнадцатеричный вид"
7
(количество листов)
ИСПОЛНИТЕЛЬ: | |
студент группы ИУ5-41 | ________________ |
Сидякин А.А. | "15" марта 2010 г. |
Москва - 2010
__________________________________________________________
Цель лабораторной работы:
Разработать и отладить программу на языке Ассемблер для вывода на экран двадцати первых заглавных латинских букв и их кодов в шестнадцатеричном виде
Исходный текст программы:
; Лабораторная работа №4
;===============================================================================
prgr segment ; начало сегмента команд
assume CS:prgr, DS:data ; сегментный регистр CS - сегмент команд
; сегментный регистр DS - сегмент данных
begin: mov AX,data ; адрес сегмента данных сначала загрузить в AX
; так как нельзя загрузить сразу напрямую в DS
mov DS,AX ; теперь из AX загружаем в DS
mov AX,02h ; очистка экрана
int 10h
mov DX,DS ; дополнительный сегмент данных
mov ES,DX ; через перевалочный DX
mov BX,offset hextb ; указатель DS:BX на таблицу для XLAT
mov CX,20 ; число шагов в цикле
mov AX,0041h ; число для перевода записывается в AL
trscd:
CALL HEX
push AX ; скинуть в стек содержимое AX
push BX
CALL PUTCH
pop BX
pop AX ; восстановить значение AX из стека
mov AH,00 ; затереть старшую часть AX
inc AX ; перейти к следующей букве
loop trscd ; на новый круг цикла
CALL CLRF
;mov AH,09h
;mov DX,offset msg
;int 21
CALL GETCH
mov AX,02h ; очистка экрана
int 10h
mov AX,4C00h ; функция DOS 4Ch завершения программы
; код 0 успешного завершения
int 21h
; ------------------------------------------------------------------------------
GETCH proc ; процедура ввода символа
mov AH,01h ; функция DOS ожидания символа из стандартного ввода
int 21h
RET ; выход из процедуры
GETCH endp
; ---------------------------------------------------------------------------------
PUTCH proc ; процедура вывода на экран символа
mov AH,02h ; функция DOS вывода на экран символа
mov DL,AL
int 21h
mov AH,09h ; функция DOS вывода на экран строки
mov DX,offset def ; адреса строки содержится в DX
int 21h ; прерывание, вызывающее DOS
mov AH,40h ; функция DOS вывода на экран строки
mov BX,1 ; дескриптор экрана
push CX
mov CX,2 ; число выводимых байтов
mov DX,offset hexdgt ; адрес строки содержится в DX
int 21h ; прерывание, вызывающее DOS
pop CX
CALL CLRF
RET
PUTCH endp
; ------------------------------------------------------------------------------
CLRF proc ; процедура переноса строки и возврата каретки
mov AH,02h ; запись функции DOS вывода символа
mov DL,10 ; запись кода символа новой строки
int 21h
mov AH,02h ; запись функции DOS вывода символа (на всякий)
mov DL,13 ; запись символа возврата каретки
int 21h
RET
CLRF endp
; ------------------------------------------------------------------------------
HEX proc ; процедура перевода из DEC в HEX
push AX
mov SI,0 ; начинаем с 0-го (первого) элемента
push AX
shr AL, 1 ; сдвигаем вправо на 1 разряд
shr AX, 1
shr AX, 1
shr AX, 1
XLAT ; записываем ASCII код в AL
mov hexdgt[SI],AL ; поместить это значение в первый элемент массива
inc SI ; перейти ко второму элементу массива
pop AX ; восстанавить число
and AL, 00001111b ; маскировка старшей цифры
XLAT ; записать ASCII код в AL
mov hexdgt[SI],AL ; поместить это значение во второй элемент массива
pop AX
RET
HEX endp
; ------------------------------------------------------------------------------
prgr ends ; конец сегмента команд
; -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
data segment ; начало сегмента данных
hextb db '0123456789ABCDEF'
hexdgt db 2 dup ('*')
;msg db 'Press any key to exit... $'
def db ' - $'
data ends ; конец сегмента данных
; -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
stk segment stack ; начало сегмента стека
db 256 dup (0) ; резервирование 256 байт для стека
stk ends ; конец сегмента стека
; -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
end begin ; конец текста программы, установка точки входа
;===============================================================================
Листинг программы:
Turbo Assembler Version 2.51 14/03/10 22:55:38 Page 1
lr4.ASM
1
2
3 0000 prgr segment
4
5 assume CS:prgr, DS:data
6
7 0000 B8 0000s begin: mov AX,data
8
9 0003 8E D8 mov DS,AX
10
11 0005 B8 0002 mov AX,02h
12 0008 CD 10 int 10h
13
14 000A 8C DA mov DX,DS
15 000C 8E C2 mov ES,DX
16
17 000E BB 0000r mov BX,offset hextb
18 0011 B9 0014 mov CX,20
19 0014 B8 0041 mov AX,0041h
20 0017 trscd:
21 0017 E8 004C CALL HEX
22 001A 50 push AX
23 001B E8 001B CALL PUTCH
24 001E 58 pop AX
25 001F B4 00 mov AH,00
26 0021 40 inc AX
27 0022 E2 F3 loop trscd
28
29 0024 E8 0032 CALL CLRF
30
31
32
33
34
35 0027 E8 000A CALL GETCH
36
37 002A B8 0002 mov AX,02h
38 002D CD 10 int 10h
39
40 002F B8 4C00 mov AX,4C00h
41
42 0032 CD 21 int 21h
43
44 0034 GETCH proc
45 0034 B4 01 mov AH,01h
46 0036 CD 21 int 21h
47 0038 C3 RET
48 0039 GETCH endp
49
50 0039 PUTCH proc
51 0039 B4 02 mov AH,02h
52 003B 8A D0 mov DL,AL
53 003D CD 21 int 21h
54 003F B4 09 mov AH,09h
55 0041 BA 0012r mov DX,offset def
56 0044 CD 21 int 21h
57 0046 B4 40 mov AH,40h
58 0048 BB 0001 mov BX,1
59 004B 51 push CX
60 004C B9 0002 mov CX,2
61 004F BA 0010r mov DX,offset hexdgt
62 0052 CD 21 int 21h
63 0054 59 pop CX
64 0055 E8 0001 CALL CLRF
65 0058 C3 RET
66 0059 PUTCH endp
67
68 0059 CLRF proc
69 0059 B4 02 mov AH,02h
70 005B B2 0A mov DL,10
71 005D CD 21 int 21h
72 005F B4 02 mov AH,02h
73 0061 B2 0D mov DL,13
74 0063 CD 21 int 21h
75 0065 C3 RET
76 0066 CLRF endp
77
78 0066 HEX proc
79 0066 50 push AX
80 0067 BE 0000 mov SI,0
81 006A 50 push AX
82 006B D0 E8 shr AL, 1
83 006D D1 E8 shr AX, 1
84 006F D1 E8 shr AX, 1
85 0071 D1 E8 shr AX, 1
86 0073 D7 XLAT
87 0074 88 84 0010r mov hexdgt[SI],AL
88 0078 46 inc SI
89 0079 58 pop AX
90 007A 24 0F and AL, 00001111b
91 007C D7 XLAT
92 007D 88 84 0010r mov hexdgt[SI],AL
93 0081 58 pop AX
94 0082 C3 RET
95 0083 HEX endp
96
97 0083 prgr ends
98
99 0000 data segment
100
101 0000 30 31 32 33 34 35 36+ hextb db '0123456789ABCDEF'
102 37 38 39 41 42 43 44+
103 45 46
104 0010 02*(2A) hexdgt db 2 dup ('*')
105
106 0012 20 2D 20 24 def db ' - $'
107
108 0016 data ends
109
110 0000 stk segment stack
111 0000 0100*(00) db 256 dup (0)
112 0100 stk ends
113
114 end begin
Symbol Name Type Value
??DATE Text "14/03/10"
??FILENAME Text "lr4 "
??TIME Text "22:55:38"
??VERSION Number 0205
@CPU Text 0101H
@CURSEG Text STK
@FILENAME Text LR4
@WORDSIZE Text 2
BEGIN Near PRGR:0000
CLRF Near PRGR:0059
DEF Byte DATA:0012
GETCH Near PRGR:0034
HEX Near PRGR:0066
HEXDGT Byte DATA:0010
HEXTB Byte DATA:0000
PUTCH Near PRGR:0039
TRSCD Near PRGR:0017
Groups & Segments Bit Size Align Combine Class
DATA 16 0016 Para none
PRGR 16 0083 Para none
STK 16 0100 Para Stack
Результат работы программы:
A - 41
B - 42
C - 43
D - 44
E - 45
F - 46
G - 47
H - 48
I - 49
J - 4A
K - 4B
L - 4C
M - 4D
N - 4E
O - 4F
P - 50
Q - 51
R - 52
S - 53
T - 54
Блок-схема программы:
Характеристики
Тип файла документ
Документы такого типа открываются такими программами, как Microsoft Office Word на компьютерах Windows, Apple Pages на компьютерах Mac, Open Office - бесплатная альтернатива на различных платформах, в том числе Linux. Наиболее простым и современным решением будут Google документы, так как открываются онлайн без скачивания прямо в браузере на любой платформе. Существуют российские качественные аналоги, например от Яндекса.
Будьте внимательны на мобильных устройствах, так как там используются упрощённый функционал даже в официальном приложении от Microsoft, поэтому для просмотра скачивайте PDF-версию. А если нужно редактировать файл, то используйте оригинальный файл.
Файлы такого типа обычно разбиты на страницы, а текст может быть форматированным (жирный, курсив, выбор шрифта, таблицы и т.п.), а также в него можно добавлять изображения. Формат идеально подходит для рефератов, докладов и РПЗ курсовых проектов, которые необходимо распечатать. Кстати перед печатью также сохраняйте файл в PDF, так как принтер может начудить со шрифтами.