Передача данных с Ассемблера в UL |
Ответить | Страница <123 |
Автор | |
Новичок Присоединился: 05 Март 2007 Категория: Kazakhstan Online Status: Offline Публикации: 14 |
Опубликовано: 13 Март 2007 15:50 |
. Все перепробовал (текст программы скопировал подчистую). Програмку на Ассе-ре компилирую только TASMом. При компоновки exe-шника в опциях/Target Compiler использую 80x86 processors family compiler. Переменные все одинакового типа ( имеется в виду что в UL объявлены как глобальные и сетевые, только Со1-Integer, а DECSH1-Float) Эфект тот же. Co1 увеличивается, а DECSH1 =0 В разделе Конфигурация: Модель/Модель центрального процессора - IBM-PC Compatible CPU Card; Модуль ЦПУ/Система команд 80386, Выравнивание - 16 бит, Сопроцессор - нет; Модули УСО - ничего нет кроми Multi I/O Card; Multi Card выбран компорт 1 (его базовый адрес и прерывание). Вроде бы и ошибиться не где, а результата нет. P.S.:Программка на UL, ASMe вместе с .ОBJ весят меньше 3 Кбайт
|
|
Всё знать не возможно, но обовсем можно иметь понятие.
|
|
Действительный член Присоединился: 08 Март 2006 Категория: Russian Federation Online Status: Offline Публикации: 440 |
|
Кое что прояснилось. mov al,BYTE PTR es:[смещение_переменной_в_сегменте__DATA_SEG] ; или просто имя переменной Об'явление GROUP интересным образом перестраивает нумерацию адресов. Как-будто образуется некая общая область памяти, и смещения нумеруются непрерывно от начала этой области. Причем сами сегменты физически остаются на своих местах по сравнению с тем, когда они были не сгруппированы, только меняется как-бы система отсчета - некий прообраз локальной плоской модели памяти. Из всего этого получается, что выражение SEG DGROUP совершенно корректно и даст нужный результат. mov al,BYTE PTR VAR1 GROUP как и другие директивы призвана повысить удобство работы. Но как всякая палка - аб двух концах, лишнее средство, в определенных случаях может может и усложнить дело, внести путаницу. Решать - по месту. С уважением, SAN. |
|
Действительный член Присоединился: 08 Март 2006 Категория: Russian Federation Online Status: Offline Публикации: 440 |
|
Еще одно замечание. Стандартный TASM ругается если сегментам дать имена CONST и STACK - это зарезервированные слова. С уважением, SAN.
|
|
Профили участников
Послать частное письмо
Поиск публикаций участников
Посетить домашнюю страницу участника
Добавить в список приятелей
Действительный член Присоединился: 25 Апрель 2006 Категория: Russian Federation Online Status: Offline Публикации: 116 |
|
<Стандартный TASM ругается если сегментам дать имена CONST и STACK - это зарезервированные слова.> Все правильно! Но в данной теме разговор идет о подключаемом к UL obj, поэтому Вам нет необходимости объявлять в своем модуле эти сегменты и компилируете вы TASM. А по поводу моего примера программы для ADAM 5510 на ASM, то он компилируется MASM и проблем нет! В этом и особенность, подключаемые модули на TASM, полная программа на MASM. И на счет ... Не знаю почему, но я когда начинал делать программы для UL, то этот код не срабатывал и я пришел к <Seg_DGROUP DW SEG DGROUP> |
|
Vel
|
|
Действительный член Присоединился: 08 Март 2006 Категория: Russian Federation Online Status: Offline Публикации: 440 |
|
Да , MASM компонует сегменты также как и TASM, и сквозная нумерация смещений в группе сегментов такая же. И MASM вырабатывает более оптимальный по размеру файл программы. MASM не принимает команду push SEG DGROUP. Но можно воспользоваться другой конструкцией, и локальную переменную заводить опять-же не обязательно : ... mov al, BYTE PTR DECSH1_VAR Подумаем еще. С уважением, SAN.
|
|
Профили участников
Послать частное письмо
Поиск публикаций участников
Посетить домашнюю страницу участника
Добавить в список приятелей
Действительный член Присоединился: 25 Апрель 2006 Категория: Russian Federation Online Status: Offline Публикации: 116 |
|
<RomanS> Попробуйте поменять тип переменной. Сделайте DECSH1-Integer и перекомпилируйте программу. Возможно, из за нарушения структуры числа с плавающей запятой у вас и отображается 0. Попробуйте с типом Integer. <sanwork> Seg_DGROUP DW SEG DGROUP это не локальная переменная, это переменная объявленная в коде программы и действительна на протяжении всего периода работы программы. А локальные переменные создаются в стеке и действительны на время выполнения функции. |
|
Vel
|
|
Новичок Присоединился: 05 Март 2007 Категория: Kazakhstan Online Status: Offline Публикации: 14 |
|
.........Ура!!! Заработала четко, как часы,сразу после того как переменую типа FLOAT( обрабатываемую в Ассе-ре) заменил на INTEGER в UL Добью этот проэкт и перехожу на UL32. Там, как я видел, при выборе программы типа ext сам текст в UL писать можно, только язык выбрать нужно. И в obj компилировать не надо. Правда там могут быть свои особенности, но проблемы надо решать по мере их возникновения... P.S.: Большое спасибо за помощь и участие... |
|
Всё знать не возможно, но обовсем можно иметь понятие.
|
|
Ответить | Страница <123 |
Переход на форум | Права доступа на форуме Вы не можете публиковать новые темы в этом форуме Вы не можете отвечать на сообщения в этом форуме Вы не можете удалять Ваши сообщения на этом форуме Вы не можете редактировать Ваши сообщения на этом форуме Вы не можете создавать голосования на этом форуме Вы не можете выражать своё мнение в голосованиях на этом форуме |