Программирование на Ассемблере под DOS


Задача 4.


Следующая процедура ну вааще элементарна: ;-[WRITE_CHAR, V1]--------------------------------------- ;Печатает символ и переводит курсор на позицию вправо ;На входе: DL - код символа. ;На выходе: нихрена ;Прерывания: INT 10h, AH=09h ;Процедуры: CURSOR_RIGHT ;-------------------------------------------------------- WRITE_CHAR proc push AX push BX push CX mov AH,9 xor BH,BH mov BL,00000111b mov CX,1 mov AL,DL int 10h call CURSOR_RIGHT pop CX pop BX pop AX ret WRITE_CHAR endp

  Она символ на монитор выводит. Через 9-ю функцию 10-го прерывания. А потом (после вывода) курсор на позицию вправо перемещает. Догадайтесь сами, "путем вызова" какой процедуры... Ага, правильно :)), CURSOR_RIGHT.
  Посмотрите на описание этого прерывания. Код символа должен быть в AL. А у нас в комментариях он в DL прописан. А перед INT 10h mov AL,DL нездоровый стоит. Нахрена он тут?? И правильно!! Этот mov можно удалить, и передавать значение через AL. Но я тварь вредная. Привык я, понимаете-ли, через DX передавать... привычка - сила страшная!! Лень с ней бороться... Лень, а поэтому и не буду... Кто-то в подобном мове может и более глубокий смысл найдет - наверняка найдет!! В общем - ищите сами. На блюдечке с голубой каемочкой вам это не преподнесу :)). Вредный.
  mov BL,00000111b (не 07h) написано специально. Это чтоб вы посмотрели, как кодируется атрибут (фон, цвет) энтого символа. В одном из предыдущих номеров даже табличка есть, из справочника содранная...

 




Начало  Назад  Вперед



Книжный магазин