листанг (1071429)
Текст из файла
16
Московский государственный технический университет им. Н.Э.Баумана
Утверждаю: | |
Большаков С.А. | "__"_____________200 г. |
Курсовая работа по системному программированию “Программа для вывода содержимого регистров МП”
исходные тексты
(вид документа)
писчая бумага
(вид носителя)
13
(количество листов)
ИСПОЛНИТЕЛЬ: | |
студент группы ИУ5-51 | _____________________ |
Земляк А.А. | "__"_____________200 г. |
Москва - 2000
________________________________________________________________
Содержание:
-
Листинг программы………………………………………………3
-
Листинг программы:
Turbo Assembler Version 3.1 24/12/00 23:09:51 Page 1
fin.ASM
1 ;Преамбула
2 0000 text segment 'code'
3 assume CS:text,DS:text
4 org 100h
5 =0016 alt_q equ 16h
6
7 0100 myproc:
8 0100 E9 0358 jmp init
9
10 ;эта секция относится к данным резидентной секции программы
11
12 0103 41 48 41 4C 52 regstring db "AHALR"
13
14 0108 41 58 3A 20 20 20 20+ regs_s1 db "AX: BX: CX: DX: "
15 20 20 42 58 3A 20 20+
16 20 20 20 20 43 58 3A+
17 20 20 20 20 20 20 44+
18 58 3A 20 20 20 20
19 =0022 regs_s1_len = $-regs_s1
20 012A 53 49 3A 20 20 20 20+ regs_s2 db "SI: DI: SP: BP: "
21 20 20 44 49 3A 20 20+
22 20 20 20 20 53 50 3A+
23 20 20 20 20 20 20 42+
24 50 3A 20 20 20 20
25 =0022 regs_s2_len = $-regs_s2
26 014C 44 53 3A 20 20 20 20+ regs_s3 db "DS: ES: SS: CS: "
27 20 20 45 53 3A 20 20+
28 20 20 20 20 53 53 3A+
29 20 20 20 20 20 20 43+
30 53 3A 20 20 20 20
31 =0022 regs_s3_len = $-regs_s3
32
33 016E 0000 my_ax dw 0
34 0170 0000 my_bx dw 0
35 0172 0000 my_cx dw 0
36 0174 0000 my_dx dw 0
37 0176 0000 my_si dw 0
38 0178 0000 my_di dw 0
39 017A 0000 my_sp dw 0
40 017C 0000 my_bp dw 0
41 017E 0000 my_ds dw 0
42 0180 0000 my_cs dw 0
43 0182 0000 my_es dw 0
44 0184 0000 my_ss dw 0
45
46 0186 00000000 old_09h dd 0
47 018A 00000000 old_2fh dd 0
48 018E 90 20 A5 20 A7 20 A8+ mesr db 'Р е з и д е н т в ы г р у ж е н , '
49 20 A4 20 A5 20 AD 20+
50 E2 20 20 20 A2 20 EB+
51 20 A3 20 E0 20 E3 20+
52 A6 20 A5 20 AD 20 2C+
53 20 20 20
54 01B4 AF 20 E0 20 AE 20 A3+ db 'п р о г р а м м а у с п е ш н о з а в е р ш е н а '
55 20 E0 20 A0 20 AC 20+
56 AC 20 A0 20 20 20 E3+
57 20 E1 20 AF 20 A5 20+
Turbo Assembler Version 3.1 24/12/00 23:09:51 Page 2
fin.ASM
58 E8 20 AD 20 AE 20 20+
59 20 A7 20 A0 20 A2 20+
60 A5 20 E0 20 E8 20 A5+
61 20 AD 20 A0 20
62 =005C mesrlen=$-mesr
63
64 ;резидентная секция программы
65 01EA FA new_09h:cli
66 01EB 9C pushf
67
68 ;вызов системного обработчика прерывания от кл.
69 01EC 2E: FF 1E 0186r call CS:old_09h
70 ;сохраняем регистры в стеке и в пеpеменных
71 01F1 2E: 89 26 017Ar mov cs:my_sp,sp
72
73 01F6 50 push ax
74 01F7 53 push bx
75 01F8 51 push cx
76 01F9 52 push dx
77 01FA 55 push bp
78 01FB 1E push ds
79 01FC 06 push es
80 01FD 57 push di
81 01FE 56 push si
82
83 01FF 2E: 8C 16 0184r mov cs:my_ss,ss
84 0204 2E: A3 016Er mov cs:my_ax,ax
85 0208 2E: 89 1E 0170r mov cs:my_bx,bx
86 020D 2E: 89 0E 0172r mov cs:my_cx,cx
87 0212 2E: 89 16 0174r mov cs:my_dx,dx
88 0217 2E: 89 2E 017Cr mov cs:my_bp,bp
89 021C 2E: 8C 1E 017Er mov cs:my_ds,ds
90 0221 2E: 8C 06 0182r mov cs:my_es,es
91 0226 2E: 89 3E 0178r mov cs:my_di,di
92 022B 2E: 89 36 0176r mov cs:my_si,si
93
94 0230 8C C8 mov ax, cs ;настpаиваем ds
95 0232 8E D8 mov ds, ax
96
97 0234 2E: 8B 36 017Ar mov si,cs:my_sp
98 0239 16 push ss
99 023A 07 pop es
100 023B 26: 8B 44 02 mov ax,es:[si+2]
101 023F 2E: A3 0180r mov cs:my_cs,ax
102 0243 2E: 83 06 017Ar 06 add cs:my_sp,6
103
104 ;настраиваем ES на системную область данных
105 0249 B8 0040 mov AX,40h
106 024C 8E C0 mov ES,AX
107 ;получаем первый необработанный скен код клавиатуры
108 024E 26: 8B 1E 001A mov BX,ES:1ah
109 0253 26: 8B 07 mov AX,ES:BX
110 ;пpовеpка на клавишу вызова (F12)
111 0256 3D 8600 cmp AX,8600h
112 0259 74 1B je print_regs1
113 ;проверка на то, что этот скен код - код выгрузки
114 025B 80 FC 16 cmp AH,alt_q
Turbo Assembler Version 3.1 24/12/00 23:09:51 Page 3
fin.ASM
115 025E 75 0B jne not_u
116 0260 26: F6 06 0017 04 test byte ptr ES:17h,00000100b
117 0266 74 03 jz not_u
118 0268 EB 0F 90 jmp altq
119 026B not_u:
120 026B home:
121 ;выход из обработчика прерываний и восстановление используемых регистров
122 026B 5E pop si
123 026C 5F pop di
124 026D 07 pop es
125 026E 1F pop ds
126 026F 5D pop bp
127 0270 5A pop dx
128 0271 59 pop cx
129 0272 5B pop bx
130 0273 58 pop ax
131 0274 endi:
132 0274 FB sti
133 0275 CF iret
134 ;--------------------------------------------------------------------
135 0276 print_regs1:
136 0276 E9 008F jmp print_regs
137 ;---------------------------------------------------------------------
138 0279 altq:
139 ;Если нажата клавиша выгрузки
140 ; настроим ES на системную область и проверим, наш ли обработчик загружен
141 ; последним, если нет, то на выход из прерывания
142 0279 B8 0000 mov AX,0
143 027C 8E C0 mov ES,AX
144 027E 8C C8 mov AX,CS
145 0280 26: 3B 06 0026 cmp AX,word ptr ES:26h
146 0285 75 E4 jne home
147
148 ;восстановим старые вектора прерываний
149 0287 A1 0186r mov AX,word ptr old_09h
150 028A 26: A3 0024 mov word ptr ES:24h,AX
151 028E A1 0188r mov AX,word ptr old_09h+2
152 0291 26: A3 0026 mov word ptr ES:26h,AX
153
154 0295 A1 018Ar mov AX,word ptr old_2fh
155 0298 26: A3 00BC mov word ptr ES:0bch,AX
156 029C A1 018Cr mov AX,word ptr old_2fh+2
157 029F 26: A3 00BE mov word ptr ES:0beh,AX
158
159 ;уберем символ выгрузки из кольцевого буфера клавиатуры
160 02A3 BB 001A mov BX,1ah
161 02A6 B8 0040 mov AX,40h
162 02A9 8E C0 mov ES,AX
163 02AB queue_cont:
164 02AB 26: 8B 07 mov AX,word ptr ES:BX
165 02AE 48 dec AX
166 02AF 48 dec AX
167 02B0 26: 89 07 mov ES:BX,AX
168 02B3 BB 001C mov BX,1ch
169 02B6 26: 8B 07 mov AX,word ptr ES:BX
170 02B9 48 dec AX
171 02BA 48 dec AX
Turbo Assembler Version 3.1 24/12/00 23:09:51 Page 4
fin.ASM
172 02BB 48 dec AX
173 02BC 48 dec AX
174 02BD 26: 89 07 mov ES:BX,AX
175
176 02C0 queue_end:
177 ;выведем сообщение о выгрузке программы на экран
178 02C0 B8 B800 mov AX,0b800h
179 02C3 8E C0 mov ES,AX
180 02C5 B4 1E mov AH,1Eh
181 02C7 B9 005C mov CX,mesrlen
182 02CA BB 0000 mov BX,0
183 02CD l:
184 02CD 8A 87 018Er mov AL,mesr[BX]
185 02D1 26: 88 87 0640 mov byte ptr ES:1600[BX],AL
186 02D6 43 inc BX
187 02D7 E2 F4 loop l
188
189
190 ; здесь осуществляется выгрузка
191 02D9 8C C8 mov AX,CS
192 02DB 48 dec AX
193 02DC 8E D8 mov DS,AX
194 02DE BB 0001 mov BX,1
195 02E1 C7 07 0000 mov word ptr DS:BX,word ptr 0
196
197 02E5 8C C8 mov AX,CS
198 02E7 8E D8 mov DS,AX
199
200 02E9 BB 002C mov BX,002ch
201 02EC 8B 07 mov AX,word ptr DS:BX
202 02EE 48 dec AX
203
204 02EF 8E D8 mov DS,AX
205 02F1 BB 0001 mov BX,1
206 02F4 C7 07 0000 mov word ptr DS:BX,word ptr 0
207 02F8 E9 FF70 jmp home
208
209 ;наш обработчик функции FF прерывания 2F
210 02FB new_2fh proc
211 ;обработчик просто заносит в AL значение 0ffh
212 02FB 3D C000 cmp AX,0c000h
213 02FE 75 03 jne not_my
214 0300 B0 FF mov AL,0ffh
215 0302 CF iret
216 0303 not_my:
217 0303 2E: FF 2E 018Ar jmp CS:old_2fh
218 0308 new_2fh endp
219
220 ;конец обработчика прерывания
221 ;----------------------------------------------------------------------------
222 ;--- Вывод значений pегистpов ---
223 ;-----------------------------------
224 0308 print_regs:
225 ;- печать стpок с пустыми местами для значений pегистpов
226 0308 0E push cs
227 0309 1F pop ds
228
Turbo Assembler Version 3.1 24/12/00 23:09:51 Page 5
fin.ASM
229 030A B6 00 mov dh, 0
230 030C B2 00 mov dl, 0
231 030E BD 0108r mov bp, offset regs_s1
232 0311 B9 0022 mov cx, regs_s1_len
233 0314 E8 0136 call printstr
234
235 0317 B6 01 mov dh, 1
236 0319 B2 00 mov dl, 0
237 031B BD 012Ar mov bp, offset regs_s2
238 031E B9 0022 mov cx, regs_s2_len
239 0321 E8 0129 call printstr
240
241 0324 B6 02 mov dh, 2
242 0326 B2 00 mov dl, 0
243 0328 BD 014Cr mov bp, offset regs_s3
244 032B B9 0022 mov cx, regs_s3_len
245 032E E8 011C call printstr
246 ;-------
247
248 ;---
249 0331 8B 1E 016Er mov bx,my_ax ;печать AX
250 0335 E8 00EC call encodeascii
251 0338 B6 00 mov dh, 0
252 033A B2 03 mov dl, 3
253 033C BD 0103r mov bp, offset regstring
254 033F B9 0004 mov cx, 4
255 0342 E8 0108 call printstr
256 ;---
257
258 ;---
259 0345 8B 1E 0170r mov bx, my_bx ;печать BX
260 0349 E8 00D8 call encodeascii
261 034C B6 00 mov dh, 0
262 034E B2 0C mov dl, 12
263 0350 BD 0103r mov bp, offset regstring
264 0353 B9 0004 mov cx, 4
265 0356 E8 00F4 call printstr
266 ;---
267
268 ;---
269 0359 8B 1E 0172r mov bx, my_cx ;печать CX
270 035D E8 00C4 call encodeascii
271 0360 B6 00 mov dh, 0
272 0362 B2 15 mov dl, 21
273 0364 BD 0103r mov bp, offset regstring
274 0367 B9 0004 mov cx, 4
275 036A E8 00E0 call printstr
276 ;---
277
278 ;---
279 036D 8B 1E 0174r mov bx, my_dx ;печать DX
280 0371 E8 00B0 call encodeascii
281 0374 B6 00 mov dh, 0
282 0376 B2 1E mov dl, 30
283 0378 BD 0103r mov bp, offset regstring
284 037B B9 0004 mov cx, 4
285 037E E8 00CC call printstr
Turbo Assembler Version 3.1 24/12/00 23:09:51 Page 6
fin.ASM
286 ;---
287
288 ;---
289 0381 8B 1E 0176r mov bx, my_si ;печать si
290 0385 E8 009C call encodeascii
291 0388 B6 01 mov dh, 1
292 038A B2 03 mov dl, 3
293 038C BD 0103r mov bp, offset regstring
294 038F B9 0004 mov cx, 4
295 0392 E8 00B8 call printstr
296 ;---
297
298 ;---
299 0395 8B 1E 0178r mov bx, my_di ;печать di
300 0399 E8 0088 call encodeascii
301 039C B6 01 mov dh, 1
302 039E B2 0C mov dl, 12
303 03A0 BD 0103r mov bp, offset regstring
304 03A3 B9 0004 mov cx, 4
305 03A6 E8 00A4 call printstr
306 ;---
307
308 ;---
309 03A9 8B 1E 017Ar mov bx, my_sp ;печать sp
310 03AD E8 0074 call encodeascii
311 03B0 B6 01 mov dh, 1
312 03B2 B2 15 mov dl, 21
313 03B4 BD 0103r mov bp, offset regstring
314 03B7 B9 0004 mov cx, 4
315 03BA E8 0090 call printstr
316 ;---
317
Характеристики
Тип файла документ
Документы такого типа открываются такими программами, как Microsoft Office Word на компьютерах Windows, Apple Pages на компьютерах Mac, Open Office - бесплатная альтернатива на различных платформах, в том числе Linux. Наиболее простым и современным решением будут Google документы, так как открываются онлайн без скачивания прямо в браузере на любой платформе. Существуют российские качественные аналоги, например от Яндекса.
Будьте внимательны на мобильных устройствах, так как там используются упрощённый функционал даже в официальном приложении от Microsoft, поэтому для просмотра скачивайте PDF-версию. А если нужно редактировать файл, то используйте оригинальный файл.
Файлы такого типа обычно разбиты на страницы, а текст может быть форматированным (жирный, курсив, выбор шрифта, таблицы и т.п.), а также в него можно добавлять изображения. Формат идеально подходит для рефератов, докладов и РПЗ курсовых проектов, которые необходимо распечатать. Кстати перед печатью также сохраняйте файл в PDF, так как принтер может начудить со шрифтами.