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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 07.06.2012, 16:26   #1
skanku
Пользователь
 
Регистрация: 20.11.2011
Сообщений: 28
По умолчанию переделать код на ассемблер

Помогите пож. не дуамю что это так сложно для знающего человека, просто я ассемблер даже чуть чуть не знаю
o=s2/3*r;
только эту строчку, она написана на с++ и мне нужна ассемблеровская вставка этого кода
очень прошу срочно
skanku вне форума Ответить с цитированием
Старый 07.06.2012, 16:44   #2
skanku
Пользователь
 
Регистрация: 20.11.2011
Сообщений: 28
По умолчанию

вот что написал я
__asm
{
mov ebx,s2;/конфликт размеров операндов
mov ecx,3;
div ecx;
mov eax,r;//конфликт размеров операндов
mul ecx;
}
skanku вне форума Ответить с цитированием
Старый 07.06.2012, 18:17   #3
Osanve
Пользователь
 
Аватар для Osanve
 
Регистрация: 11.12.2010
Сообщений: 50
По умолчанию

Регистры eax, ebx и т. д. 32х разрядные. Т.е. в случае беззнакового типа (unsigned в C/C++) максимальное число = 4292967296 (тип unsigned long). Если используется знаковый тип, то максимальное число сокращается: 2147483648 (тип signed long). Также, если это число с плавающей запятой, то простой командой mov его в регистр не занести (хотя здесь могу ошибаться).

Теперь по коду.
Команды div и mul неявно используют регистр eax. А так как Вы занесли делимое в регистр ebx, то его Вы точно не разделите. Также эти команды выполняют целочисленное деление и умножение, в противном случае требуется использовать idiv и imul.

Направление я дал, дальше сами.
Osanve вне форума Ответить с цитированием
Старый 08.06.2012, 16:52   #4
DiemonStar
Старожил
 
Регистрация: 08.02.2012
Сообщений: 2,173
По умолчанию

Цитата:
Также, если это число с плавающей запятой, то простой командой mov его в регистр не занести (хотя здесь могу ошибаться).
Однозначно ошибаетесь. В данном случае, команде mov абсолютно параллельно содержимое ячеек памяти, из которых она берёт данные. За содержимым должен следить программист)
Цитата:
Также эти команды выполняют целочисленное деление и умножение, в противном случае требуется использовать idiv и imul.
все эти команды производят целочисленные операции... только первые для беззнаковых чисел, а вторые с учётом знака числа. для операций с плавающей точкой обычно используют сопроцессор.
Правильно поставленная задача - три четверти решения.
DiemonStar вне форума Ответить с цитированием
Старый 09.06.2012, 13:11   #5
Osanve
Пользователь
 
Аватар для Osanve
 
Регистрация: 11.12.2010
Сообщений: 50
По умолчанию

Цитата:
Сообщение от DiemonStar Посмотреть сообщение
Однозначно ошибаетесь. В данном случае, команде mov абсолютно параллельно содержимое ячеек памяти, из которых она берёт данные. За содержимым должен следить программист)
Ну я ведь сказал, что могу ошибаться

Цитата:
Сообщение от DiemonStar Посмотреть сообщение
все эти команды производят целочисленные операции... только первые для беззнаковых чисел, а вторые с учётом знака числа. для операций с плавающей точкой обычно используют сопроцессор.
Да, заклинило меня. Именно это я и имел ввиду.
Osanve вне форума Ответить с цитированием
Старый 18.07.2014, 12:09   #6
AlexVI
Пользователь
 
Регистрация: 25.11.2006
Сообщений: 40
По умолчанию

Цитата:
Сообщение от skanku Посмотреть сообщение
Помогите пож. не дуамю что это так сложно для знающего человека, просто я ассемблер даже чуть чуть не знаю
o=s2/3*r;
только эту строчку, она написана на с++ и мне нужна ассемблеровская вставка этого кода
очень прошу срочно
Так как все таки записать правильно ...
AlexVI вне форума Ответить с цитированием
Старый 18.07.2014, 12:25   #7
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

типы какие для начала.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Переделать в код Delphi!! Настена290 Помощь студентам 2 01.02.2012 15:52
нужна переделать код СИ daimonTM Помощь студентам 0 31.05.2011 23:14
Как переделать код? P®o©omp@s Помощь студентам 2 26.10.2009 19:21
Переделать код Hepri Работа с сетью в Delphi 3 20.08.2009 20:28
Помогите переделать код stayer Общие вопросы Delphi 3 25.10.2008 21:09