отчет asm 8 (1075970)
Текст из файла
Защищено: Гапанюк Ю. Е. "__"_____________2014 г. | Демонстрация: Гапанюк Ю. Е. "__"_____________2014 г. |
Отчет по лабораторной работе № 8 по курсу
Системное программирование
Вывод дампа оперативной памяти по введенному адресу
4
(количество листов)
Вариант № 9
ИСПОЛНИТЕЛЬ: | |
студент группы ИУ5-42 | _____________________ |
(подпись) | |
Зайков С.А. | "__"_____________2014 г. |
Москва, МГТУ - 2014
_____________________________________________________________________________________________
СОДЕРЖАНИЕ
1. Цель и задание работы 3
2. Блок-схема алгоритма программы 3
3. Листинг кода 4
4. Результаты работы программы 4
1 Цель и задание работы
Разработать и отладить программу на языке Ассемблер для вывода на экран дампа оперативной памяти в шестнадцатеричном виде (распечатки содержимого ОП) по адресу, задаваемому с клавиатуры в шестнадцатеричном виде (адрес FAR - пара чисел, например - 00EF:012A0). Вывод информации на экран производиться как в отладчиках.
2 Блок-схема алгоритма программы
3. Листинг кода
Turbo Assembler Version 3.1 17/05/14 11:46:28 Page 1
lab8.asm
1 0000 text SEGMENT 'CODE'
2 ASSUME CS:text
3 org 100h
4 0100 BEGIN:
5 0100 E9 014E JMP MAIN
6 ;----------------------------------------
7 ;Объявление данных
8 0103 30 31 32 33 34 35 36+ hex_tab DB '0123456789ABCDEF'
9 37 38 39 41 42 43 44+
10 45 46
11 0113 87 A0 A9 AA AE A2 20+ out_str DB 'Зайков Сергей ИУ5-42 Вариант 9','$'
12 91 A5 E0 A3 A5 A9 20+
13 88 93 35 2D 34 32 20+
14 82 A0 E0 A8 A0 AD E2+
15 20 39 24
16 =0010 STR_LEN EQU 16
17 =000F STRINGS EQU 15
18 =00F0 BUF_LEN EQU STR_LEN*STRINGS
19 0132 F0*(00) BUF DB BUF_LEN DUP(0)
20 0222 0000 rBP DW 0
21 0224 0000 rDI DW 0
22 0226 0000 rSI DW 0
23 0228 0000 rSP DW 0
24 022A 0000 rES DW 0
25 022C 0000 rSS DW 0
26 022E 0000 rDS DW 0
27 0230 0000 rCS DW 0
28 0232 0000 DUMP_sm DW 0
29 0234 0000 DUMP_seg DW 0
30 0236 00 EXIT_FL DB 0
31 0237 82 A2 A5 A4 A8 E2 A5+ inp_str DB 'Введите адрес: ','$'
32 20 A0 A4 E0 A5 E1 3A+
33 20 24
34 0247 2710 03E8 0064 000A + coef DW 10000,1000,100,10,1
35 0001
36 ;----------------------------------------
37 0251 MAIN PROC
38 0251 E8 02BD CALL CLRSCR
39 0254 MAIN_LOOP:
40 ;сохранение регистров для выдачи
41 0254 E8 004D CALL SAVE_REG
42 0257 B4 09 MOV AH,09H
43 0259 BA 0237r MOV DX,OFFSET inp_str
44 025C CD 21 INT 21H
45 025E E8 0209 call Input_Near ;Ввод сегментной части адреса
46 0261 2E: 80 3E 0236r 01 cmp EXIT_FL,1
47 0267 74 2B je MAIN_EXIT
48 0269 2E: 89 1E 0234r MOV DUMP_seg,BX
49 026E B2 3A mov dl,':'
50 0270 E8 027E call PUTCH
51 0273 E8 01F4 call Input_Near ;Ввод смещения
52 0276 2E: 80 3E 0236r 01 cmp EXIT_FL,1
53 027C 74 16 je MAIN_EXIT
54 027E 2E: 89 1E 0232r MOV DUMP_sm,BX
55 ;вывод регистров
56 0283 E8 0047 CALL WRITE_REG
57 ;чтение области памяти для дампа
Turbo Assembler Version 3.1 17/05/14 11:46:28 Page 2
lab8.asm
58 0286 E8 015C CALL DUMP_IN
59 ;вывод дампа
60 0289 E8 0177 CALL DUMP_OUT
61 028C E8 026C CALL GETCH_NE
62 028F B9 0002 MOV CX,2
63 0292 E2 C0 LOOP MAIN_LOOP
64 0294 MAIN_EXIT:
65 0294 E8 027A CALL CLRSCR
66 0297 B4 09 MOV AH,09H
67 0299 BA 0113r MOV DX,OFFSET out_str
68 029C CD 21 INT 21H
69 029E E8 0255 CALL GETCH
70 02A1 E8 025C CALL QUIT
71 02A4 MAIN ENDP
72 ;-------------------------------------
73 ; Сохранение регистров
74 ;-------------------------------------
75 02A4 SAVE_REG PROC
76 02A4 2E: 89 2E 0222r MOV rBP,BP
77 02A9 2E: 89 3E 0224r MOV rDI,DI
78 02AE 2E: 89 36 0226r MOV rSI,SI
79 02B3 2E: 89 26 0228r MOV rSP,SP
80 02B8 2E: 8C 06 022Ar MOV rES,ES
81 02BD 2E: 8C 16 022Cr MOV rSS,SS
82 02C2 2E: 8C 1E 022Er MOV rDS,DS
83 02C7 2E: 8C 0E 0230r MOV rCS,CS
84 02CC C3 RET
85 02CD SAVE_REG ENDP
86 ;-------------------------------------
87 ; Вывод регистров
88 ;-------------------------------------
89 02CD WRITE_REG PROC
90 02CD E8 0236 CALL CLRF
91 02D0 B2 43 MOV DL,'C'
92 02D2 E8 021C CALL PUTCH
93 02D5 B2 53 MOV DL,'S'
94 02D7 E8 0217 CALL PUTCH
95 02DA B2 3D MOV DL,'='
96 02DC E8 0212 CALL PUTCH
97 02DF 2E: 8B 16 0230r MOV DX,rCS
98 02E4 E8 01DE CALL HEXW
99 02E7 B2 20 mov dl,' '
100 02E9 E8 0205 call PUTCH
101 02EC B2 44 MOV DL,'D'
102 02EE E8 0200 CALL PUTCH
103 02F1 B2 53 MOV DL,'S'
104 02F3 E8 01FB CALL PUTCH
105 02F6 B2 3D MOV DL,'='
106 02F8 E8 01F6 CALL PUTCH
107 02FB 2E: 8B 16 022Er MOV DX,rDS
108 0300 E8 01C2 CALL HEXW
109 0303 B2 20 mov dl,' '
110 0305 E8 01E9 call PUTCH
111 0308 B2 53 MOV DL,'S'
112 030A E8 01E4 CALL PUTCH
113 030D B2 53 MOV DL,'S'
114 030F E8 01DF CALL PUTCH
Turbo Assembler Version 3.1 17/05/14 11:46:28 Page 3
lab8.asm
115 0312 B2 3D MOV DL,'='
116 0314 E8 01DA CALL PUTCH
117 0317 2E: 8B 16 022Cr MOV DX,rSS
118 031C E8 01A6 CALL HEXW
119 031F B2 20 mov dl,' '
120 0321 E8 01CD call PUTCH
121 0324 B2 45 MOV DL,'E'
122 0326 E8 01C8 CALL PUTCH
123 0329 B2 53 MOV DL,'S'
124 032B E8 01C3 CALL PUTCH
125 032E B2 3D MOV DL,'='
126 0330 E8 01BE CALL PUTCH
127 0333 2E: 8B 16 022Ar MOV DX,rES
128 0338 E8 018A CALL HEXW
129 033B B2 20 mov dl,' '
130 033D E8 01B1 call PUTCH
131 0340 B2 53 MOV DL,'S'
132 0342 E8 01AC CALL PUTCH
133 0345 B2 50 MOV DL,'P'
134 0347 E8 01A7 CALL PUTCH
135 034A B2 3D MOV DL,'='
136 034C E8 01A2 CALL PUTCH
137 034F 2E: 8B 16 0228r MOV DX,rSP
138 0354 E8 016E CALL HEXW
139 0357 B2 20 mov dl,' '
140 0359 E8 0195 call PUTCH
141 035C B2 53 MOV DL,'S'
142 035E E8 0190 CALL PUTCH
143 0361 B2 49 MOV DL,'I'
144 0363 E8 018B CALL PUTCH
145 0366 B2 3D MOV DL,'='
146 0368 E8 0186 CALL PUTCH
147 036B 2E: 8B 16 0226r MOV DX,rSI
148 0370 E8 0152 CALL HEXW
149 0373 B2 20 mov dl,' '
150 0375 E8 0179 call PUTCH
151 0378 B2 44 MOV DL,'D'
152 037A E8 0174 CALL PUTCH
153 037D B2 49 MOV DL,'I'
154 037F E8 016F CALL PUTCH
155 0382 B2 3D MOV DL,'='
156 0384 E8 016A CALL PUTCH
157 0387 2E: 8B 16 0224r MOV DX,rDI
158 038C E8 0136 CALL HEXW
159 038F B2 20 mov dl,' '
160 0391 E8 015D call PUTCH
161 0394 B2 42 MOV DL,'B'
162 0396 E8 0158 CALL PUTCH
163 0399 B2 50 MOV DL,'P'
164 039B E8 0153 CALL PUTCH
165 039E B2 3D MOV DL,'='
166 03A0 E8 014E CALL PUTCH
167 03A3 2E: 8B 16 0222r MOV DX,rBP
168 03A8 E8 011A CALL HEXW
169 03AB E8 0158 CALL CLRF
170 03AE 2E: 8B 16 0234r MOV DX,DUMP_seg
171 03B3 E8 010F CALL HEXW
Turbo Assembler Version 3.1 17/05/14 11:46:28 Page 4
lab8.asm
172 03B6 B2 3A mov dl,':'
173 03B8 E8 0136 call PUTCH
174 03BB 2E: 8B 16 0232r MOV DX,DUMP_sm
175 03C0 E8 0102 CALL HEXW
176 03C3 B2 2D mov dl,'-'
177 03C5 E8 0129 call PUTCH
178 03C8 2E: 8B 16 0234r MOV DX,DUMP_seg
179 03CD E8 00F5 CALL HEXW
180 03D0 B2 3A mov dl,':'
181 03D2 E8 011C call PUTCH
182 03D5 2E: 8B 16 0232r MOV DX,DUMP_sm
183 03DA 81 C2 00F0 ADD DX,BUF_LEN
184 03DE E8 00E4 CALL HEXW
185 03E1 E8 0122 CALL CLRF
186 03E4 C3 RET
187 03E5 WRITE_REG ENDP
188 ;-------------------------------------
189 ; Ввод строки
190 ;-------------------------------------
191 03E5 DUMP_IN PROC
192 03E5 2E: A1 0234r MOV AX,DUMP_seg
193 03E9 50 PUSH AX
194 03EA 07 POP ES
195 03EB 2E: 8B 3E 0232r MOV DI,DUMP_sm
196 03F0 BE 0000 MOV SI,0
197 03F3 B9 00F0 MOV CX,BUF_LEN
198 03F6 DUMP_IN_LOOP:
199 03F6 26: 8A 05 MOV AL,BYTE PTR ES:[DI]
200 03F9 2E: 88 84 0132r MOV BUF[SI],AL ;Занесение символа в буфер
201 03FE 47 INC DI
202 03FF 46 INC SI
203 0400 E2 F4 LOOP DUMP_IN_LOOP
204 0402 C3 RET
205 0403 DUMP_IN ENDP
206 ;-------------------------------------
207 ; Вывод DUMP
208 ;-------------------------------------
209 0403 DUMP_OUT PROC
210 0403 B9 000F MOV CX,STRINGS
211 0406 BE 0000 MOV SI,0
212 0409 DUMP_OUT_LOOP:
213 0409 51 PUSH CX
214 040A E8 0004 CALL STR_OUT
215 040D 59 POP CX
216 040E E2 F9 LOOP DUMP_OUT_LOOP
217 0410 C3 RET
218 0411 DUMP_OUT ENDP
219 ;-------------------------------------
220 ; Вывод строки в DUMP
221 ;-------------------------------------
222 0411 STR_OUT PROC
223 ;Вывод адреса
224 0411 2E: 8B 16 0234r MOV DX,DUMP_seg
225 0416 E8 00AC CALL HEXW
226 0419 B2 3A MOV DL,':'
227 041B E8 00D3 CALL PUTCH
228 041E 2E: 8B 16 0232r MOV DX,DUMP_sm
Turbo Assembler Version 3.1 17/05/14 11:46:28 Page 5
lab8.asm
229 0423 03 D6 ADD DX,SI
230 0425 E8 009D CALL HEXW
231 0428 B2 3A MOV DL,':'
232 042A E8 00C4 CALL PUTCH
233 042D B2 20 MOV DL,' '
234 042F E8 00BF CALL PUTCH
235 ;Вывод байтов в шестнадцатиричном виде
236 0432 56 PUSH SI
237 0433 B9 0010 MOV CX,STR_LEN
238 0436 STR_OUT_LOOP:
239 0436 2E: 8A 94 0132r MOV DL,BUF[SI] ;Занесение текущего символа в DL
240 043B 46 INC SI
241 043C E8 00E3 CALL HEX ;Вывод символа в HEX
242 043F B2 20 MOV DL,' '
243 0441 E8 00AD CALL PUTCH ;Вывод пробела
244 0444 E2 F0 LOOP STR_OUT_LOOP
245 0446 B2 3A MOV DL,':'
246 0448 E8 00A6 CALL PUTCH
247 044B B2 20 MOV DL,' '
248 044D E8 00A1 CALL PUTCH
249 ;Вывод в виде символов
250 0450 5E POP SI
251 0451 B9 0010 MOV CX,STR_LEN
252 0454 STR_OUT_LOOP2:
253 0454 2E: 8A 94 0132r MOV DL,BUF[SI] ;Занесение текущего символа в DL
254 0459 46 INC SI
255 045A 80 FA 20 CMP DL,32 ;Код пробела
256 045D 73 02 JAE PRINT
257 045F B2 2A MOV DL,'*'
258 0461 PRINT:
259 0461 E8 008D CALL PUTCH ;Вывод пробела
260 0464 E2 EE LOOP STR_OUT_LOOP2
261 0466 E8 009D CALL CLRF
262 0469 C3 RET
263 046A STR_OUT ENDP
264 ;-------------------------------------
265 ; Перевод near-адреса в двоичное число
266 ;-------------------------------------
267 046A Input_Near PROC
268 046A BD 0000 mov bp,0 ;счетчик введенных символов
269 046D BB 0000 mov bx,0 ;число
270 0470 IN_LOOP:
271 0470 E8 0088 call GETCH_NE
272 0473 8A D0 mov dl,al
273 0475 EB 19 90 jmp CHECK
274
275 0478 SHIFT:
276 0478 E8 0076 call PUTCH
277 047B 58 pop ax
278 047C B4 00 mov ah,0
279 047E D1 E3 D1 E3 D1 E3 D1+ shl bx,4
280 E3
281 0486 03 D8 add bx,ax
282 0488 45 inc bp ;счетчик ввода
283 0489 83 FD 04 cmp bp,4
284 048C 74 36 je EXIT
285 048E EB E0 jmp IN_LOOP
Turbo Assembler Version 3.1 17/05/14 11:46:28 Page 6
lab8.asm
286 0490 CHECK:
287 0490 3C 2A cmp al,'*'
288 0492 75 09 jne NUMBER
289 0494 2E: C6 06 0236r 01 mov EXIT_FL,1
290 049A EB 28 90 jmp EXIT
291 049D NUMBER:
292 ;проверка цифр
293 049D 3C 30 cmp al,'0'
294 049F 72 09 jb BIG
295 04A1 3C 39 cmp al,'9'
296 04A3 77 05 ja BIG
297 04A5 2C 30 sub al,'0' ;AL-число
298 04A7 50 push ax
299 04A8 EB CE jmp SHIFT
300 04AA 3C 41 BIG: cmp al,'A'
301 04AC 72 09 jb SMAL
302 04AE 3C 46 cmp al,'F'
303 04B0 77 05 ja SMAL
304 04B2 2C 37 sub al,'A'-10
305 04B4 50 push ax
306 04B5 EB C1 jmp SHIFT
Характеристики
Тип файла документ
Документы такого типа открываются такими программами, как Microsoft Office Word на компьютерах Windows, Apple Pages на компьютерах Mac, Open Office - бесплатная альтернатива на различных платформах, в том числе Linux. Наиболее простым и современным решением будут Google документы, так как открываются онлайн без скачивания прямо в браузере на любой платформе. Существуют российские качественные аналоги, например от Яндекса.
Будьте внимательны на мобильных устройствах, так как там используются упрощённый функционал даже в официальном приложении от Microsoft, поэтому для просмотра скачивайте PDF-версию. А если нужно редактировать файл, то используйте оригинальный файл.
Файлы такого типа обычно разбиты на страницы, а текст может быть форматированным (жирный, курсив, выбор шрифта, таблицы и т.п.), а также в него можно добавлять изображения. Формат идеально подходит для рефератов, докладов и РПЗ курсовых проектов, которые необходимо распечатать. Кстати перед печатью также сохраняйте файл в PDF, так как принтер может начудить со шрифтами.