Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Прямой вывод одного символа

12K
14 декабря 2007 года
Dipish
33 / / 08.08.2006
Здравствуйте! Не очень силен в ассемблере, понадобилась такая фича: вывести символ на экран в заданных координатах x y.
Это, как я понимаю, делается работой с видеопамятью напрямую. Поискал примеры - не получилось добиться результата =( Может кто-нибудь поделится готовой процедуркой, задачка вроде банальная... Буду весьма благодарен!

З.Ы. компилятор TASM
274
14 декабря 2007 года
Lone Wolf
1.3K / / 26.11.2006
а в чем конкретно проблема? по адрессу b800h:2*(x*80+y) мувиш слово в формате символ_атрибут.
12K
14 декабря 2007 года
Dipish
33 / / 08.08.2006
Да вроде все так делаю, а символ не показывается! Вот полностью исходник:
Код:
.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
274
14 декабря 2007 года
Lone Wolf
1.3K / / 26.11.2006
lodsb - грузит байт, а не слово. используй lodsw
и еще если делаеш из под cmd. то символ может и не отобразится(хз почему)... в таком случае прогони прост очерез дебагер...
12K
14 декабря 2007 года
Dipish
33 / / 08.08.2006
Хм через cmd делаю. А можно ли как-нибудь сделать чтоб было видно из-под cmd?

З.Ы. Насчет lodsw да, конечно слово надо грузить, не заметил... Но все равно символа не видно(

З.Ы.Ы. В TD тоже кстати невидно!
245
15 декабря 2007 года
~ArchimeD~
1.4K / / 24.07.2006
эээ, а адрес видеопамяти в исходнике правильно написан то?

З.Ы. кстати, я использовал 0xb8000
12K
15 декабря 2007 года
Dipish
33 / / 08.08.2006
~ArchimeD~ я целиком исходник выше запостил, от начала до конца.
Попробовал b8000, все равно нету символа
274
15 декабря 2007 года
Lone Wolf
1.3K / / 26.11.2006
тю. я и не заметил действительно b800h, и не заметил кщк одной ошибки
никакой не lodsw, он грузит елемент из адресса DS:SI в AX
а вот stosw из AX в ES:DI
1.6K
15 декабря 2007 года
Vov4ick
476 / / 01.02.2007
Если прога из-под форточек запускается, надо сначала видеорежим текстовый поставить, а то не под всеми будет работать. Видимо твои как раз входят в эту группу.
12K
16 декабря 2007 года
Dipish
33 / / 08.08.2006
Ура! установил текстовый режим сперва:
 
Код:
mov ax, 0003h
int 10h


Заработало! Vov4ick спасибо за наводку!
274
16 декабря 2007 года
Lone Wolf
1.3K / / 26.11.2006
заработало с lodsw ?
12K
16 декабря 2007 года
Dipish
33 / / 08.08.2006
Нет, stosw конечно. "STOre to String Word" Буквально неделю назад возился с этими цепочечными командами и уже подзабыть успел %)
Lone Wolf и вам спасибо! =)
12K
16 декабря 2007 года
Dipish
33 / / 08.08.2006
Только формула не совсем верна. Чтобы нарисовать точку с координатами Х и У, надо записать слово не по адресу
 
Код:
b800h:2*(x*80+y)

а по адресу
 
Код:
b800h:2*(x+y*80)
274
16 декабря 2007 года
Lone Wolf
1.3K / / 26.11.2006
Это почему? ты хочеш сказать, что адресс позиции 1ая строка 0ой столюец(адрессация с нуля) будет b800:0002?
1.6K
16 декабря 2007 года
Vov4ick
476 / / 01.02.2007
Да. Видеопамять развёрнута по строкам, а не по столбцам. Как в текстовом, так и в графическом режиме. Воэтому offset = x + y*width
274
16 декабря 2007 года
Lone Wolf
1.3K / / 26.11.2006
странно, очень странно..
Код:
.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

если я правильно понял, то этот код должен вывести символ 0 в нудевой строке в 5ом столбце?
12K
16 декабря 2007 года
Dipish
33 / / 08.08.2006
в 0 столбце в 5 строке =)
274
16 декабря 2007 года
Lone Wolf
1.3K / / 26.11.2006
ну и??
x -строка y - столбец. формула: 2*(x*80+y)
что не так?
1.6K
16 декабря 2007 года
Vov4ick
476 / / 01.02.2007
Всё верно. Просто строки со столбцами перепутали. Этот вариант правильный.
12K
17 декабря 2007 года
Dipish
33 / / 08.08.2006
Ну кому как удобней. Можно
Цитата:
х - строка
у - столбец


А можно

Цитата:
х - ось абсцисс
у - ось ординат
как в графическом режиме


Я мыслил именно вторым вариантом, поэтому переставил

274
17 декабря 2007 года
Lone Wolf
1.3K / / 26.11.2006
угу я уже понял)) а я мыслил как в матрице [x,y]
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог