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

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

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 03.11.2009, 16:40   #1
Познающий
Форумчанин
 
Аватар для Познающий
 
Регистрация: 09.05.2009
Сообщений: 162
По умолчанию Ошибка при написании ассемблеровского кода на Визе 6.0

Всем привет!
Перехожу на ассемблер
только он сопротивляется
я написал код

void main(){

__asm{
Page 60,112
TITLE A04DEFIN(EXE)

DATASEG SEGMENT PARA 'DAT'
BYTE1 DB ?
BYTE2 DB 48
BYTE3 DB 30H
ENDS

CODESEG SEGMENT PARA 'COD'
MAIN PROC FAR
ASSUME DS:DATASEG
MOV AX,DATASEG
MOV DS,AX
MOV AX,BYTE2
MAIN ENDP
CODESEG ENDS
ENS MAIN
}
}

Делал пока все не очень обдуманно, но тут я просто хотел объявить пару переменных как десятичнoе и шестнадцатиричное и занести в них значения. Нажал "компайль!" выдал мне столько ошибок "error C2400: inline assembler syntax error in 'opcode'; found 'DB'" сколько строк внутри асм

В чём дело?
С наилучшими пожеланиями.
Познающий вне форума Ответить с цитированием
Старый 03.11.2009, 17:00   #2
Ivan_32
somewhere else
Участник клуба
 
Аватар для Ivan_32
 
Регистрация: 17.07.2008
Сообщений: 1,409
По умолчанию

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

int main()
{
unsigned int a=2,b=3,c=0;
_asm
{
mov eax,a
add eax,b
mov c,eax
}
}

PS: Синтаксис используется MASM-овский.
PPS: Если не ошибаюсь main не может быть void-овой. Для написания программ под DOS лучше использовать обычный ассемблер, а не смесь из С и АСМ.
"Тяжело в учении, легко в бою" - А.В. Суворов
Ivan_32 вне форума Ответить с цитированием
Старый 03.11.2009, 18:46   #3
Познающий
Форумчанин
 
Аватар для Познающий
 
Регистрация: 09.05.2009
Сообщений: 162
По умолчанию

написал аналог по примеру
Компайлю...
Ну с Богом...
А почему еах а не ах? Я юзал ах когда переписывал компайлер говорил "operand size conflict". смысл ошибки ясен, но не понимаю что такое еах и можно ли его юзать для флоут?))))
С наилучшими пожеланиями.
Познающий вне форума Ответить с цитированием
Старый 03.11.2009, 19:09   #4
Goodwin98
equ asm
Участник клуба
 
Аватар для Goodwin98
 
Регистрация: 02.05.2009
Сообщений: 1,605
По умолчанию

eax - это 32 разрядный регистр, ax - это его нижняя половинка, т.е. 16 разрядный.
Переменная типа int так же занимает 32 бита, поэтому для операций с ней нужно пользоваться eax,ebx,ecx и т.п. регистрами
Какой вопрос - такой ответ. Не забываем пользоваться поиском, гуглом.
Помощь в выполнении работ по ассемблеру ICQ:2725322O4

Последний раз редактировалось Goodwin98; 03.11.2009 в 19:11.
Goodwin98 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Нудна помошь при написании кода. Denisko Помощь студентам 4 06.06.2009 23:07
Помогите в написании кода... sobol556 Паскаль, Turbo Pascal, PascalABC.NET 0 23.03.2009 19:49
При написании кода не открывается список типов, объектов. garic Microsoft Office Excel 3 14.03.2009 18:56
Нужна помощь в написании кода Михаил Юрьевич Общие вопросы Delphi 2 27.12.2007 09:32