|
Виж темите без отговор | Виж активните теми
Дата и час: Пон Юли 27, 2026 12:00 pm
|
Страница 1 от 1
|
[ 4 мнения ] |
|
| Автор |
Съобщение |
|
leotron
Ранг: Минаващ
Регистриран на: Пон Ное 28, 2005 10:49 am Мнения: 86 Местоположение: Русе
|
 Директен достъп до памет
Работя със средата Borland C++ Builder 6. Искам да направя следното:
*int *p;
p=800; // адрес 800
*p=12; // запиши 12 на адрес 800
Мисля че това е и равносилно на нещо от сорта
asm{
mov eax,10
mov esi,eax
mov [esi],11
}
И в двата случая ми дава "Access violation..."
С две думи искам след като знам определен адрес в паметта, да мога да чета и да записвам от/в този адрес.
Пробвах това с едно досовско С, и там нямаше проблем. Само че там адресацията на паметта е 16-битова, а на мен ми трябва 32-битова.
Това което си мисля е да не би да има значение реален/защитен режим и ако да, как да реша проблемът с прекия достъп до паметта в Borland C++ Builder 6.
Благодаря
|
| Съб Мар 21, 2009 11:56 am |
|
 |
|
syscop
Ранг: Форумен бог
Регистриран на: Пет Юни 03, 2005 9:39 pm Мнения: 2277
|
Грешката говори сама за себе си: Access violation... - нарушил правата за достъп до тая памет - в общия случай тя не е твоя !!!. Това, че в DOS можеш да омажеш цялата памет, не ти дава същите възможности и за всяка друга OS. Ако искаш да пипаш директно в паметта трябва да имаш определени права за тая памет.
|
| Съб Мар 21, 2009 12:35 pm |
|
 |
|
RM
Ранг: Почетен член
Регистриран на: Нед Окт 19, 2008 7:26 pm Мнения: 672
|
Единствения начин който знам е:
#include <dos.h>
void pokeb (unsigned int segment, unsigned int offset, char value);
Доколкото съм запозна адресите до 1000 се използват за вектори на прекъсвания на ОS-a
|
| Съб Мар 21, 2009 1:22 pm |
|
 |
|
logi
Ранг: Минаващ
Регистриран на: Нед Окт 02, 2005 9:02 pm Мнения: 73 Местоположение: Варна
|
В защитен режим няма как да стане, там адресите в програмата и паметта не се съвпадат. Но има начин да се направи 32 битов достъп в реален режим (разбирай чист ДОС) - потърси за voodoo memory model
|
| Съб Мар 21, 2009 5:09 pm |
|
|
|
Страница 1 от 1
|
[ 4 мнения ] |
|
Кой е на линия |
Потребители разглеждащи този форум: 0 регистрирани и 1 госта |
|
Вие не можете да пускате нови теми Вие не можете да отговаряте на теми Вие не можете да променяте собственото си мнение Вие не можете да изтривате собствените си мнения Вие не можете да прикачвате файл
|
|