|
56 / 2 / 0
Регистрация: 19.10.2015
Сообщений: 98
|
||||||
Работа с памятью: адресация выделенной области памяти06.02.2017, 17:11. Показов 6164. Ответов 14
Привет, ребят! Допустим я создал (выделил) какой-то участок памяти (функция 48h).. Вооот И мне очень хотелось бы его как-то адресовать (в моем понимании адресовать - значит обращаться к нужному мне участку выделенной памяти и, при необходимости его изменять). По сути это просто буфер, в который я бы хотел запихивать данные, но я никак не пойму, как к нему обратиться.. Пробовал
0
|
||||||
| 06.02.2017, 17:11 | |
|
Ответы с готовыми решениями:
14
Разница между выделенной памятью и общей памятью графического процессора? |
|
3410 / 1829 / 489
Регистрация: 28.02.2015
Сообщений: 3,696
|
|
| 06.02.2017, 18:51 | |
|
1
|
|
|
56 / 2 / 0
Регистрация: 19.10.2015
Сообщений: 98
|
|
| 06.02.2017, 19:01 [ТС] | |
|
По идее функция возвращает адрес созданного блока памяти
0
|
|
|
3410 / 1829 / 489
Регистрация: 28.02.2015
Сообщений: 3,696
|
||
| 06.02.2017, 19:24 | ||
|
Функция возвращает сегментный адрес, грузите его в сегментный регистр, ну а дальше как обычно в модели small.
2
|
||
|
56 / 2 / 0
Регистрация: 19.10.2015
Сообщений: 98
|
|
| 06.02.2017, 19:49 [ТС] | |
|
Хех! А у меня то tiny)) Но я нашел один вариант! Хотя это очень странно, но я смог оперировать с этим адресом с помощью stos.. А странность в том, что у меня после команды stos значение ax загружается не только по адресу
ES:DI, но и по адресу ds:DI. Почему так я ума не приложу! Ведь копируется только в ES! Почему вдруг скопировалось еще и в DS? Хотя мне это очень помогло.. Но тут явно что-то не так..Добавлено через 3 минуты Стой, стой! Сегментный! Значит это не смещение, а целый сегмент?! Что-то я тогда не понимаю.. Зачем тогда указывать размер в BX, если все равно выделяется целый сегмент? Или выделяется кол-во параграфов из BX, считая от начала сегмента? Вот сейчас, честно говоря, запутался совсем)))
0
|
|
|
Asm/C++/Delphi/Py/PHP/VBA
|
|||||||||||||||||
| 07.02.2017, 00:31 | |||||||||||||||||
![]() Код в студию, чтобы не гадать на кофейной гущи. Название модели - tiny, small и т.д. - это всё условно.
Типа такого:
1
|
|||||||||||||||||
|
19 / 187 / 0
Регистрация: 17.06.2013
Сообщений: 2,163
|
||
| 07.02.2017, 08:36 | ||
|
То надо сначало, перед работая с регистрами, начало скопировать то что в них было, и после использования вернуть это на место. Мне почему то всегда так приходится... А как, почему, я не спрашивался. У вас по моему называется... Что то вроде попытки написать стек.
1
|
||
|
Модератор
|
|
| 07.02.2017, 08:46 | |
|
Ixmil, то, о чём вы говорите - соглашение об использовании регистров в конкретном компиляторе.
1
|
|
|
19 / 187 / 0
Регистрация: 17.06.2013
Сообщений: 2,163
|
|||||
| 07.02.2017, 10:14 | |||||
|
Mov EAX, [EBX]; Добавлено через 19 минут Добавлено через 1 час 7 минут Всякие недокументированные команды, я бы вообще сбросил со счетов, и писал бы длиннее но без них. А если вам городят о наикротчайшем коде, от того с повышенным КПД. То знаете есть такие иллюзии. Когда одно кажется не тем, что на деле. И КПД определить - как то очень сложно, а не просто.
0
|
|||||
|
3410 / 1829 / 489
Регистрация: 28.02.2015
Сообщений: 3,696
|
|||
| 07.02.2017, 11:07 | |||
1
|
|||
|
3410 / 1829 / 489
Регистрация: 28.02.2015
Сообщений: 3,696
|
||
| 07.02.2017, 11:34 | ||
|
Добавлено через 10 минут Ixmil, 1)Давайте не будем путать чистый ассемблер и встроенный. Несмотря на их схожесть. При работе со встроенным асмом, основную работу за Вас выполняет компилятор ЯВУ, в читстом всё должен продумать кодер. 2)Это не что то вроде... Память может понадобится в большенстве случаях, поэтому не видя кода говорить о каких-то стеках нельзя.
1
|
||
|
Asm/C++/Delphi/Py/PHP/VBA
|
||||||||||||||||||||||||||||||||||
| 07.02.2017, 14:45 | ||||||||||||||||||||||||||||||||||
|
p.s. В 64-битных кроме rbx, rsi, rdi, rbp, rsp сохраняются ещё r12..r15, xmm6..xmm15, если кому интересно...
heap, а вот в tasm/masm с этим сложно. В tasm вообще ничего нет, а в masm (link.exe) даже параметр /heap никакого эффекта не оказывает...Добавлено через 22 минуты Кстати, забыл сказать про стек. В com-программе стек находится в конце сегмента кода (SS=CS). Если памяти выделено >= 64Кб, то sp=0FFFEh. Если меньше, то sp<0FFFEh. Таким образом, для надёжности при использовании большого кол-ва памяти внутри сегмента кода (т.е. если максимум нужно заюзать 64Кб – размер кода – 256 на PSP – размер стека) нужно делать проверку:
В общем вот так:
1
|
||||||||||||||||||||||||||||||||||
|
56 / 2 / 0
Регистрация: 19.10.2015
Сообщений: 98
|
|
| 07.02.2017, 20:05 [ТС] | |
|
Так, кажется большинство вопросов отпали!) Но появился очень интересный: что вообще делает функция 48h? Выделяет памяти за пределами программы, тем самым увеличивая доступную память? Непонятно также зачем использовать 4Ah, если она просто расширяет блок? Можно ведь контролировать размер блока при его создании, а максимальный размер блока, как я понимаю, превысить нельзя. (4Ah нужна скорей для сокращения блока, отведенного для программы) А насчет кода - нет смысла его прикреплять. Обычная комка (на данном этапе). Блок нужен для функции 0Ah (ввод строки). Мог бы сделать простой массив, но зачем-то решил заморочиться))).. Воот.. А теперь у меня уже спортивный интерес. Как видно эти функции - явный пробел в знаниях!
0
|
|
|
Asm/C++/Delphi/Py/PHP/VBA
|
||
| 07.02.2017, 21:14 | ||
Сообщение было отмечено NEWd как решение
РешениеДля функции 0Ah ничего не нужно, никаких блоков памяти выделять. Если ты делаешь прогу формата COM, у тебя памяти будет предостаточно. И уж 80 байт тебе точно хватит на ввод строки. Если EXE, то там требуемый объём будет заложен в заголовок, тем более можно не беспокоиться...
1
|
||
|
56 / 2 / 0
Регистрация: 19.10.2015
Сообщений: 98
|
|
| 07.02.2017, 21:21 [ТС] | |
|
Спасибо за помощь!)
0
|
|
| 07.02.2017, 21:21 | |
|
Помогаю со студенческими работами здесь
15
Могут ли два приложения пользоваться одной и той же выделенной памятью?
Сегментная адресация памяти Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут
Суть:
- Группа наркоманов из 10 человек.
- Только один инфицирован ВИЧ.
- Колются одной иглой.
- Колются раз в день.
- Колются последовательно через. . .
|
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
|
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
|
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . .
а удачный момент так и не приходит.
|
|
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица.
Задача: зафиксировать три левых колонки в отчете.
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
/ / . . .
|
Настройки VS Code
Loafer 13.04.2026
{
"cmake. configureOnOpen": false,
"diffEditor. ignoreTrimWhitespace": true,
"editor. guides. bracketPairs": "active",
"extensions. ignoreRecommendations": true,
. . .
|
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2.
Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива.
Было так:. . .
|
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2.
Задача: реализовать контроль корректности заполнения дат назначения. . .
|