Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.02.2011, 21:29   #1
Dimarik
Форумчанин
 
Аватар для Dimarik
 
Регистрация: 18.04.2009
Сообщений: 688
По умолчанию вывод

Код:
CSEG segment
org 100h
begin:
        mov ax,0b800h;загружаем в 16-битный регистр данных
        ;0b800h соответствует сегменту дисплея в тестовом режиме
        mov es, ax; т.к. загрузка числа напрямую в сегментный регистр запрещена (16 бит)
        mov di,0;загрузка в регистр данных (8 бит) - это смещение относительно сегмента 0b800h
        
        mov ax, 31;заносим цвет символа и фона (ярко-белый символ на синем фоне)
        mov al,1;код символа 01- смайлик
        mov es:[di],ax;заносим по адресу 0b800h:0000h атрибут ASCII-символа
        
        mov ah, 10h
        int 16h
        int 20h
 
CSEG ends
end begin
результатом этой программы должен быть выведен смайлик. в итоге не выводится НИЧЕГО!!!!!
почему и как подправить код?
P.S. Это пример из Калашникова)))
Dimarik вне форума Ответить с цитированием
Старый 13.02.2011, 22:48   #2
alexcoder
Форумчанин
 
Регистрация: 31.05.2009
Сообщений: 786
По умолчанию

в самом начале программы добавить
Код:
mov ax,3
int 10h
это установка расово верного текстового режима
Помощь с программами:
vk.com/alexcoder1
e-mail: informatik101@mail.ru
alexcoder вне форума Ответить с цитированием
Старый 13.02.2011, 22:54   #3
airyashov
Форумчанин
 
Регистрация: 02.04.2008
Сообщений: 358
По умолчанию

потому что windows xp
Код:
CSEG segment
org 100h
begin:
        mov ax,3
        int 10h
        mov ax,0b800h;загружаем в 16-битный регистр данных
        ;0b800h соответствует сегменту дисплея в тестовом режиме
        mov es, ax; т.к. загрузка числа напрямую в сегментный регистр запрещена (16 бит)
        mov di,0;загрузка в регистр данных (8 бит) - это смещение относительно сегмента 0b800h
        
        mov ax, 31;заносим цвет символа и фона (ярко-белый символ на синем фоне)
        mov al,1;код символа 01- смайлик
        mov es:[di],ax;заносим по адресу 0b800h:0000h атрибут ASCII-символа
        
        mov ah, 10h
        int 16h
        int 20h
 
CSEG ends
end begin
неплохо пишу на ассемблере для 80х86
icq: 3(один)7748666
mail: airyashov(а)inbox.ru
airyashov вне форума Ответить с цитированием
Старый 14.02.2011, 00:40   #4
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

а помоему проблема в том что консоль мнгновенно закрывается и в итоге ТС ничего не успевает увидеть...
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 14.02.2011, 08:39   #5
Dimarik
Форумчанин
 
Аватар для Dimarik
 
Регистрация: 18.04.2009
Сообщений: 688
По умолчанию

alexcoder, я сделал все как ты сказал. НЕ помогло. Пустая консоль на весь экран. Ждет нажатия клавиши.
Dimarik вне форума Ответить с цитированием
Старый 14.02.2011, 08:53   #6
Mikl___
Участник клуба
 
Регистрация: 11.01.2010
Сообщений: 1,139
По умолчанию

Dimarik
Код:
.model tiny
.286
.code
org 100h
start:  mov ax,3
        int 10h; стираем с экрана
        push 0b800h;загружаем в 16-битный регистр данных
        ;0b800h соответствует сегменту дисплея в тестовом режиме
        pop es; ES=0B800h
        mov di,0; левый верхний угол
        
        mov ax,07001h;заносим цвет символа и фона и код символа 01- смайлик
        stosw;заносим по адресу 0b800h:0000h атрибут и код ASCII-символа        
        mov ah,0
        int 16h
        retn 
end    start
ошибка была в том что вместо АН использовался АХ
Код:
mov ax, 31;заносим цвет символа и фона (ярко-белый символ на синем фоне)
        mov al,1
Mikl___ вне форума Ответить с цитированием
Старый 14.02.2011, 22:06   #7
Dimarik
Форумчанин
 
Аватар для Dimarik
 
Регистрация: 18.04.2009
Сообщений: 688
По умолчанию

Код:
CSEG segment
org 100h
begin:
	mov ah,3 ;номер видеорежима
  int 10h  ;установка видеорежима 
  
	mov ax,0b800h;загружаем в 16-битный регистр данных
	;0b800h соответствует сегменту дисплея в тестовом режиме
	mov es, ax; т.к. загрузка числа напрямую в сегментный регистр запрещена (16 бит)
	mov di,0;загрузка в регистр данных (8 бит) - это смещение относительно сегмента 0b800h
	
	mov ah, 31;заносим цвет символа и фона (ярко-белый символ на синем фоне)
	mov al,64;код символа 64  - латинская буква A
	;вывод строки
	mov es:[di],ax;заносим по адресу 0b800h:0000h атрибут ASCII-символа
	
	mov ax, 10h
	int 16h
	int 20h

CSEG ends
end begin
исправил. не помогло
Dimarik вне форума Ответить с цитированием
Старый 14.02.2011, 22:23   #8
Dimarik
Форумчанин
 
Аватар для Dimarik
 
Регистрация: 18.04.2009
Сообщений: 688
По умолчанию

посмотрел в инете про прерывание 10h
написано
Int 10/AH=01h - VIDEO - SET TEXT-MODE CURSOR SHAPE
Int 10/AH=02h - VIDEO - SET CURSOR POSITION
Int 10/AH=03h - VIDEO - GET CURSOR POSITION AND SIZE
Поменял
mov ah,3 ;номер видеорежима
на
mov ah,01h ;номер видеорежима
ииии
заработало! Только символа меняет свой цвет во время мерцания курсора почему-то....
Dimarik вне форума Ответить с цитированием
Старый 15.02.2011, 04:24   #9
Mikl___
Участник клуба
 
Регистрация: 11.01.2010
Сообщений: 1,139
По умолчанию

Dimarik
у меня
Код:
mov ax,3
        int 10h; стираем с экрана
АХ=0003h AH=00 AL=03h функция 00 прерывания 10h установка видеорежима в AL номер видеорежима - текстовый 80х25 установка нового режима приведет к стиранию с экрана
у тебя
Код:
mov ah,3 ;номер видеорежима
  int 10h  ;установка видеорежима
Int 10/AH=03h - VIDEO - GET CURSOR POSITION AND SIZE и после этого ты пишешь "исправил. не помогло" -- будь внимательнее!
Mikl___ вне форума Ответить с цитированием
Старый 15.02.2011, 14:05   #10
Dimarik
Форумчанин
 
Аватар для Dimarik
 
Регистрация: 18.04.2009
Сообщений: 688
По умолчанию

Спасибо. Работает. Только остался малюююсенький вопросик.
Я зашел на пару сайтов чтобы получше понять как работает прерывание 10h.
http://www.codenet.ru/progr/dos/int_0009.php
здесь пишут что

AH сервис

02H уст. позицию курсора. установка на строку 25 делает курсор невидимым.
вход: BH = видео страница
DH,DL = строка, колонка (считая от 0)
--- ----------------------------------------------------------------------------
03H читать позицию и размер курсора
вход: BH = видео страница
выход: DH,DL = текущие строка,колонка курсора
CH,CL = текущие начальная,конечная строки курсора (см. функцию 01H)

про AX ничего не сказано.
Захожу на другой сайт:
http://www.ctyme.com/intr/int-10.htm
про ax=03h тоже ничего не сказано

так это неполная справка? то есть не все по прерываниям есть? Есть где-то полная спрвка? Можешь посоветоать?
Dimarik вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вывод C++ Guzal Помощь студентам 3 09.12.2010 23:40
Вывод RedScreenOfLife Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 3 29.10.2010 21:17
вывод в с++ Dimarik Общие вопросы C/C++ 3 18.04.2010 16:00
вывод 2Е+10 Euforia_PZAS09_1 Общие вопросы C/C++ 6 21.02.2010 16:25
Вывод C heart Общие вопросы C/C++ 6 17.08.2009 11:29