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

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Маленький вопрос...  (Прочитано 21704 раз)
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
Глобальный модератор

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
Глобальный модератор

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


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

вот чего гугл нашел:
Код:
Адресное пространство в 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
Глобальный модератор

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