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
Пол:
... и можно без хлеба!
|
|
« Ответ #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
Пол:
... и можно без хлеба!
|
|
« Ответ #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
|
|
« Ответ #6 : 17-03-2006 13:49 » |
|
Калашников это, если я не ошибаюсь.
|
|
|
Записан
|
ещё один вопрос ...
|
|
|
OxOyD
Гость
|
|
« Ответ #7 : 17-03-2006 14:02 » |
|
если не трудно поясни что значит "Калашников"
|
|
|
Записан
|
|
|
|
nikedeforest
|
|
« Ответ #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
Технический
Администратор
Offline
Пол:
|
|
« Ответ #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
Технический
Администратор
Offline
Пол:
|
|
« Ответ #13 : 18-03-2006 09:57 » |
|
Нет. Поищи бумажные. В свое время хорошие обучающие книжки по ассемблеру были от Питера Нортона.
|
|
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
PooH
Глобальный модератор
Offline
Пол:
... и можно без хлеба!
|
|
« Ответ #14 : 18-03-2006 14:55 » |
|
Граждане! Что вы тут понасоветовали?
Вроде бы никто ничего не советовал. Я просто высказал предположение. Так... - для эксперимента. 3) Адресное пространство, выделенное под CGA/EGA/VGA - A000:0000...B000:FFFF. Положение отображаемого кадра зависит от графического режима (поищи в этом же разделе тему - я там развернуто это описал). а причем тут графические режимы (и буфер)? ведь в примере используется текстовый буфер.
|
|
|
Записан
|
Удачного всем кодинга! -=x[PooH]x=-
|
|
|
RXL
Технический
Администратор
Offline
Пол:
|
|
« Ответ #15 : 18-03-2006 21:38 » |
|
Текстовых режимов то же не один
|
|
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
|