отчет asm 7 (Готовая лаба №7)

2018-01-09СтудИзба

Описание файла

Файл "отчет asm 7" внутри архива находится в папке "Готовая лаба №7". Документ из архива "Готовая лаба №7", который расположен в категории "". Всё это находится в предмете "системное программирование" из 4 семестр, которые можно найти в файловом архиве МГТУ им. Н.Э.Баумана. Не смотря на прямую связь этого архива с МГТУ им. Н.Э.Баумана, его также можно найти и в других разделах. Архив можно найти в разделе "лабораторные работы", в предмете "системное программирование" в общих файлах.

Онлайн просмотр документа "отчет asm 7"

Текст из документа "отчет asm 7"

Защищено:

Гапанюк Ю. Е.

"__"_____________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

Свежие статьи
Популярно сейчас
Как Вы думаете, сколько людей до Вас делали точно такое же задание? 99% студентов выполняют точно такие же задания, как и их предшественники год назад. Найдите нужный учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
5173
Авторов
на СтудИзбе
437
Средний доход
с одного платного файла
Обучение Подробнее