отчет asm 7 (1075966)
Текст из файла
Защищено: Гапанюк Ю. Е. "__"_____________2014 г. | Демонстрация: Гапанюк Ю. Е. "__"_____________2014 г. |
Отчет по лабораторной работе № 7 по курсу
Системное программирование
Ввод и вывод адреса
4
(количество листов)
Вариант № 9
ИСПОЛНИТЕЛЬ: | |
студент группы ИУ5-42 | _____________________ |
(подпись) | |
Зайков С.А. | "__"_____________2014 г. |
Москва, МГТУ - 2014
_____________________________________________________________________________________________
СОДЕРЖАНИЕ
1. Цель и задание работы 3
2. Блок-схема алгоритма программы 3
3. Листинг кода 4
4. Результаты работы программы 4
1 Цель и задание работы
Разработать и отладить программу на языке Ассемблер для ввода с клавиатуры четырехразрядного числа (короткого адреса NEAR) в шестнадцатеричном представлении (доступные шестнадцатеричные цифры – 0123456789АBCDEF). Введенное значение переводиться в машинное представление в виде слова (2 байта - DW) и выводится затем на экран в шестнадцатеричном представлении и десятичном формате (нужно выполнить программный перевод из одной системы счисления в другую).
2 Блок-схема алгоритма программы
3. Листинг кода
Turbo Assembler Version 3.1 27/04/14 20:47:37 Page 1
lab7.asm
1 0000 text SEGMENT 'CODE'
2 ASSUME CS:text
3 org 100h
4
5 0100 BEGIN:
6 0100 E9 014C JMP MAIN
7 ;----------------------------------------
8 0103 5A 61 79 6B 6F 76 20+ help DB 'Zaykov Sergey IU5-42 Variant 9','$'
9 53 65 72 67 65 79 20+
10 49 55 35 2D 34 32 20+
11 56 61 72 69 61 6E 74+
12 20 39 24
13 0122 0100*(00) buf DB 256 DUP(0)
14 0222 00 flag DB 0
15 0223 56 76 65 64 69 74 65+ enter_mesage DB 'Vvedite Chislo: ','$'
16 20 43 68 69 73 6C 6F+
17 3A 20 24
18 0234 2710 03E8 0064 000A + k DW 10000,1000,100,10,1
19 0001
20 023E 30 31 32 33 34 35 36+ str DB '0123456789ABCDEF','$'
21 37 38 39 41 42 43 44+
22 45 46 24
*Warning* lab7.asm(13) Reserved word used as symbol: STR
23 ;----------------------------------------
24
25 024F MAIN PROC
26 024F E8 00E9 CALL CLRSCR ;очистка экрана
27 0252 MAIN_LOOP: ;работа в цикле
28 0252 B4 09 MOV AH,09H ;вывод информационной строки
29 0254 BA 0223r MOV DX,OFFSET enter_mesage
30 0257 CD 21 INT 21H
31 ;ввод двухбайтового слова в 16-м виде
32 0259 E8 0034 call Adres ;Ввод адреса в ВX
33 025C 2E: 80 3E 0222r 01 cmp flag,1
34 0262 74 1C je MAIN_EXIT
35 0264 53 push BX
36 0265 B2 3D mov dl,'=' ;вывод знака =
37 0267 E8 00B1 call PUTCH
38 026A 8B D3 mov dx,bx ;вывод двухбайтового слова в 16-м виде
39 026C E8 007C call hexw
40 026F B2 20 mov dl,' ' ;вывод пробела
41 0271 E8 00A7 call PUTCH
42 0274 5B pop BX ;вывод двухбайтового слова в 10-м виде
43 0275 E8 0082 call HEX2DEC
44 0278 E8 00B5 call CLRF ;перевод строки
45 027B B9 0002 MOV CX,2
46 027E E2 D2 LOOP MAIN_LOOP
47 0280 MAIN_EXIT:
48 0280 B4 09 MOV AH,09H ;вывод информационной строки
49 0282 BA 0103r MOV DX,OFFSET help
50 0285 CD 21 INT 21H
51 0287 E8 0096 CALL GETCH
52 028A E8 00AE CALL CLRSCR;очистка экрана
53 028D E8 009A CALL QUIT ;выход
54 0290 MAIN ENDP
55
56 ;-------------------------------------
Turbo Assembler Version 3.1 27/04/14 20:47:37 Page 2
lab7.asm
57 ; Перевод адреса в двоичное число
58 ;-------------------------------------
59 0290 Adres PROC
60 0290 BD 0000 mov bp,0 ;счетчик введенных символов
61 0293 BB 0000 mov bx,0 ;число
62 0296 IN_LOOP:
63 ;ввод символа бех эха
64 0296 E8 008C call GETCH_NE
65 0299 8A D0 mov dl,al
66 029B EB 19 90 jmp CHECK
67
68 029E SHIFT:
69 ;если символ правильный, то он выводится
70 029E E8 007A call PUTCH
71
72 ;восстановление из стека введенной цифры
73 02A1 58 pop ax
74 ;занесение 0 в AH, в AL цифра
75 02A2 B4 00 mov ah,0
76 ;сдвиг предыдущего результата на 4 влево
77 02A4 D1 E3 shl bx,1
78 02A6 D1 E3 shl bx,1
79 02A8 D1 E3 shl bx,1
80 02AA D1 E3 shl bx,1
81 ;добавление введенной цифры к предыдущему +
82 результату
83 02AC 03 D8 add bx,ax
84
85 02AE 45 inc bp ;счетчик ввода
86 ;необходимо ввести 4 цифры
87 02AF 83 FD 04 cmp bp,4
88 02B2 74 36 je EXIT
89 02B4 EB E0 jmp IN_LOOP
90
91 02B6 CHECK:
92 02B6 3C 2A cmp al,'*' ;если введена не * то проверяются цифры +
93 и буквы
94 02B8 75 09 jne NUMBER ;иначе установка флага выхода из +
95 программы и возврат из процедуры
96 02BA 2E: C6 06 0222r 01 mov flag,1
97 02C0 EB 28 90 jmp EXIT
98
99 02C3 NUMBER: ;проверка цифр
100 ;если ascii-код введенного символа <'0' или '9'>
101 ;то проверка больших букв
102 02C3 3C 30 cmp al,'0'
103 02C5 72 09 jb BIG
104 02C7 3C 39 cmp al,'9'
105 02C9 77 05 ja BIG
106
107 ;иначе вычитание символа '0' из ascii-кода +
108 введенной цифры
109 ;(преобразование "буквы" в число)
110 02CB 2C 30 sub al,'0' ;AL-число
111 ;сохранение числа в стеке
112 02CD 50 push ax
113 ;переход на накопление результата в BX
Turbo Assembler Version 3.1 27/04/14 20:47:37 Page 3
lab7.asm
114 02CE EB CE jmp SHIFT
115
116 02D0 BIG:
117 ;если ascii-код введенного символа <'A' или >'F'
118 ;то проверка маленьких букв
119 02D0 3C 41 cmp al,'A'
120 02D2 72 09 jb SMALL
121 02D4 3C 46 cmp al,'F'
122 02D6 77 05 ja SMALL
123
124 ;преобразование букв в 16-е цифры
125 02D8 2C 37 sub al,'A'-10 ;'B'-'A'+10=11
126 ;сохранение числа в стеке
127 02DA 50 push ax
128 02DB EB C1 jmp SHIFT
129
130 02DD 3C 61 SMALL: cmp al,'a'
*Warning* lab7.asm(117) Reserved word used as symbol: SMALL
131 02DF 72 B5 jb IN_LOOP
132 02E1 3C 66 cmp al,'f'
133 02E3 77 B1 ja IN_LOOP
134 02E5 2C 57 sub al,'a'-10 ;'b'-'a'+10=11
135 02E7 50 push ax
136 02E8 EB B4 jmp SHIFT
137
138 02EA C3 EXIT: ret
139 02EB Adres ENDP
140
141 ;-------------------------------------
142 ; печать двухбайтового слова
143 ;-------------------------------------
144 02EB hexw PROC
145 02EB 52 push dx
146 02EC E8 0053 call hex
147 02EF 5A pop dx
148 02F0 8A F2 mov dh,dl
149 02F2 E8 004D call hex
150 02F5 B2 68 mov dl, 'h'
151 02F7 CD 21 int 21h
152 02F9 C3 ret
153 02FA hexw ENDP
154
155 ;--------------------------------------
156 ; Перевод в 10 систему счисления
157 ;--------------------------------------
158 02FA HEX2DEC PROC
159
160 02FA 8B C3 mov ax,bx ;число
161 02FC BF 0000 mov di,0 ;счетчик цикла
162
163 02FF HEX2DEC_LOOP:
164
165 02FF BA 0000 mov dx,0 ;Старший байт делимого
166 0302 2E: 8B 9D 0234r mov bx,k[di] ;делитель
167
168 ;деление
169 0307 F7 F3 div bx
Turbo Assembler Version 3.1 27/04/14 20:47:37 Page 4
lab7.asm
170 ;dx:ax / bx = ax(dx)
171 ;ax - частное, dx - остаток
172
173 ;остаток в стек
174 ;остаток считается новым числом
175 0309 52 push dx
176
177 ;вывод результата деления
178 030A 05 0030 add ax,'0'
179 030D 8A D0 mov dl,al
180 030F E8 0009 call PUTCH
181
182 ;в ax (младший байт делимого) помещается остаток
183 0312 58 pop ax
184
185 0313 47 inc di
186 0314 47 inc di
187
188 ;5 цифр - 10 байт
189 0315 83 FF 0A cmp di,10
190 0318 72 E5 jb HEX2DEC_LOOP
191
192 031A C3 RET
193 031B HEX2DEC ENDP
194
195 ;-------------------------
196 ;Процедура вывода символа
197 ;(символ в DL)
198 ;-------------------------
199 031B PUTCH PROC
200 031B B4 02 mov ah,2
201 031D CD 21 int 21h
202 031F C3 ret
203 0320 PUTCH ENDP
204 ;-------------------------
205
206 ;-------------------------
207 ;Процедура ввода символа
208 ;с клавиатуры для задержки
209 ;(в AL введенный символ)
210 ;-------------------------
211 0320 GETCH PROC
212 0320 B4 01 mov ah,1
213 0322 CD 21 int 21h
214 0324 C3 ret
215 0325 GETCH ENDP
216 ;-------------------------
217
218 ;-------------------------
219 ;Процедура ввода символа без эха
220 ;с клавиатуры для задержки
221 ;(в AL введенный символ)
222 ;-------------------------
223 0325 GETCH_NE PROC
224 0325 B4 08 mov ah,8
225 0327 CD 21 int 21h
226 0329 C3 ret
Turbo Assembler Version 3.1 27/04/14 20:47:37 Page 5
lab7.asm
227 032A GETCH_NE ENDP
228 ;-------------------------
229
230 ;-------------------------
231 ;Завершение процесса (программы)
232 ;-------------------------
233 032A QUIT PROC
234 032A B4 4C mov ah,4ch
235 032C B0 00 mov al,00h ;код возврата
236 032E CD 21 int 21h
237 0330 QUIT ENDP
238 ;-------------------------
239
240 ;-------------------------
241 ;Процедура переноса строки
242 ;-------------------------
243 0330 CLRF PROC
244 0330 B2 0A mov dl,10
245 0332 E8 FFE6 call PUTCH
246 0335 B2 0D mov dl,13
247 0337 E8 FFE1 call PUTCH
248 033A C3 ret
249 033B CLRF ENDP
250 ;-------------------------
251
252 ;----------------------------------------
253 ;Очистка экрана
254 ;----------------------------------------
255 033B CLRSCR PROC
256 033B B4 00 mov ah,00 ;Функция прокрутки окна вверх
257 033D B0 03 mov al,03 ;Число строк сдвига (0-все окно)
258 033F CD 10 int 10h
259 0341 C3 RET
260 0342 CLRSCR ENDP
261 ;----------------------------------------
262
263 ;----------------------------------------
264 ;Перевод буквы в шестнадцатеричное число
265 ;----------------------------------------
266 0342 HEX PROC
267 0342 1E push ds
268 0343 50 push ax
269 0344 53 push bx
270 0345 51 push cx
271 0346 0E push cs
272 0347 1F pop ds
273 0348 BB 023Er lea bx,str
274 034B 8A C6 mov al,dh
275 034D D0 E8 shr al,1
276 034F D0 E8 shr al,1
277 0351 D0 E8 shr al,1
278 0353 D0 E8 shr al,1
279 0355 D7 xlat
280 0356 52 push dx
281 0357 8A D0 mov dl,al
282 0359 B4 02 mov ah,02h
283 035B CD 21 int 21h
Turbo Assembler Version 3.1 27/04/14 20:47:37 Page 6
lab7.asm
284 035D 8A C6 mov al,dh
285 035F 24 0F and al,00001111b
286 0361 D7 xlat
287 0362 8A D0 mov dl,al
288 0364 B4 02 mov ah,02h
289 0366 CD 21 int 21h
290 0368 5A pop dx
291 0369 59 pop cx
292 036A 5B pop bx
293 036B 58 pop ax
294 036C 1F pop ds
295 036D C3 ret
296 036E HEX ENDP
297 ;----------------------------------------
298 036E text ENDS
299 END BEGIN
Характеристики
Тип файла документ
Документы такого типа открываются такими программами, как Microsoft Office Word на компьютерах Windows, Apple Pages на компьютерах Mac, Open Office - бесплатная альтернатива на различных платформах, в том числе Linux. Наиболее простым и современным решением будут Google документы, так как открываются онлайн без скачивания прямо в браузере на любой платформе. Существуют российские качественные аналоги, например от Яндекса.
Будьте внимательны на мобильных устройствах, так как там используются упрощённый функционал даже в официальном приложении от Microsoft, поэтому для просмотра скачивайте PDF-версию. А если нужно редактировать файл, то используйте оригинальный файл.
Файлы такого типа обычно разбиты на страницы, а текст может быть форматированным (жирный, курсив, выбор шрифта, таблицы и т.п.), а также в него можно добавлять изображения. Формат идеально подходит для рефератов, докладов и РПЗ курсовых проектов, которые необходимо распечатать. Кстати перед печатью также сохраняйте файл в PDF, так как принтер может начудить со шрифтами.