![]() |
1. Заголовок или название темы должно быть информативным
2. Все тексты программ должны помещаться в теги [CODE=asm] [/CODE]
3. Прежде чем задавать вопрос, см. "FAQ",если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно, такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Ассемблера. Исключение только с согласия модератора.
5. НЕ используйте форум для личного общения! Все, что не относиться к обсуждению темы - на PM!
6. Проверяйте программы перед тем, как выложить их на форум!!
![]() ![]() |
![]() |
nonpascaler |
![]()
Сообщение
#1
|
Новичок ![]() Группа: Пользователи Сообщений: 12 Пол: Мужской Репутация: ![]() ![]() ![]() |
Помогите плиз разобраться (только "на пальцах" если можно):
1. Программа СОМ не может превышать 65535 байт из-за размера страниц по 65к - здесь все понятно ![]() 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 байт) ![]() 3. Как включить режим 640*480&256 цветов (VGA), например в Турбо Паскале стандартно режим 640*480&16 и в хэлпе ни слова как получить 256 ![]() 3.1. Не могли бы Вы кто-нить пожертвовать асм-код, для того, чтобы врубить этот режим и ессно вернуть прежний (если Паскаль умеет по выходу возвращать свой текстовый режим, то плиз отключения не надо) 3.1.1. Хочу в Паскале вывести 256-цветную картинку, но в 16 цв. понятно, что все за пределами 16 выводится коряво ![]() 4. Включается какой-то сегмент и после этого, если в оперативку посылать значения, то байты рисуются точками на экране. Как это понимать, часть ОЗУ компьютера отдано под видео, т.е. там не размещается код программы? 5. Последнее ![]() Блин, наверное я не так выражаюсь, но кто юзал Z80 это будет примерно так: LD HL, 9000 LD DE,2000 LD BC,2048 LDIR RET Вот хочу теперь все это "кроссассемблировать" на IBM-PC. ![]() Сообщение отредактировано: nonpascaler - 16.08.2006 20:25 |
volvo |
![]()
Сообщение
#2
|
Гость ![]() |
nonpascaler, давай договоримся, что все вопросы по Паскалю ты будешь задавать в соответствующем форуме (и, естественно, после того, как воспользуешься поиском). А то, что ты поиском не пользовался - очевидно. Иначе вопрос 3.1.1 у тебя просто не возник бы:
Дополнительные модули для работы с графикой (сами драйвера лежат здесь: FAQ: Графика) Здесь тоже покопайся: Faq (ЧАВО) |
nonpascaler |
![]()
Сообщение
#3
|
Новичок ![]() Группа: Пользователи Сообщений: 12 Пол: Мужской Репутация: ![]() ![]() ![]() |
nonpascaler, давай договоримся, что все вопросы по Паскалю ты будешь задавать в соответствующем Ой, а я редактировал пост.... ![]() Паскаль это так, отступление, чтоб понятней было. А остальные вопросы? Может книжка есть, типа асм для чайников? nonpascaler, вопросы по Паскалю ты буде Вы даете адрес на текст паскалевой программы, но очень хотелось бы включить этот режим из асма. ![]() Громадное спасибо за отклик, есть еще добрые люди на свете! Сообщение отредактировано: nonpascaler - 16.08.2006 20:45 |
suriv |
![]()
Сообщение
#4
|
![]() Бывалый ![]() ![]() ![]() Группа: Пользователи Сообщений: 234 Пол: Мужской Реальное имя: AHTOH Репутация: ![]() ![]() ![]() |
Цитата А остальные вопросы? Может книжка есть, типа асм для чайников? пжлста: http://kalashnikoff.ru/Assembler/ Neophyte -------------------- Хочу в репу !
Cмотри,а то ведь получишь! Админ. Не получит - его фиг догонишь! Админ №2. P.S Вы еще третьего админа притащите сюда :D ваш аффтар :D Звали? :D (админ № не помню какой) ха больше нифига не напишете афтар Уверен? (Moderator) А еще можно ? (супмодер) Хватит его мучать ! Избили уж... (админ) Не хватит. я тоже напишу (тоже Админ) |
nonpascaler |
![]()
Сообщение
#5
|
Новичок ![]() Группа: Пользователи Сообщений: 12 Пол: Мужской Репутация: ![]() ![]() ![]() |
пжлста:[url=http://kalash Спасибы! Но опять же, в обоих статьях, особенно в главах о структуре RAM не приводится пример того, что произойдет, если в теории моя прога получилась не 40 килобайт а все 80? Вы скажете, ну так это уже ЕХЕ получается, а если Вам скажу что могу помечтать и поиграться с сегментным регистром, например включил сегмент №1 и RUN с адреса 0000, затем где-то в конце, приближаясь к 65535, последней командой "включаю" сегмент №2 и JMP туда, вот мне и пргорамма на все 131070 байт, примерно так поступают с дополнтельным ОЗУ (страницы памяти) в восьмибитных компах ![]() Но это же только мои предположения, а значит мой бред! Потому я и спрашивал такую книжку, где показана карта памяти машины с 640Кб и карта памяти машины с 64 Мегабайт. Где-то читал, что до 640к задействованы одни регистры, стало быть один тип памяти, далее до 1024кб другой диапазон RAM и все что выше и до 4Гб совсем другая кухня. Почему же о ней ни слова? Новичкам в примерах дают какие-то программы, недосказав об принципах работы компа и строении ПЗУ/ОЗУ. ![]() В теории, разработав особый драйвер RAM (см. выше), можно запускать программы объемом 400-500кб, но это же мои нелепые догадки, должно быть все гораздо проще, уверен, что все уже придумано и заложено в камень, но что это за волшебство? Сообщение отредактировано: nonpascaler - 18.08.2006 14:30 |
nonpascaler |
![]()
Сообщение
#6
|
Новичок ![]() Группа: Пользователи Сообщений: 12 Пол: Мужской Репутация: ![]() ![]() ![]() |
А вот еще вопрос:
режим 320x200 & 16 Адрес $A000, это экран да? И вот программа находится у меня в каком-то одном сегменте, а данные спрайта в другом. Какой будет маинный код, перемещающий байт из одного сегмента в графический, экранный? Загрузил несколько картинок в память (они влезли в банку 65535), теперь хочу любую из них выкинуть на экран, что-то вроде мультфильма. Это наверное надо включить один сегмент(где спрайты), взять из переменной адрес, затем по этому адресу в АХ загрузить первый байт, потом переключиться в сегмент экрана, найти адрес и из АХ загружаю байт в память экрана и так группу байт. Потом, вероятно вторую линию введу (расчитав адрес ровно под первой линией) и так прямоугольный рисунок по идее должен появиться на экране. Напишите пожалуйсто исходник, будьте добры. Потом хочу использовать его как движок, выводя в игрухе спрайты, ну и продумаю сохранение фона под ним, это естесссно. ![]() Плииииз. И еще, какие сегменты в ДОС можно использовать для своих нужд, (для программ, для данных)? |
nonpascaler |
![]()
Сообщение
#7
|
Новичок ![]() Группа: Пользователи Сообщений: 12 Пол: Мужской Репутация: ![]() ![]() ![]() |
Скриншот из игрухи.
Вот выводится этот текст хуже чем ужасно, думаю закинув свой шрифт 2048 байт в оперативку, смогу ассемблером выводить быстрее. Поверьте, привело меня сюда не просто какое-то желание поболтать, засоряя форум. Асма для ПЦ не знаю, начинать с почти нуля ради какого-то фрагмента кода желания особо нет. Плииииз. ![]() Эскизы прикрепленных изображений ![]() |
nonpascaler |
![]()
Сообщение
#8
|
Новичок ![]() Группа: Пользователи Сообщений: 12 Пол: Мужской Репутация: ![]() ![]() ![]() |
Возвращаясь к посту о перемещении больших блоков данных.
Порылся в справочнике асма. Либо это команда 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-диск для картинок. ![]() |
Malice |
![]()
Сообщение
#9
|
![]() Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 705 Пол: Мужской Репутация: ![]() ![]() ![]() |
Еще бы расшифровать "ptr ES:[DI],ES:[SI]" ;-( На самом деле все проще, они так написали, чтоб пояснить как она работает. Реально пишешь просто "rep movsb", т.е. : DS:SI - откуда ES:DI - куда CX - сколько rep movsb Пересылать будет побайтно, если хочешь словами, то rep movsw. movsd паскаль не понимает, придется писать db $66; rep movsw. |
nonpascaler |
![]()
Сообщение
#10
|
Новичок ![]() Группа: Пользователи Сообщений: 12 Пол: Мужской Репутация: ![]() ![]() ![]() |
|
Malice |
![]()
Сообщение
#11
|
![]() Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 705 Пол: Мужской Репутация: ![]() ![]() ![]() |
|
![]() ![]() |
![]() |
Текстовая версия | 25.06.2025 10:21 |