Программа делает то что вы ей приказали а не то что бы ВАМ хотелось бы. МЕРФИ --------------------- RTFM - Read the fucking manual --------------------- http://www.livejournal.com/users/lonley_raven/
; ;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;; Средств ДОС;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; ;;;;;;; Функция ДОС #9;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; ;; ;; AH = 09 ;; DS:DX = адрес строки, оканчивающейся знаком '$'. ;; Вывод символов на устройство STDOUT, по умлч. - дисплей. ;; Управляющие коды распознаются. При нажатии Ctrl+Break ;; вызывается INT23h ;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; ;; ;
mov ah,9 ; Функция ДОС - Вывод строки lea dx,DOSString ; DS:DX - дрес строки, оканчивающейся знаком '$' int 21h mov cx,DOSStrLength dec cx ; Уменьшаем длину, чтобы исключить вывод '$' push cx ; Сохраняем длину строки push dx ; и смещение, оно нам еще пригодится mov si,dx ; DS:SI - дрес строки (для lodsb)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Несколько другая реализация ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; AH = 02 ;; DL = код символа ;; Вывод символа на устройство STDOUT, по умлч. - дисплей. ;; Управляющие коды распознаются. При нажатии Ctrl+Break ;; вызывается INT23h ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;
mov ah,2 DOSOutput: lodsb mov dl,al int 21h loop DOSOutput
;;;;;;;;;;;;;;; И еще одна ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; AL = код символа ;; INT 29h ;; Так называемая - НЕДОКУМЕНТИРОВАННАЯ ФУНКЦИЯ ДОС ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; pop si ; Восстанавливаем из стека pop cx ; длину строки и смещение DOSUnDocOutput: lodsb int 29h loop DOSUnDocOutput
; ;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;; Средства BIOS;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; ;;;;;;; Функция BIOS #13;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; AH = 13h ;; AL = режим вывода (см. установки отдельных битов ниже) ;; = 0 - в строке только символы, атрибут в BL, курсор не сдвигается ;; = 1 - в строке только символы, атрибут в BL, курсор сдвигается ;; = 2 - строка содержит символы и атрибуты, курсор не сдвигается ;; = 3 - строка содержит символы и атрибуты, курсор сдвигается ;; BH = номер видеостраницы ;; BL = атрибут, если режим равен 0 или 1 ;; CX = длина строки (исключая атрибуты) ;; DH = координата по вертикали ;; DL = координата по горизонтали ;; ES:BP = адрес строки ;; ;; ;; Значения отдельных битов в AL: ;; ;; │7│6│5│4│3│2│1│0│ AL ;; │ │ │ │ │ │ │ └──── 0=не сдвигать курсор, 1=сдвигать курсор ;; │ │ │ │ │ │ └───── 0=BL имеет атрибут, 1=атрибуты в строке ;; └─┴─┴─┴─┴─┴────── не используется ;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;
mov ax,1301h mov bx,001Fh mov cx,BIOSStrLength1 mov dx,1000h lea bp,BIOSString1 int 10h mov al,3 mov cx,BIOSStrLength2 mov dx,1100h lea bp,BIOSString2 int 10h mov ax,4C00h int 21h
DOSString DB 'Строка, выведенная средствами ДОС',13,10,'$' DOSStrLength DW $-DOSString BIOSString1 DB 'Строка, выведенная средствами BIOS',13,10 BIOSStrLength1 DW $-BIOSString1 BIOSString2 DB 'В',1Fh,'т',7,'о',1Fh,'р',8,'а',9,'я',10,' ',7,'с',11,'т',12,'р' DB 7,'о',7,'к',7,'а',1Eh,' ',1Eh,'о',1Fh,'т',7,' ',7,'B',2,'I',3,'O',4,'S',5 BIOSStrLength2 DW 22
END start
--------------------
Программа делает то что вы ей приказали а не то что бы ВАМ хотелось бы. МЕРФИ --------------------- RTFM - Read the fucking manual --------------------- http://www.livejournal.com/users/lonley_raven/