Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Маленький вопрос...  (Прочитано 17445 раз)
0 Пользователей и 1 Гость смотрят эту тему.
OxOyD
Гость
« : 17-03-2006 07:48 » 

в общем я только начал изучать ассемблер(тобишь 3 день =)), нашел одно пособие обучающие которое в принципе достаточно легко усваивается, но возникла проблема...при написании одного из примеров книги который должен выводить в верхний левый угол экрана веселую рожицу на синем фоне.
CSEG segment
org 100h
Begin:
mov ax,0B800h
mov es, ax
mov di,0
mov ah, 31
mov al,1
mov es:[di],ax
mov ah,10h
int 16h
Вот собственно сама врезка кода, так вроде бы все нормально, но вот после запуска prog.com программа ничего ниделает(кроме того что ждешь нажатия на кнопочку), посмотрел в IDA а там
mov ax,0B800h
mov es, ax
assume es:nothing
я так понимаю что в es так и не загрузился сегмент дисплея. Почему?
Записан
PooH
Глобальный модератор

ru
Offline Offline
Пол: Мужской
... и можно без хлеба!


« Ответ #1 : 17-03-2006 08:18 » 

если не mov ax,0B800h, а mov ax,B800h

"собственно сама врезка кода"
а куда код врезается?

PS: хотя, врядли.
« Последнее редактирование: 17-03-2006 08:20 от PooH » Записан

Удачного всем кодинга! -=x[PooH]x=-
OxOyD
Гость
« Ответ #2 : 17-03-2006 08:25 » 

Ну код врезается пока тока в этот форум =) =)
А вот тест показал что число B800h не соотвеествует ни какому сегменту, так что нето =(
Записан
PooH
Глобальный модератор

ru
Offline Offline
Пол: Мужской
... и можно без хлеба!


« Ответ #3 : 17-03-2006 08:44 » 

вот чего гугл нашел:
Код:
Адресное пространство в DOS:
Объем Физ. Адрес Сегм. Адрес
1Кбайт Векторы прерываний 00000h 0000h
256байт Область данных BIOS 00400h 0040h
ОС MS-DOS 00500h 0050h
Область для программ
64Кбайт Графический видео буфер A0000h A000h
32Кбайт Свободные адреса B0000h B000h
32Кбайт Текстовый видеобуфер B8000h B800h
64Кбайт ПЗУ-расширения BIOS C0000h C000h
128Кбайт Свободные адреса D0000h D000h
64Кбайт ПЗУ BIOS F0000h F000h
64Кбайт HMA 100000h
До4Гбайт XMS 10FFF0h
Записан

Удачного всем кодинга! -=x[PooH]x=-
OxOyD
Гость
« Ответ #4 : 17-03-2006 08:59 » 

хм...в общем картина следующая вот что masm выдает на B8000h :prog.asm(5): error A2006: undefined symbol : B8000h
а это на 0B8000h : prog.asm(5): error A2084: constant value too large
а это на 0B800h : Assembling: prog.asm , но как уже стало ясно это на работает(
Записан
OxOyD
Гость
« Ответ #5 : 17-03-2006 12:45 » 

Извиняюсь, ответ нашел сам...путем глубоко анализа(или как говорится методом тыка) в общем нужно было просто убрать mov di,0 и все встало на свои места, я так понял что в сегменте текстового видеобуфера нельзя использовать смещение на ноль, либо вообще нельзя(скорее всего это.). Если я ошибаюсь прошу поправить.
Записан
nikedeforest
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #6 : 17-03-2006 13:49 » 

Калашников это, если я не ошибаюсь.
Записан

ещё один вопрос ...
OxOyD
Гость
« Ответ #7 : 17-03-2006 14:02 » 

если не трудно поясни что значит "Калашников"
Записан
nikedeforest
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #8 : 17-03-2006 14:15 » 

Статьи Калашникова ты читаешь для изучения ассемблера. Или я все-таки ош9ибаюсь?  Просто у него такой же пример был.
Записан

ещё один вопрос ...
OxOyD
Гость
« Ответ #9 : 17-03-2006 14:24 » 

Хм...даже и не знаю книга в электронном виде и как ни странно но подписи нет ни где...хотя не вооруженным глазом видно что автор один...а не несколько.
Записан
OxOyD
Гость
« Ответ #10 : 17-03-2006 14:26 » 

и кстати зря так на mov di,0 грешил, оставить можно и даже нужно главное что бы смещение задавалось после присвоения al и ah, почему именно так для меня пока загадка...
Записан
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #11 : 17-03-2006 17:16 » 

Граждане! Что вы тут понасоветовали?
1) 0B800h - ведущий ноль нужен перед буквой в шестнадцатеричной константе для того, чтобы отличить ее от метки.
2) assume es:nothing
assume - директива компилятора, которой программист дает знать компилятору, на какой сегмент (его символическое имя в программе) указывает данный сегментный регистр. Нужна для правильного расчета смещений в сегментах в момент компиляции.
3) Адресное пространство, выделенное под CGA/EGA/VGA - A000:0000...B000:FFFF. Положение отображаемого кадра зависит от графического режима (поищи в этом же разделе тему - я там развернуто это описал).

OxOyD, а в последнем твоем посте - полный бред.
« Последнее редактирование: 17-03-2006 17:18 от RXL » Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
OxOyD
Гость
« Ответ #12 : 18-03-2006 04:00 » 

RXL, сенкс, про бред согласен, по эксперементировал кажется начал понимать что то...в общем программа заработала...да и кстати у тебя нет ни каких статей или книжек хороших для начала?
Записан
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #13 : 18-03-2006 09:57 » 

Нет.
Поищи бумажные. В свое время хорошие обучающие книжки по ассемблеру были от Питера Нортона.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
PooH
Глобальный модератор

ru
Offline Offline
Пол: Мужской
... и можно без хлеба!


« Ответ #14 : 18-03-2006 14:55 » 

Граждане! Что вы тут понасоветовали?
Вроде бы никто ничего не советовал. Я просто высказал предположение. Так... - для эксперимента.
Цитата
3) Адресное пространство, выделенное под CGA/EGA/VGA - A000:0000...B000:FFFF. Положение отображаемого кадра зависит от графического режима (поищи в этом же разделе тему - я там развернуто это описал).
а причем тут графические режимы (и буфер)? ведь в примере используется текстовый буфер.
Записан

Удачного всем кодинга! -=x[PooH]x=-
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #15 : 18-03-2006 21:38 » 

Текстовых режимов то же не один Ага
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines