.MODEL SMALL
.STACK 100
LOCALS
.CODE
beg:
mov AX,0B000h
mov ES,AX
cld
xor DI,DI
mov AH, 31h
mov AL,'*'
lodsb
mov AX, 0C01h
int 21h ;waiting for key press
mov AX,4C00H
int 21H
END beg
END
Прямой вывод одного символа
Это, как я понимаю, делается работой с видеопамятью напрямую. Поискал примеры - не получилось добиться результата =( Может кто-нибудь поделится готовой процедуркой, задачка вроде банальная... Буду весьма благодарен!
З.Ы. компилятор TASM
а в чем конкретно проблема? по адрессу b800h:2*(x*80+y) мувиш слово в формате символ_атрибут.
Да вроде все так делаю, а символ не показывается! Вот полностью исходник:
и еще если делаеш из под cmd. то символ может и не отобразится(хз почему)... в таком случае прогони прост очерез дебагер...
З.Ы. Насчет lodsw да, конечно слово надо грузить, не заметил... Но все равно символа не видно(
З.Ы.Ы. В TD тоже кстати невидно!
З.Ы. кстати, я использовал 0xb8000
Попробовал b8000, все равно нету символа
никакой не lodsw, он грузит елемент из адресса DS:SI в AX
а вот stosw из AX в ES:DI
Если прога из-под форточек запускается, надо сначала видеорежим текстовый поставить, а то не под всеми будет работать. Видимо твои как раз входят в эту группу.
Код:
mov ax, 0003h
int 10h
int 10h
Заработало! Vov4ick спасибо за наводку!
заработало с lodsw ?
Lone Wolf и вам спасибо! =)
Код:
b800h:2*(x*80+y)
а по адресу
Код:
b800h:2*(x+y*80)
Это почему? ты хочеш сказать, что адресс позиции 1ая строка 0ой столюец(адрессация с нуля) будет b800:0002?
Да. Видеопамять развёрнута по строкам, а не по столбцам. Как в текстовом, так и в графическом режиме. Воэтому offset = x + y*width
Код:
.model tiny
.code
org 100h
start:
mov ax,0003
int 10h
mov ax,0B800h
mov es,ax
mov di,2*(5*80+0)
mov byte ptr es:[di],30h
mov byte ptr es:[di+1],1eh
ret
end start
.code
org 100h
start:
mov ax,0003
int 10h
mov ax,0B800h
mov es,ax
mov di,2*(5*80+0)
mov byte ptr es:[di],30h
mov byte ptr es:[di+1],1eh
ret
end start
если я правильно понял, то этот код должен вывести символ 0 в нудевой строке в 5ом столбце?
в 0 столбце в 5 строке =)
x -строка y - столбец. формула: 2*(x*80+y)
что не так?
Всё верно. Просто строки со столбцами перепутали. Этот вариант правильный.
Цитата:
х - строка
у - столбец
у - столбец
А можно
Цитата:
х - ось абсцисс
у - ось ординат
как в графическом режиме
у - ось ординат
как в графическом режиме
Я мыслил именно вторым вариантом, поэтому переставил
угу я уже понял)) а я мыслил как в матрице [x,y]