Форум программистов, компьютерный форум, киберфорум
Наши страницы
Assembler, MASM, TASM
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.63/8: Рейтинг темы: голосов - 8, средняя оценка - 4.63
rapackivi
0 / 0 / 0
Регистрация: 11.04.2011
Сообщений: 9
1

работа с видеобуфером напрямую

06.01.2012, 20:58. Просмотров 1536. Ответов 9
Метки нет (Все метки)

Доброго времени суток!
Столкнулся с проблемой - взял пример из книги Марек "Ассемблер на примерах"
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
ORG 100h          ; directive required for a COM program.
pushad            ; все пушим
MOV AX, 0B800h    ; в топор - адрес видеобуфера
MOV es, AX        ; еs - установлен на видебуфер
MOV CL, 'A'       ; ставим букву, которую хотим видеть
MOV CH, 00000111b ; ставим стиль
xor si, si    ; si=0
MOV [es:si], CX   ; получаем в буфер букву А
;--------------
;цикл для вывода следующих букв
repeat:
inc cl      ; следующая буква
add si,2    ;в буфер пишем через байт
mov [es:si],cx  ;получение след. буквы в видеобуфер
cmp cl,'z'  ; выводим до буквы z
jnz repeat
popad
RET               ; returns to operating system.
В эмуляторе типа EMU8086 все очень красиво получается,
а вот компилирую nasm-ом - под виндой но в эмуляции DOS - и результат - белый квадратик в верхнем
левом углу экрана.
Подозреваю, что дело, блин в какой-нибудь страничной системе видеобуфера, неучтенной автором книги - но если честно, не сильно еще
врубаюсь в железные дела. Заранее спасибо от начинающего)
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.01.2012, 20:58
Ответы с готовыми решениями:

Работа с видеобуфером
Вывести в левы верхний угол экрана свою фамилию. все буквы должны быть попарно различны по цвету....

Работа с видеобуфером (вывод строки снизу вверх на экран)
эта программа выводит на экран строку снизу ввех, если можете прокомментируйте пожалуйста какждую...

Работа с видеопамятью напрямую
Есть ли какой-нибудь способ управлять мерцанием символа, не устанавливая соответствующий бит в...

Turbo c++ работа с видеобуфером
люди помогите доделать программу Задание: Открыть содержимое файла и вывести его на экран, при...

Работа с видеопамятью напрямую
Нашел кусок кода для работы с видеопамятью напрямую #include <conio.h> #include <dos.h> //...

9
Charles Kludge
Клюг
7647 / 3162 / 383
Регистрация: 03.05.2011
Сообщений: 8,382
06.01.2012, 21:29 2
между popad и RET вставьте
Assembler
1
2
mov ah,0
int 16h
0
rapackivi
0 / 0 / 0
Регистрация: 11.04.2011
Сообщений: 9
06.01.2012, 22:08  [ТС] 3
к сожалению, не помогло. Я понял, что этим выставляется ожидание нажатия клавиши - но это не помогло )))
0
Charles Kludge
Клюг
7647 / 3162 / 383
Регистрация: 03.05.2011
Сообщений: 8,382
06.01.2012, 22:17 4
Странно. Под FASM'ом без проблем.
0
06.01.2012, 22:17
rapackivi
0 / 0 / 0
Регистрация: 11.04.2011
Сообщений: 9
06.01.2012, 23:14  [ТС] 5
Да я и сам уже грешу именно на Nasm...
Сейчас на fasme tozhe poprobuu
0
murderer
4288 / 1553 / 155
Регистрация: 06.10.2010
Сообщений: 3,442
07.01.2012, 07:56 6
Установи видеорежим
Assembler
1
2
mov ax,3
int 10h
Добавлено через 4 минуты
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
org  100h
mov  ax,3
int  10h
push 0B800h
pop  es
mov  ax,741h
xor  di,di
@@:stosw
   inc ax
   cmp al,'z'
jnz @b
ret
2
rapackivi
0 / 0 / 0
Регистрация: 11.04.2011
Сообщений: 9
07.01.2012, 18:09  [ТС] 7
класс! спасибо!
буду искать теперь литературу по видеорежимам древним - чтобы не попадать так больше. Все-таки проблема оказалась в этом...
Дополнительное спасибо за красивую оптимизацию:
push B800 - 3 байта, mov ax,B800 - 3 байта
pop es - 1 байт, mov es,ax - 2 байта!!!
Таким образом, один байт из кода долой!!!
0
Charles Kludge
Клюг
7647 / 3162 / 383
Регистрация: 03.05.2011
Сообщений: 8,382
07.01.2012, 18:22 8
видеорежимам древним
http://www.ctyme.com/intr/rb-0069.htm#Table10 табличка внизу.
0
xcislav
0 / 0 / 0
Регистрация: 11.10.2012
Сообщений: 9
11.01.2013, 19:53 9
Assembler
1
2
3
4
00000000  6800B8            push word 0xb800
00000003  1F                   pop ds
00000004  B84107           mov ax,741h
00000007  8800               mov [bx+si],al
ds - сегмент по умолчанию поэтому вот так вот - 9 байт ..ну или 10 (последнюю команду копирастил с своего сегодняшнего поста) .. то есть только 8 байт будет если только al B441 - 2byte. вот если бы кто-то подсказал push byte 0xb8 а также обнуление регистра в 1 байт инструкции (ессно рег AL) то был бы предельно счастлив
0
murderer
4288 / 1553 / 155
Регистрация: 06.10.2010
Сообщений: 3,442
13.01.2013, 09:46 10
обнуление регистра в 1 байт инструкции
Если в [es:di] лежит 0, то можно через lodsb
0
13.01.2013, 09:46
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.01.2013, 09:46

Работа с ms sql напрямую
Где есть книжки где от А до Я объясняется работа с БД ms sql в C#, также нужна инфа по языку T-Sql?...

Работа с видеокартой напрямую
Подскажите можно ли средствами c# напрямую взаимодействовать с функциями видеокарт, например...

Работа напрямую с памятью
Такая проблема: есть структура Struct {int a,int b} еще есть две строки требуется скопировать...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru