Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.04.2017, 09:07   #31
alexzk
Форумчанин
 
Регистрация: 12.04.2017
Сообщений: 889
По умолчанию

тут я фиг его, какой протокол с платой...там шин валом...

1. Чтение/запись через порты и команды (например, I2c)
2. DMA - плата "замещает" часть адресов компа, и, когда она включена, запись в "память" по указателю ведет к записи в плату (так видео работают карты)
3. ....дофига еще.
alexzk вне форума Ответить с цитированием
Старый 28.04.2017, 09:22   #32
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,331
По умолчанию

Цитата:
Сообщение от седьмой Посмотреть сообщение
как в цикле на с++ прочитать данные из первых 10 адресов операционной памяти ПК?
Ищите макросы MK_FP, FP_SEG, FP_OFF и прочитайте про организацию памяти в DOS.
waleri вне форума Ответить с цитированием
Старый 28.04.2017, 09:26   #33
седьмой
Форумчанин
 
Регистрация: 17.07.2012
Сообщений: 140
По умолчанию

Цитата:
Сообщение от alexzk Посмотреть сообщение
тут я фиг его, какой протокол с платой..
нет!!! я конечно не про плату , а про обычную оперативную память, просто раз уж начал разбираться, не хочется бросать, хочется понять, вот нашел такой пример
Код:
TYPE *link = (TYPE*)0x400100; // указатель на переменную типа TYPE
TYPE value = *link; // Получаем значение
пишу вот так
Код:
...
fin=fopen("1.txt","w");
...
char *link=0x000000;
char val=*link;
fprintf(fin,"адрес %с; данное %с\n",link,val);
...
выдает ошибку - не нравится присвоение адреса переменной link, где я ошибся не подскажете?

Последний раз редактировалось седьмой; 28.04.2017 в 09:30. Причина: описка
седьмой вне форума Ответить с цитированием
Старый 28.04.2017, 09:31   #34
седьмой
Форумчанин
 
Регистрация: 17.07.2012
Сообщений: 140
По умолчанию

Цитата:
Сообщение от waleri Посмотреть сообщение
Ищите макросы MK_FP, FP_SEG, FP_OFF и
спсибо поищу!
седьмой вне форума Ответить с цитированием
Старый 28.04.2017, 09:43   #35
седьмой
Форумчанин
 
Регистрация: 17.07.2012
Сообщений: 140
По умолчанию

ну вот нашел
Код:
#include <stdio.h>
#include <dos.h>
#include <stdlib.h>
int main(void)
{
char far *ptr;
ptr = (char far *) malloc(100);
printf("segment:offset of ptr: %u %u", FP_SEG(ptr), FP_OFF(ptr));
return 0;
}
вышел результат Сегмент:Смещение 12591 4. Не то что-то вышло, сегмент я еще могу допустить что этот, а вот смещение 100 должно быть, а не 4 и потом где данное по этому адресу? Хотя, данное я не вывел сам, еще был 3й макрос, ок. Но почему смещение 4е? такое ощущение что макрос не понял что мы число 100 взяли в десятчном виде, он взял его в 2сс и перевел в 4.
седьмой вне форума Ответить с цитированием
Старый 28.04.2017, 10:15   #36
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,331
По умолчанию

Цитата:
Сообщение от седьмой Посмотреть сообщение
а вот смещение 100 должно быть, а не 4
С чего вы взяли, что смещение должно быть 100? В 16 битном режиме для каждого адреса памяти существуют 4096 комбинаций сегмент:смещение, указывающие на этот адрес. Какой из них выбрал ваш компилятор никто не знает.
В десятичном виде печатается, потому что вы так указали - процессор не берет данные в "десятичном" или ином виде - они всегда двоичны.
Изучите архитектуру 8086 и основы языка С, иначе только будете терять время.
waleri вне форума Ответить с цитированием
Старый 28.04.2017, 10:22   #37
alexzk
Форумчанин
 
Регистрация: 12.04.2017
Сообщений: 889
По умолчанию

Цитата:
Сообщение от седьмой Посмотреть сообщение
ну вот нашел
Код:
#include <stdio.h>
#include <dos.h>
#include <stdlib.h>
int main(void)
{
char far *ptr;
ptr = (char far *) malloc(100);
printf("segment:offset of ptr: %u %u", FP_SEG(ptr), FP_OFF(ptr));
return 0;
}
вышел результат Сегмент:Смещение 12591 4. Не то что-то вышло, сегмент я еще могу допустить что этот, а вот смещение 100 должно быть, а не 4 и потом где данное по этому адресу? Хотя, данное я не вывел сам, еще был 3й макрос, ок. Но почему смещение 4е? такое ощущение что макрос не понял что мы число 100 взяли в десятчном виде, он взял его в 2сс и перевел в 4.
Код:
#include <stdio.h>
#include <dos.h>
#include <stdlib.h>
int main(void)
{
char far *ptr;
ptr = (char far *) malloc(100);
printf("segment:offset of ptr: %u %u", FP_SEG(ptr), FP_OFF(ptr));
free(ptr);  //<----------------
return 0;
}
Так нада, а то под досом скоро ребутится прийдется, дос автоматом память не чистит после вас. Следущий запуск даст другие адреса (т.к. старые остались заняты).
alexzk вне форума Ответить с цитированием
Старый 28.04.2017, 10:35   #38
седьмой
Форумчанин
 
Регистрация: 17.07.2012
Сообщений: 140
По умолчанию

Цитата:
Сообщение от waleri Посмотреть сообщение
С чего вы взяли, что смещение должно быть 100?
я это взял с того, что при написания драйвера на ассемблере код программы начинается со смещения 100h, вот пример
Код:
.MODEL tiny
.386
.DATA
.CODE
org 100h
START:
STI ; разрешаю аппаратные прерывания
...
вот пояснение к этому
Цитата:
В мс дос при запуске com файла первые 100H байт перед запущенным кодом резервируется под разного рода управляющие структуры. Потому вся адресация внутри кода должна начинаться с смещением 100H байт.
Директива org 100H как раз и говорит компилятору что всю адресацию внутри кода нужно сместить именно на эти 100H байт.
А что изучать мне и когда я сам разберусь, не переживайте
седьмой вне форума Ответить с цитированием
Старый 28.04.2017, 10:38   #39
седьмой
Форумчанин
 
Регистрация: 17.07.2012
Сообщений: 140
По умолчанию

Цитата:
Сообщение от alexzk Посмотреть сообщение
дос автоматом память не чистит после вас.
самые первые адреса, что в досе, что в винде, что в линуксе... грузятся данными из биоса и поэтому они постоянные, и меняться не могут... да кажется тему можно закрывать, спасибо всем за помощь.
седьмой вне форума Ответить с цитированием
Старый 28.04.2017, 11:50   #40
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,331
По умолчанию

Цитата:
Сообщение от седьмой Посмотреть сообщение
А что изучать мне и когда я сам разберусь, не переживайте
Ну как знаете, желаю удачи!
waleri вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Данные вводятся на веб странице, но хранятся в .... Ципихович Эндрю Общие вопросы Web 35 23.09.2016 08:10
Данные о температуре воздуха и количестве осадков за декаду апреля хранятся в массивах. Определить количество осадков... zzz99 Помощь студентам 8 13.03.2014 17:33
Байты или то, как хранятся данные RussDragon Общие вопросы C/C++ 10 11.06.2013 08:50
Дан массив, в котором хранятся данные о расписании поездов, определить поезда на станции (C++) nurtay1994 Общие вопросы C/C++ 1 29.04.2013 08:26
где хранятся данные при работе с dll ? xrob Общие вопросы Delphi 17 19.04.2013 23:18