|
|
|
gumbert |
|
||||||||
Новичок Профиль Группа: Участник Сообщений: 7 Регистрация: 17.12.2007 Где: Волгоград Репутация: нет Всего: нет |
Значится так, возникла необходимость мне сделать несколько лабораторных по ассемблеру.
1. Решить простой примерчик (c+4*d-123)/(1-a/2), но сделать ввод переменных в си, а реализацию решения самого примера на ассемблере. Как это увидел я. Основной файлик lab1.c на си, вызываем в нём функцию res.s на ассемблере. Компилирую командой
Компиляция проходит успешно, но при попытке ввести какие-либо данные, которые удовлетворяют ОДЗ (нпаример a=1 c=1 d=1) вылазит ошибка Floating point exception. В чем именно дело, понять не могу. На что стоит обратить внимание? Еще вопрос, если объявлять переменные a,c, и d не глобально, а в теле main, выдаются вот такие сообщения
так вот, как от этого избавиться? Т.е. как я понял, не передаются аргументы моей функции. Спасибо заранее. Ещё мог напутать с синтаксисом в ассемблере, т.к. лекции у нас по intel ассемблеру. lab1.c
res.s
|
||||||||
|
|||||||||
JackYF |
|
|||
полуавантюрист Профиль Группа: Участник Сообщений: 5814 Регистрация: 28.8.2004 Где: страна тысячи озё р Репутация: нет Всего: 162 |
У меня такое выдавалось недавно при делении на 0. Целых чисел Проверь, на всякий случай. |
|||
|
||||
gumbert |
|
|||
Новичок Профиль Группа: Участник Сообщений: 7 Регистрация: 17.12.2007 Где: Волгоград Репутация: нет Всего: нет |
||||
|
||||
MAKCim |
|
||||
Воін дZэна Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 2 Всего: 207 |
gumbert,
нда...
a, c, d в данном случае передаются через стек код же функции res() его не использует для получения значений переданных переменных
Добавлено через 3 минуты и 23 секунды IDIV делит EDX:EAX на значение заданное регистровым (или адресным) операндом при этом если EAX & 0x80000000 == true, то EDX должен быть равным 0xFFFFFFFF (-1) иначе - нулю -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
||||
|
|||||
gumbert |
|
|||
Новичок Профиль Группа: Участник Сообщений: 7 Регистрация: 17.12.2007 Где: Волгоград Репутация: нет Всего: нет |
||||
|
||||
MAKCim |
|
||||
Воін дZэна Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 2 Всего: 207 |
все прекрасно работает показывай полный код Это сообщение отредактировал(а) MAKCim - 17.12.2007, 22:09 -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
||||
|
|||||
gumbert |
|
||||
Новичок Профиль Группа: Участник Сообщений: 7 Регистрация: 17.12.2007 Где: Волгоград Репутация: нет Всего: нет |
MAKCim, вот теперь работает, спасибо! У меня это выглядит теперь вот так.
Теперь осталось понять что к чему. Кстати, обязательно прототип функции объявлять? И без него работает вроде. |
||||
|
|||||
MAKCim |
|
|||
Воін дZэна Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 2 Всего: 207 |
желательно -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
gumbert |
|
||||
Новичок Профиль Группа: Участник Сообщений: 7 Регистрация: 17.12.2007 Где: Волгоград Репутация: нет Всего: нет |
Ещё одна задачка.
Вычислить выражение (c+4*d-sqr(123*c))/(1-a/2) используя арифметические операции сопроцессора. Причём a и b должны быть int, а c и d float (или double). У меня все переменные double. Как всё таки сделать те что надо int, а те что надо double? Как в данном случае работать со стеком? А то я опять через глобальное объявление переменных пошел... Ещё и в добавок считает неправильно. При a=1, c=1 и d=1 результат должен быть -12,1810730128, а у меня получается -0,200000. Ещё вопрос: в случае арифметического сопроцессора синтаксис тоже наоборот относительно интеловского? Заранее спасибо.
|
||||
|
|||||
MAKCim |
|
|||
Воін дZэна Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 2 Всего: 207 |
нет результат ~ -6.09 т. к (c + 4 * d - sqrt(123 * c)) / (1 - a / 2) = (1 + 4 - sqrt(123)) / (1 - 0) т. к a - это int, то a / 2 = 0, если a = 1 -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
gumbert |
|
|||
Новичок Профиль Группа: Участник Сообщений: 7 Регистрация: 17.12.2007 Где: Волгоград Репутация: нет Всего: нет |
||||
|
||||
gumbert |
|
|||
Новичок Профиль Группа: Участник Сообщений: 7 Регистрация: 17.12.2007 Где: Волгоград Репутация: нет Всего: нет |
делаю a int вообще nan получается...
попытаюсь воспроизвести ход моих рассуждений:
подскажите, пожалуйста, где я не прав? |
|||
|
||||
Правила форума "Asm для Linux/Unix" | |
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, MAKCim. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Asm для Linux/Unix | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |