Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» Assembler

Автор: A1exSun
Дата сообщения: 06.08.2011 17:47
akaGM
На строке "pop es":

Цитата:
First chance exception at $750DB9BC. Exception class EAccessViolation with message 'Access Violation'. Process Project1.exe (5296)

Как в Turbo C проверить этот код? В нем на "asm {" ругается, там как-то по другому...
Автор: akaGM
Дата сообщения: 06.08.2011 17:59
A1exSun
а что ты хотел, нельзя реальные сегментные регистры писать в 7-ке...

Цитата:
Как в Turbo C проверить этот код?

ну так запусти в среде...

Цитата:
В нем на "asm {" ругается, там как-то по другому...

не может быть, проверяй внимательнее...

ну не сможешь ты корректно и полноценно в ХЕ писать/отлаживать 16-битные приложения, использующие столь низко-уровневые функции...
Автор: Prober
Дата сообщения: 06.08.2011 18:33
A1exSun
Цитата:
Как в Turbo C проверить этот код?
Если речь о борландовском турбо си конца 80-х, то там есть функции
Код: int peek(unsigned segment, unsigned offset);
char peekb(unsigned segment, unsigned offset);
Автор: akaGM
Дата сообщения: 06.08.2011 18:38
Prober
именно их он хочет переписать, чтобы они работали в Builder образца 2010

http://forum.ru-board.com/topic.cgi?forum=33&topic=4338&start=5840#lt
типа Сишники не помогли...
Автор: A1exSun
Дата сообщения: 06.08.2011 19:37

Цитата:
не может быть, проверяй внимательнее...
ошибка in-line assembly not allowed
Цитата:
Если речь о борландовском турбо си конца 80-х, то там есть функции
да знаю
Цитата:
их он хочет переписать, чтобы они работали в Builder образца 2010
в точку
Цитата:
ну не сможешь ты корректно и полноценно в ХЕ писать/отлаживать 16-битные приложения, использующие столь низко-уровневые функции...
ну почему, если:
Цитата:
оказывается режим совместивости с 9x настолько крут, что позволяет прогам работать даже с портами, как это было в реальных 9x, несмотря на ядро NT
с портами вышло ведь...
Автор: akaGM
Дата сообщения: 06.08.2011 19:56
A1exSun

Цитата:
ошибка in-line assembly not allowed

это не ошибка кода, а ошибка твоих установок,
наверняка рядом с Турбо С должен лежать tasm...

Цитата:
с портами вышло ведь..

не всё коту...
Автор: A1exSun
Дата сообщения: 06.08.2011 20:03

Цитата:
наверняка рядом с Турбо С должен лежать tasm...

опа, а это я не знал
Автор: akaGM
Дата сообщения: 06.08.2011 20:09
A1exSun
легко проверить мою [не]правоту
компильни хотя бы вот такую пустышку
void main() {}

tcc -B filename.c
Автор: A1exSun
Дата сообщения: 06.08.2011 20:18
akaGM
смысл? собралось

какой и где взять tasm?


Цитата:
tcc -B filename.c

ctrl + f9 =)
Автор: akaGM
Дата сообщения: 06.08.2011 20:24
A1exSun

Код: void main() {
asm { mov al, 10;}
}
Автор: A1exSun
Дата сообщения: 06.08.2011 20:53

Цитата:
а это?

in-line assembly not allowed
тасма рядом с тс нет, ибо не знаю какой нужен, нашел штуки 3 разных
Автор: akaGM
Дата сообщения: 06.08.2011 20:59
A1exSun

Цитата:
тасма рядом с тс нет, ибо не знаю какой нужен

кидай самый свежий 16-разрядный...

сравни в чистом С, работает? равны?

Код: unsigned char bios, biosOrig;

unsigned char far * ptrBios = (unsigned char far *)0xF000FFFE;
bios = *ptrBios;
boisOrig = peekb(0xF000, 0xFFFE);
Автор: Prober
Дата сообщения: 07.08.2011 05:37
A1exSun
Цитата:
Платформа - MS-DOS. Если точнее, приложение win32 будет запускаться в режиме совместимости с Win95.

akaGM
Цитата:

Код: unsigned char bios;
asm {
push 0f000h
pop es
mov bx, 0fffeh
mov al, es:[bx]
mov bios, al
}
Автор: akaGM
Дата сообщения: 07.08.2011 13:04
Prober
хм...

Цитата:
Команды изменения сегментных регистров - привилегированные и в Win32-приложениях работать не будут.
это ты A1exSun скажи, я ему об этом в каждом посте повторяю...
а я что, меня попросили написать 16-бит приложение, я написал, остальное мне по фигу...
Автор: MERCURY127
Дата сообщения: 07.08.2011 13:48
A1exSun, тот байт, что ты пытался прочитать, называется IBM PC ID Code aka machine model byte (BDA = BIOS data area):
f000:fffe 1 IBM computer-type code; see also BIOS INT 015H 0C0H.
0ffH = original PC
0feH = XT or Portable PC
0fdH = PCjr
0fcH = AT (or XT model 286) (or PS/2 Model 50/60)
0fbH = XT with 640K motherboard
0faH = PS/2 Model 30
0f9H = Convertible PC (easily converts into a paperweight)
0f8H = PS/2 Model 80
09AH = Compaq XT, Compaq Plus;
030H = Sperry PC;
02DH = Compaq PC, Compaq Deskpro.
на ВСЕХ машинах, способных тянуть твой Билдер 2010, он равен 0xFC, и нечего тебе так расшибаться, пытаясь побороть защиту памяти (режим эмуляции win95 не распространяется на память, только на порты, и то не на все). Напрямую его можно прочитать из реестра HKLM\HARDWARE\DESCRIPTION\System\Identifier="AT/AT COMPATIBLE", еще можно покопать в сторону WMI http://delphi.xcjc.net/viewthread.php?tid=46207

Добавлено:
*рука/лицо* это ужас... ну зачем, зачем в билдере 2010 ломиться в реальный режим ДОСа??? Зачем пытаться читать давно бессмысленный байт???
Автор: A1exSun
Дата сообщения: 07.08.2011 14:08
MERCURY127

Цитата:
на ВСЕХ машинах, способных тянуть твой Билдер 2010, он равен 0xFC

Этот байт просто ради примера.

Цитата:
режим эмуляции win95 не распространяется на память, только на порты, и то не на все

Вот этого не знал. А COM порты (3F8h и 2F8h вроде) эмулируются?

Цитата:
зачем в билдере 2010 ломиться в реальный режим ДОСа??? Зачем пытаться читать давно бессмысленный байт???

2011 (XE). Потому что лабораторная есть такая и лень писать в Turbo C в виртуалке.
Автор: akaGM
Дата сообщения: 07.08.2011 14:11
MERCURY127
не гноби парня :) его и так все пинают за это, щас я попробую объяснить...

он пишет прогу для тестирования студентов (будучи сам студентом, морально-этические моменты оставляем за бортом ;)
я не уверен, стоят ли даже i386 на этих машинах для тестирования
конечная сборка будет происходить на Турбо С 2.0
сам же он сидит на Билдире2010 и хочет на нём и оставаться, чтобы ваять эту прогу...

всё...

о... опоздал ровно на три минуты...
Автор: A1exSun
Дата сообщения: 07.08.2011 14:20
akaGM

Цитата:
он пишет прогу для тестирования студентов (будучи сам студентом, морально-этические моменты оставляем за бортом

Дружище, я ее 3 месяца назад сдал на 5!
И ею теперь пользуется преподша, чему я очень рад, что не как остальные работы отправляются в корзину.
Автор: akaGM
Дата сообщения: 07.08.2011 14:22
A1exSun
пРоздравляю

господи, а теперь-то чего тебе задали, зачем в БИОС-то лезть?
Автор: A1exSun
Дата сообщения: 07.08.2011 14:26
akaGM
Архитектура... Скорее всего будет что-то с COM портом, чат на несколько компьютеров или передача файлов, через месяц узнаю.
А за bios это я лабу одну смотрел, стало интересно. inportb() и outportb() удалось ведь "скопировать" в билдер.
Автор: MERCURY127
Дата сообщения: 07.08.2011 14:28
A1exSun

Цитата:
2011 (XE). Потому что лабораторная есть такая и лень писать в Turbo C в виртуалке.

Лень матушка и создала это чудовище - Билдер. Но раз уж тебе нужно читать память - есть два варианта 1) реальный режим либо V86 - любой ДОСовский компилятор, немного старых книг и вперед; 2) плоский защищенный режим третьего кольца (user mode) - любой современный компилятор плюс гугль и вперед. Важно их не перепутать и заранее определить целевую среду. И еще, прежде чем что то писать/читать из памяти - нужно этот самый участок памяти себе выделить - средствами языка или ОСи... Иначе будут печальные последствия как для системы, так и для разработчика...
akaGM

Цитата:
я не уверен, стоят ли даже i386 на этих машинах для тестирования - конечная сборка будет происходить на Турбо С 2.0

%) надеюсь ему не нужно будет учить EMS/XMS вызовы...


Добавлено:

Цитата:
А за bios это я лабу одну смотрел, стало интересно. inportb() и outportb() удалось ведь "скопировать" в билдер.

какой ты любопытный ну молодец, если что, спрашивай - постараюсь помочь, один хрен мои знания без дела лежат...

Добавлено:

Цитата:
Архитектура... Скорее всего будет что-то с COM портом, чат на несколько компьютеров или передача файлов, через месяц узнаю.

более чем уверен что дело ограничится файлами, ибо чат на ком порту - макс две машины связать может...
Автор: A1exSun
Дата сообщения: 07.08.2011 14:37

Цитата:
более чем уверен что дело ограничится файлами, ибо чат на ком порту - макс две машины связать может...

На материнке может быть до 4 портов (хоть я видел только 2), делаем приложение-сервер и клиент, а лучше 2 в 1, итого имеем 5 машин
Автор: akaGM
Дата сообщения: 07.08.2011 14:42
MERCURY127

Цитата:
%) надеюсь ему не нужно будет учить EMS/XMS вызовы...

такое ощущение, что их препод (типа нас), решил их провести по тем кругам, кот. сам прошёл...
в Сях там заставлял его клавин скан-код ловить...
мож так и надо? вместо того чтоб бутоны на форму кидать...


Цитата:
один хрен мои знания без дела лежат...

положу хрен в лужу\
пусть лежит до осени\
всё равно не нужен...


но так ведь "до осени"...
Автор: MERCURY127
Дата сообщения: 07.08.2011 14:54

Цитата:
На материнке может быть до 4 портов (хоть я видел только 2), делаем приложение-сервер и клиент, а лучше 2 в 1, итого имеем 5 машин

эмм... это на словах просто, а как ты машины то будешь различать? они же имен не имеют, как в локалке. Тогда уж надо токенринг делать, чтоб каждый клиент генерировал себе уид, и принимал посылки только с соот себе уидом. Серверу тогда достаточно будет просто передавать пакеты по кольцу, и уничтожать те, что сам же послал, после пробежки всего кольца. Короче, придется тебе учить ТокенРинг, сетевую архитектуру, борьбу с коллизиями, итд... наверное будет увлекательно ...

Добавлено:
akaGM

Цитата:
в Сях там заставлял его клавин скан-код ловить... мож так и надо? вместо того чтоб бутоны на форму кидать...

кому это сейчас нужно? сейчас главное побыстрее фигурных кнопок на узорчатый скин накидать, чтоб заказчику показать было что...
Автор: A1exSun
Дата сообщения: 07.08.2011 15:02
MERCURY127
Я думал за одну общую комнату, без личных сообщений. Сервер принимает сообщение и рассылает его на все порты, кроме того откуда оно пришло. Как-то так.

Цитата:
побыстрее фигурных кнопок на узорчатый скин накидать

А вот этого я кстати не умею, хотя уже полгода как куплен последний справочник Архангельского...
Автор: MERCURY127
Дата сообщения: 07.08.2011 15:07
A1exSun
зато на токенринг можно и комнату и лички состряпать, причем на любой машине в кольце хватит двух портов. и не надо заморачиваться с разделением спаренных портов по IRQ...
Автор: akaGM
Дата сообщения: 07.08.2011 15:07
MERCURY127
эт точно...
и прозрачность, прозрачность!

а на самом деле не скажи

getch();

vs

if (!getсh()) getсh();
для эникея всё-таки правильнее...
Автор: A1exSun
Дата сообщения: 07.08.2011 15:08
MERCURY127
Все, заинтриговал...
Где почитать как оно работает? Что-то нигде не найду подробности...
Автор: MERCURY127
Дата сообщения: 07.08.2011 20:38
A1exSun

Цитата:
Token ring — Технология локальной вычислительной сети (LAN) кольца с «маркерным доступом» — протокол локальной сети, который находится на канальном уровне (DLL) модели OSI. Он использует специальный трехбайтовый фрейм, названный маркером, который перемещается вокруг кольца. Владение маркером предоставляет право обладателю передавать информацию на носителе. Кадры кольцевой сети с маркерным доступом перемещаются в цикле.

Ссылка
Автор: A1exSun
Дата сообщения: 07.08.2011 20:45
MERCURY127
Это я читал конечно. Хотелось еще подробнее, про тот маркер из 3 байт и т.д.

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384

Предыдущая тема: .NET GUI компоненты


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.