Привет ув.ачатовцы.Вопрос заключается в следующем. Нужно вывести строку напрямую в видеобуфер.Вот мой код: Code: .model tiny .code org 100h start: mov ax,3 ; установим видеорежим int 10h call video video proc mov ax,0b800h ;сегментный адрес видеобуфера mov es,ax mov ah,02h ; зеленый цвет mov di,1640 ; ??? вот тут параша какая-то,не могу понять как вычислить начальный адрес видеобуфера,а с нулем не выводит нихера mov cx,offset len ; в cx кол-во символов mov si,offset msg ;в si строку outsv: mov al,[si] ; берем байт из строки mov es:[di],ax ; 2 байта указывающие на буфер inc si ; следующий символ add di,2 ;след. loop outsv ; выводим cx-раз video endp .data msg db 'The matrix has you',0dh,0ah ; строка len equ $-msg ;получаем ее длину end start в общем ткните и разъясните что идет в di и где я тут еще накосячил...
di - это оффсет в сегменте по которому записываются данные в видеобуфер. вычисляется просто 2*(X + Y*80) X - позиция по горизонтали Y - по вертикали. Всё именно так, потому, что в строке 80 символов. По этому X + Y * 80 - даст нам номер символа. А так как для каждого символа используются 2 байта (цвет + код символа) то всё надо умножать на 2. причем заполнение идет по такому принципу: [символ1][цвет1][символ2][цвет2]...[символN][цветN] при записи mov [di], ax AH - цвет AL - код символа Ну и конечноже запускай прогу в DosBox'e потому что винда довольно хреново эмулирует режим доса (частенько теряет цвета и символы при работе напрямую с видеобуфером). т.е. показывает более менее норм, тока в полноэкранном режиме
еще пару уточнений: А если допустим выбрать какие либо координаты отличные от 0,достаточно ли будет вписать значение в di или надо проводить расчет в регистрах? upd: в di поместил 162-от начала координат,но в конце строки выводится два левых символа каких то,не пойму почему.Досбокс ведет себя странно-через раз по запуску проги,вылетает через 5 секунд.если 0 выводит,но также
мне кажется у тебя ошибка в mov cx,offset len ; в cx кол-во символов mov si,offset msg ;в si строку пройдись отладчиком по этим местам
ёлы-палы ,блин надо привыкать юзать дебаггер,в cx не понятно какого хрена заносилось 15,тогда как вычислять длину?считать символы-боян. з.ы. из под винды ваще не запустилось...вывалило процессор ntvdm....