Поиск:

Ответ в темуСоздание новой темы Создание опроса
> работа со структурой 
:(
    Опции темы
Ak47black
  Дата 16.9.2009, 19:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2205
Регистрация: 2.12.2005

Репутация: нет
Всего: 0



Здравствуйте.
Столкнулся с трудностью работы над структурой. Точнее неособо хорошо знаю синтаксис
Есть описание структуры
Код

; Mnemonics
s_mAAA        db    'AAA', 0
s_mAAD        db    'AAD', 0
s_mAAM        db    'AAM', 0
s_mAAS        db    'AAS', 0
s_mADC        db    'ADC', 0
...

TOpcodeData struc    
  opMnemonic    dw    0
  opType         db    kNormal
  arg1             db    argNone
  arg2             db    argNone
ends
 
; Opcodes
label    Opcodes    TOpcodeData
    TOpcodeData    <s_mADD, kNormal, argRegMem8, argReg8>        ; 0x00
    TOpcodeData    <s_mADD, kNormal, argRegMem16, argReg16>     ; 0x01
    TOpcodeData    <s_mADD, kNormal, argReg8, argRegMem8>        ; 0x02
    TOpcodeData    <s_mADD, kNormal, argReg16, argRegMem16>    ; 0x03
...

и код
Код

mov al, [(TOpcodeData bx).opMnemonic]

где в регистре bx хранится адрес коголибо элемента из структуры Opcodes.
Хочу загрузить в регистр al, первую букву.
Без этого кода компилируется норм. При компиляции с кодом получаю ошибку
Цитата

**Error** d.asm(172) Need right parenthesis
*Warning* d.asm(172) [Constant] assumed to mean immediate constant

PM MAIL   Вверх
Mikl_
Дата 17.9.2009, 05:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 537
Регистрация: 9.11.2007

Репутация: 8
Всего: 14



Ak47black, 
перед использованием структуры с указателем в bx необходима строка
    assume bx:ptr TOpcodeData 
если далее потребуется использовать bx как обычный регистр -- строка
    assume bx:nothing
PM MAIL   Вверх
Ak47black
Дата 17.9.2009, 18:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2205
Регистрация: 2.12.2005

Репутация: нет
Всего: 0



Неособо получается. Точнее пока не к чему не пришел.
Я представляю что assume надо писать гдето вне кода? Потому что если в коде то не компилируется.
А можно-ли както исправить 
Код

mov al, [(TOpcodeData bx).opMnemonic]

Потому-что в одном исходнике написан очень похожий код, но по идее наверно компилировать надо не с tasm16.


Это сообщение отредактировал(а) Ak47black - 17.9.2009, 18:34
PM MAIL   Вверх
Ak47black
Дата 17.9.2009, 19:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2205
Регистрация: 2.12.2005

Репутация: нет
Всего: 0



........

Это сообщение отредактировал(а) Ak47black - 17.9.2009, 22:23
PM MAIL   Вверх
Mikl_
Дата 18.9.2009, 03:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 537
Регистрация: 9.11.2007

Репутация: 8
Всего: 14



Ak47black, 
Код
assume bx : ptr TOpcodeData 
mov al, [bx].opMnemonic
 smile 
PM MAIL   Вверх
Ak47black
Дата 18.9.2009, 13:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2205
Регистрация: 2.12.2005

Репутация: нет
Всего: 0



Всёравно похожая ошибка.
PM MAIL   Вверх
piritus
Дата 19.9.2009, 14:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 226
Регистрация: 3.1.2007
Где: Сибирь

Репутация: нет
Всего: 3



Попробуй так:
Код

TOpcodeData struc    
  opMnemonic    dw    0
  opType        db    kNormal
  arg1          db    argNone
  arg2          db    argNone
ends

TOD TOpcodeData 1 dup ({s_mADD, kNormal, argRegMem8, argReg8}, \    ; 0x00
                                         {s_mADD, kNormal, argRegMem16, argReg16}, \  ; 0x01
                                         {s_mADD, kNormal, argReg8, argRegMem8}, \    ;0x02
                                         {s_mADD, kNormal, argReg16, argRegMem16})    ; 0x03)

...

.code
    mov al, TOD[bx].opMnemonic


где bx - номер одного из 4-х элементов.
--------------------
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Asm для начинающих"
MAKCim
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой КОД.
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, MAKCim.

 
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Asm для начинающих | Следующая тема »


 




[ Время генерации скрипта: 0.0444 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.