IPB
ЛогинПароль:

> ПРАВИЛА РАЗДЕЛА!!!

1. Заголовок или название темы должно быть информативным
2. Все тексты программ должны помещаться в теги [CODE=asm] [/CODE]
3. Прежде чем задавать вопрос, см. "FAQ",если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно, такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Ассемблера. Исключение только с согласия модератора.
5. НЕ используйте форум для личного общения! Все, что не относиться к обсуждению темы - на PM!
6. Проверяйте программы перед тем, как выложить их на форум!!

 
 Ответить  Открыть новую тему 
> Ram, СОМ, ЕХЕ и Графика
сообщение
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 12
Пол: Мужской

Репутация: -  0  +


Помогите плиз разобраться (только "на пальцах" если можно):

1. Программа СОМ не может превышать 65535 байт из-за размера страниц по 65к - здесь все понятно smile.gif
2. Как выглядит карта памяти при ЕХЕ-проге размером 40кб и как при 510Кб? А если данных завались и сегмента данных не хватит, что произойдет тогда? Какой объем сегмента данных?
2.1. Почему-то в описаниях все сухо и сжато и не говорится от том, что если текстовый редактор в 500кб, причем все 400кб - код, остальное для текста, то как это все увязывается в ОЗУ? Видимо одна часть программы следит за клавишами и сидит в одном сегменте, а вывод текста в другом, а сохранение файла в третьем, а если сама процедура превышает 65к, то что получается, происходит JP в другой сегмент и счастье продолжается? А если 16-битный регистр может обращаться только к области RAM до 65535, то 32-битный наверное к 4Гб, правильно? (типа как мне переместить 10 Мегабайт данных с точки адреса памяти 1024576 в 2048000?).
2.2. Вообще-то, если бы в IBM-PC было не 10 банок по 65к, а больше, то теоретически, можно было бы создать драйвер непрерывной памяти в 4Гб (65535_банка *65535_16 битный регистр сегмента = 4.294.836.225 байт)
smile.gif Но, скорее всего я не понимаю карту памяти IBM-PC и принцип работы программ.
3. Как включить режим 640*480&256 цветов (VGA), например в Турбо Паскале стандартно режим 640*480&16 и в хэлпе ни слова как получить 256 sad.gif
3.1. Не могли бы Вы кто-нить пожертвовать асм-код, для того, чтобы врубить этот режим и ессно вернуть прежний (если Паскаль умеет по выходу возвращать свой текстовый режим, то плиз отключения не надо)
3.1.1. Хочу в Паскале вывести 256-цветную картинку, но в 16 цв. понятно, что все за пределами 16 выводится коряво smile.gif
4. Включается какой-то сегмент и после этого, если в оперативку посылать значения, то байты рисуются точками на экране. Как это понимать, часть ОЗУ компьютера отдано под видео, т.е. там не размещается код программы?
5. Последнее smile.gif У меня 2048 байт находится по адресу 9000DEC их надо перекинуть в 2000DEC, есть ли команда, которая делает это одним махом?
Блин, наверное я не так выражаюсь, но кто юзал Z80 это будет примерно так:
LD HL, 9000
LD DE,2000
LD BC,2048
LDIR
RET
Вот хочу теперь все это "кроссассемблировать" на IBM-PC.
smile.gif))))))))))))))

Сообщение отредактировано: nonpascaler -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гость






nonpascaler, давай договоримся, что все вопросы по Паскалю ты будешь задавать в соответствующем форуме (и, естественно, после того, как воспользуешься поиском). А то, что ты поиском не пользовался - очевидно. Иначе вопрос 3.1.1 у тебя просто не возник бы:
Дополнительные модули для работы с графикой

(сами драйвера лежат здесь: FAQ: Графика)

Здесь тоже покопайся:
Faq (ЧАВО)
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Новичок
*

Группа: Пользователи
Сообщений: 12
Пол: Мужской

Репутация: -  0  +


Цитата(volvo @ 16.08.2006 20:24) *

nonpascaler, давай договоримся, что все вопросы по Паскалю ты будешь задавать в соответствующем


Ой, а я редактировал пост....
smile.gif
Паскаль это так, отступление, чтоб понятней было.
А остальные вопросы? Может книжка есть, типа асм для чайников?

Цитата(volvo @ 16.08.2006 20:24) *

nonpascaler, вопросы по Паскалю ты буде

Вы даете адрес на текст паскалевой программы, но очень хотелось бы включить этот режим из асма.
sad.gif
Громадное спасибо за отклик, есть еще добрые люди на свете!

Сообщение отредактировано: nonpascaler -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Бывалый
***

Группа: Пользователи
Сообщений: 234
Пол: Мужской
Реальное имя: AHTOH

Репутация: -  1  +


Цитата
А остальные вопросы? Может книжка есть, типа асм для чайников?

пжлста:

http://kalashnikoff.ru/Assembler/
Neophyte


--------------------
Хочу в репу !

Cмотри,а то ведь получишь!
Админ.

Не получит - его фиг догонишь!
Админ №2.

P.S Вы еще третьего админа притащите сюда :D
ваш аффтар :D
Звали? :D (админ № не помню какой)

ха больше нифига не напишете
афтар

Уверен? (Moderator)
А еще можно ? (супмодер)
Хватит его мучать ! Избили уж... (админ)
Не хватит. я тоже напишу (тоже Админ)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Новичок
*

Группа: Пользователи
Сообщений: 12
Пол: Мужской

Репутация: -  0  +


Цитата(suriv @ 16.08.2006 22:22) *
пжлста:[url=http://kalash


Спасибы!
Но опять же, в обоих статьях, особенно в главах о структуре RAM не приводится пример того, что произойдет, если в теории моя прога получилась не 40 килобайт а все 80?
Вы скажете, ну так это уже ЕХЕ получается, а если Вам скажу что могу помечтать и поиграться с сегментным регистром, например включил сегмент №1 и RUN с адреса 0000, затем где-то в конце, приближаясь к 65535, последней командой "включаю" сегмент №2 и JMP туда, вот мне и пргорамма на все 131070 байт, примерно так поступают с дополнтельным ОЗУ (страницы памяти) в восьмибитных компах smile.gif
Но это же только мои предположения, а значит мой бред! Потому я и спрашивал такую книжку, где показана карта памяти машины с 640Кб и карта памяти машины с 64 Мегабайт. Где-то читал, что до 640к задействованы одни регистры, стало быть один тип памяти, далее до 1024кб другой диапазон RAM и все что выше и до 4Гб совсем другая кухня. Почему же о ней ни слова? Новичкам в примерах дают какие-то программы, недосказав об принципах работы компа и строении ПЗУ/ОЗУ. sad.gif
В теории, разработав особый драйвер RAM (см. выше), можно запускать программы объемом 400-500кб, но это же мои нелепые догадки, должно быть все гораздо проще, уверен, что все уже придумано и заложено в камень, но что это за волшебство?

Сообщение отредактировано: nonpascaler -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Новичок
*

Группа: Пользователи
Сообщений: 12
Пол: Мужской

Репутация: -  0  +


А вот еще вопрос:
режим 320x200 & 16
Адрес $A000, это экран да? И вот программа находится у меня в каком-то одном сегменте, а данные спрайта в другом. Какой будет маинный код, перемещающий байт из одного сегмента в графический, экранный?
Загрузил несколько картинок в память (они влезли в банку 65535), теперь хочу любую из них выкинуть на экран, что-то вроде мультфильма. Это наверное надо включить один сегмент(где спрайты), взять из переменной адрес, затем по этому адресу в АХ загрузить первый байт, потом переключиться в сегмент экрана, найти адрес и из АХ загружаю байт в память экрана и так группу байт. Потом, вероятно вторую линию введу (расчитав адрес ровно под первой линией) и так прямоугольный рисунок по идее должен появиться на экране.
Напишите пожалуйсто исходник, будьте добры. Потом хочу использовать его как движок, выводя в игрухе спрайты, ну и продумаю сохранение фона под ним, это естесссно.
smile.gif

Плииииз.

И еще, какие сегменты в ДОС можно использовать для своих нужд, (для программ, для данных)?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Новичок
*

Группа: Пользователи
Сообщений: 12
Пол: Мужской

Репутация: -  0  +


Скриншот из игрухи.
Вот выводится этот текст хуже чем ужасно, думаю закинув свой шрифт 2048 байт в оперативку, смогу ассемблером выводить быстрее. Поверьте, привело меня сюда не просто какое-то желание поболтать, засоряя форум. Асма для ПЦ не знаю, начинать с почти нуля ради какого-то фрагмента кода желания особо нет.
Плииииз.
smile.gif


Эскизы прикрепленных изображений
Прикрепленное изображение
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8


Новичок
*

Группа: Пользователи
Сообщений: 12
Пол: Мужской

Репутация: -  0  +


Возвращаясь к посту о перемещении больших блоков данных.
Порылся в справочнике асма. Либо это команда

MOVS - Move String (Byte or Word)
Usage: MOVS dest,src
MOVSB
MOVSW
MOVSD (386+)
Modifies flags: None
Copies data from addressed by DS:SI (even if operands are given) to
the location ES:DI destination and updates SI and DI based on the
size of the operand or instruction used. SI and DI are incremented
when the Direction Flag is cleared and decremented when the Direction


либо

REP - Repeat String Operation
Usage: REP
Modifies flags: None
Repeats execution of string instructions while CX != 0. After
each string operation, CX is decremented and the Zero Flag is
tested. The combination of a repeat prefix and a segment override
on CPU's before the 386 may result in errors if an interrupt occurs
before CX=0. The following code shows code that is susceptible to

this and how to avoid it:
again: rep movs byte ptr ES:[DI],ES:[SI] ; vulnerable instr.
jcxz next ; continue if REP successful
loop again ; interrupt goofed count
next:
Clocks Size
Operands 808x 286 386 486 Bytes
none 2 2 2 1


В последнем примере очень похоже на то, что байт взят из области 1, перемещен в область 2, адреса в источнике и получателе увеличились на байт, а счетчик (CX) уменьшился. Все повторяется автоматом до тех пор, пока в счетчике не будет ноль. Еще бы расшифровать "ptr ES:[DI],ES:[SI]" ;-(
Практическое применение: Можно рисовать в граф_редакторе на видимом экране и сохраняться в любом выбранном заранее свободном сегменте. По команде "отмена" прежде сохраненное изображение моментально восстанавливается из UNDO-сегмента в видимый экран. Если определить число свободных сегментов в системе, то можно устроить своеобразный RAM-диск для картинок.
smile.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #9


Профи
****

Группа: Пользователи
Сообщений: 705
Пол: Мужской

Репутация: -  20  +


Цитата(nonpascaler @ 17.10.2006 21:25) *

Еще бы расшифровать "ptr ES:[DI],ES:[SI]" ;-(

На самом деле все проще, они так написали, чтоб пояснить как она работает. Реально пишешь просто "rep movsb", т.е. :

DS:SI - откуда
ES:DI - куда
CX - сколько
rep movsb

Пересылать будет побайтно, если хочешь словами, то rep movsw.
movsd паскаль не понимает, придется писать db $66; rep movsw.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #10


Новичок
*

Группа: Пользователи
Сообщений: 12
Пол: Мужской

Репутация: -  0  +


Цитата(Malice @ 19.10.2006 15:11) *

Пересылать будет побайтно, если хочешь словами, то rep movsw.
movsd паскаль не понимает, придется писать db $66; rep movsw.


Спасибы.
А слова "побайтно" значит практически мгновенно, это же команда процессора, не прораммный цикл, так?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #11


Профи
****

Группа: Пользователи
Сообщений: 705
Пол: Мужской

Репутация: -  20  +


Цитата(nonpascaler @ 24.10.2006 12:15) *

Спасибы.
А слова "побайтно" значит практически мгновенно, это же команда процессора, не прораммный цикл, так?

Нет, это значит, что в CX указывается кол-во БАЙТ. По скорости - хз, не мгновенно конечно, но быстро smile.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 




- Текстовая версия 20.09.2017 7:19
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"