19 / 187 / 0
Регистрация: 17.06.2013
Сообщений: 2,163
|
|
1 | |
Подскажите область фактической памяти для работы *com - программы13.08.2018, 21:36. Показов 2314. Ответов 11
Метки нет (Все метки)
Подскажите начало диапазона фактических адресов памяти для работы собственно-ручно писанной *com - программы.
Моя программа предпологала бы работу с фактическими адресами памяти указанных константами. Но какой именно адрес, как начало рабочего диапазона следует использовать для обычно-пользовательской программы: К примеру обращение к ячейке памяти: Mov [1234], 4eh Но какая именно по адресу ячейка памяти должна быть для обычной *com - программы чтобы это был номер начального адреса всей памяти преднозначенной для обычной программы?
0
|
13.08.2018, 21:36 | |
Ответы с готовыми решениями:
11
Область памяти для переменной и её значения. Это одна и та же область? Подскажите название какой нибудь программы для работы с бд Утечка памяти после работы программы Утечка памяти программы работы с COM портом |
1624 / 806 / 146
Регистрация: 13.06.2015
Сообщений: 3,266
|
|
14.08.2018, 04:17 | 2 |
Сообщение было отмечено Mikl___ как решение
Решение
Ixmil, увы, программы грузятся DOS по произвольному адресу, и использование абсолютной адресации в них бессмысленно, кроме случаев обращения к строго регламентированным областям памяти DOS (к коим ваш случай, как я понимаю, не имеет никакого отношения).
3
|
6771 / 2740 / 384
Регистрация: 17.02.2013
Сообщений: 4,048
|
|
14.08.2018, 06:43 | 3 |
Сообщение было отмечено Jin X как решение
Решение
Адрес в 16-разрядном режиме IBM PC состоит из двух половин - сегмента и смещения. Вот так :
Абсолютный_адрес = 16*Сегмент + Смещение Абсолютный адрес 20-разрядный. Сегмент и смещение 16-и разрядные. При запуске COM-программы ее код помещается с заранее неизвестного сегмента. Зависит от того сколько было занято памяти при загрузке MS-DOS всякой лабудой, указанной в файлах CONFIG.SYS и AUTOEXEC.BAT. А вот смещение точки старта COM-программы всегда 100h. Здесь 1234 это смещение. А сегмент используется тот, что находится в регистре DS и при старте COM-программы этот регистр получит значение сегмента с которого программа загружена. Так-что [1234] это смещение от заранее неизвестного сегмента. Но ты и не думай об этом сегменте. Когда загрузилась COM-программа все смещения в этом сегменте твои. Можешь делать с ними что хочешь. В общем, COM-программа грузится с заранее неизвестного сегмента, но все смещения в этом сегменте отдаются ей. Что в этих смещениях. В диапазоне смещений 0..100h префикс сегмента программы. Не трогай их без надобности. Со смещения 100h и дальше лежит код твоей программы с данными. Твори тут что-хошь. Но в самом хвосте, в смещениях ...FFFF находится стек. Ему надо хотя бы 200h байт места. Так-что диапазон смещений FE00..FFFF не трогай. А в диапазоне смещений 100..FDFF работай без ограничений. Там в перемешку твой код и данные. Данными код не затри, а в остальном твори что в голову взбредет.
5
|
19 / 187 / 0
Регистрация: 17.06.2013
Сообщений: 2,163
|
|
15.08.2018, 19:47 [ТС] | 4 |
Большое спосибо.
0
|
Asm/C++/Delphi/Py/PHP/VBA
|
|||||||||||||||||||||
17.08.2018, 12:33 | 5 | ||||||||||||||||||||
Ixmil, добавлю, что обычно делается так (TASM/MASM):
Добавлено через 4 минуты Главное – не перемешивать код и данные (это можно делать только в том случае, если понимаешь зачем это делается и как делать это правильно). Т.е. не городить чего-то вроде:
3
|
19 / 187 / 0
Регистрация: 17.06.2013
Сообщений: 2,163
|
|
21.08.2018, 01:21 [ТС] | 6 |
Извиняюсь. Но мне это незнакомо. Я собирался писать языком как из под дебагера.
Команда mov [1234], 3fh; И работала как последовательное обращение к адресам памяти как для нулевой ее страницы. Т.е. позволяла записать в определённый адрес, и именно с определённого адреса считать что было и записанно. Вроде можно было писать: mov[AX+BX], feh; но меня это волновало мало. Для меня подходила версия нулевой страницы памяти где полный фактический адрес в области показателей старше-числовой его половины был задан по умолчанию без уточнений которых могло и не быть.
0
|
6771 / 2740 / 384
Регистрация: 17.02.2013
Сообщений: 4,048
|
||||||
21.08.2018, 04:41 | 7 | |||||
Моя твой русский не понимай.
MASM/TASM :
0
|
19 / 187 / 0
Регистрация: 17.06.2013
Сообщений: 2,163
|
|
21.08.2018, 10:48 [ТС] | 8 |
Из соображения: mov [AX+BX],44h - как верного, я бы указывал только: mov [BX],44h; в качестве функции для записи в адрес указанный регистром "BX". Тогда когда полный адрес длиннее одного регистра, это означает что значение старшего разряда числового номера ячейки памяти задано по умолчанию в регистре (к примеру) "AX". А по умолчанию т.е. без специального присвоения значения регистр (в данном случае) "AX" имеет значение: "0000". Которое все равно определено как значение.
Добавлено через 2 минуты Для обращения к нулевой странице памяти (диапазону), адрес можно указать не целиком. И старшие числовые разряды адреса примут значение: "0000". Добавлено через 1 минуту На правах обгрейтовости блоков памяти. (Когда они могут быть добавлены или нет).
0
|
Asm/C++/Delphi/Py/PHP/VBA
|
|
21.08.2018, 11:46 | 9 |
Нет адресации по AX, если не использовать 32-битные регистры (тогда EAX можно и остальные тоже).
Из 16-битных регистров для адресации можно использовать только BX, BP (база, причём BP по умолчанию использует сегмент SS) и SI, DI (индекс). При этом складывать можно только 1 базовый и 1 индексный ([BX+SI], [BX+DI], [BP+SI], [BP+DI]; а вот [BX+BP] или [SI+DI] нельзя). Либо адресовать по 1 из этих 4-х регистров. Так же можно в любом из случаев добавлять/вычитать смещение (числовое значение): [BP+1234h] (тут по умолчанию будет сегмент SS), [BX+SI-80h]. Если сумма получается больше 0FFFFh, старшие неуместившиеся разряды игнорируются, т.е. вместо 12345h используется 2345h. Никаких значений по умолчанию в регистрах нет. Регистры содержат то, что в них записали. Если при старте программы ничего в них не записывалось, это не значит, что там ноль, и перед тем, как их использовать, нужно в них что-то записать (обнулить, если надо). Добавлено через 2 минуты Когда пишешь в память значение (или сравниваешь память со значением), нужно указывать размерность, т.к. ассемблеру не понятно, что значит число 1 – это байт, слово или двойное слово. Пишем mov byte ptr [bx+si],1 или типа того.Добавлено через 3 минуты При адресации с BP есть ещё одна особенность (кроме использования SS по умолчанию): в опкод обязательно прописывается смещение. Если оно не указано, прописывается 0 (т.е. mov [bp],ax фактически генерирует mov [bp+0],ax , а mov [bp+si],ax = mov [bp+si+0],ax , т.е. длина такой инструкции на 1 байт больше, чем, скажем, у mov [bx],ax или mov [bx+si],ax ). Размер опкода с использованием [BX] и [BX+SI], [BX+DI] одинаков. Аналогично при использовании [BP] и [BP+SI], [BP+DI] генерируются коды одного размера.
4
|
19 / 187 / 0
Регистрация: 17.06.2013
Сообщений: 2,163
|
|
21.08.2018, 12:26 [ТС] | 10 |
Спосибо. Но я не вижу для себя смысла больше продолжать эту тему.
0
|
Модератор
|
|
21.08.2018, 15:02 | 11 |
Если хочется однобайтовых смещений, можно использовать часть PSP с 80 по FF.
Код
0x80 1 Length of command line. 0x81 127 Command line contents.
0
|
Asm/C++/Delphi/Py/PHP/VBA
|
|
27.08.2018, 22:11 | 12 |
Обманул я вас, други! Извиняюсь...
Смещение добавляется только для одинокого BP, т.е. для mov ax,[bp] будет сгенерировано mov ax,[bp+0] , а вот для mov ax,[bp+si] или mov ax,[bp+di] – нет
0
|
27.08.2018, 22:11 | |
27.08.2018, 22:11 | |
Помогаю со студенческими работами здесь
12
Подсчет времени работы программы и затрат памяти Написать программу, определяющую количество байтов памяти с ненулевыми значениями для первых 256 Кб физической памяти в реальном режиме работы Intel 8 Подскажите прицип работы программы Написать программу, которая определяет, попадает ли точка с заданными координатами в область, закрашенную на рисунке. Результат работы программы вы Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи | |||||
Элементы алгоритмизации
hw_wired 28.01.2025
Основы алгоритмизации
В современном мире алгоритмы играют фундаментальную роль в развитии информационных технологий и программирования. Понимание основ алгоритмизации является ключевым элементом в. . .
|
Человек и информация
hw_wired 28.01.2025
Введение: роль информации в познании мира
В современном мире информация играет фундаментальную роль в процессе познания окружающей действительности. Она представляет собой совокупность сведений об. . .
|
Компьютер и информация
hw_wired 28.01.2025
Эволюция вычислительных машин
История развития вычислительной техники начинается задолго до появления первых электронных устройств. Человечество всегда стремилось упростить процесс вычислений и. . .
|
Информационные технологии
hw_wired 28.01.2025
Введение в современные технологии работы с информацией
В современном мире информационные технологии стали неотъемлемой частью практически всех сфер человеческой деятельности. Они существенно. . .
|
Информация вокруг нас
hw_wired 28.01.2025
Основные понятия информации
В современном мире понятие информации является фундаментальным и охватывает практически все сферы человеческой деятельности. Информация представляет собой совокупность. . .
|
Компьютер для начинающих
hw_wired 28.01.2025
Введение в мир компьютерных технологий
В современном мире информация стала одним из важнейших ресурсов человечества, определяющим развитие общества и технологий. Наша жизнь неразрывно связана с. . .
|
[golang] 189. Rotate Array
alhaos 28.01.2025
Повороты рукоятки, целочисленный слайс нужно сдвинуть на целое положительное число. Мне очень нравится решение на GO
/ / https:/ / leetcode. com/ studyplan/ top-interview-150/
package topInterview
. . .
|
КуМир: решение задач на матрицы
bytestream 28.01.2025
КуМир представляет собой среду для обучения программированию, которая включает в себя мощные инструменты для работы с матрицами. Матрица в программировании - это двумерный массив, состоящий из. . .
|
КуМир: решение задач на строки
bytestream 28.01.2025
В системе программирования КуМир работа со строковыми данными является одним из важнейших аспектов создания программ. Строки представляют собой последовательности символов, заключенные в кавычки,. . .
|
КуМир: решение геометрических задач
bytestream 28.01.2025
Программирование геометрических задач в среде КуМир становится всё более актуальным в обучении школьников и студентов. КуМир — это разработанная в России обучающая программная среда, предназначенная. . .
|
КуМир, исполнитель Водолей: Задачи и решения
bytestream 28.01.2025
КуМир — это образовательная среда для обучения программированию. Она предлагает пользователям разнообразные инструменты для разработки и отладки программ, что особенно ценно для студентов и. . .
|
КуМир, исполнитель Чертежник: Решение задач
bytestream 28.01.2025
КуМир (Комплект Учебных МИРов) представляет собой образовательную среду для обучения основам программирования и алгоритмизации.
Исполнитель Чертежник работает на координатной плоскости, где может. . .
|