| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Asm для начинающих > Простейшие арифметические примеры |
| Автор: oshilan 6.9.2010, 20:45 |
| Помогите, пожалуйста, практически и наглядным образом разобраться в этом язые, написанием текста программы для решения такого примера: 8*2904+(9*2904)/92=результат разместить где-то в памяти. И желательно решить и 2-ой пример: 1993/(3*93)-6*93*403, чтоб я мог найти различия и понять что к чему. Зараннее благодарен! |
| Автор: Mikl_ 7.9.2010, 04:22 | ||
| oshilan, при написании программы на ассемблере объязательно следует указывать операционную систему под которую пишется задача (DOS, Linux, Win3.11, Win95/96, WinNT/2K/XP/Vista и т.д.) и компилятор (MASM, YASM, FASM и т.д.), а так же, то что ты сам сумел сделать... вспоминаем арифметику 8*2904+(9*2904)/92=726(32+9/23)
|
| Автор: oshilan 7.9.2010, 06:21 |
| Mikl_, спасибо! А за комментарии отдельная благодарность |
| Автор: oshilan 7.9.2010, 06:52 | ||||
Решил решить 2-ой пример 1993/(3*93)-6*93*403 и masm32 выдал такие ошибки:
А вот мой текст программы:
Кто-нибудь знает в чём проблема? |
| Автор: ksili 7.9.2010, 07:27 | ||
компилятор не знает какого размера операнд - байт, слово или двойное слово. Соответственно он не понимает на что умножать - на al, ax или eax. Помещайте операнд в регистр. Или возможно прокатит так:
|
| Автор: oshilan 7.9.2010, 07:30 | ||
| 2 ksili: нет, не прокатывает. Те же ошибки :( Добавлено через 9 минут и 12 секунд Новый код:
Скомпилировался без ошибок. Только нужно проверить правильность подсчётов Добавлено через 13 минут и 46 секунд Ответ должен быть с минусом, что-то я его в OllyDbg не нахожу. Может кто помочь, где его искать или правильным текстом программы? |
| Автор: Mikl_ 7.9.2010, 08:31 | ||
| oshilan, для 16-разрядной DOS нужно писать .model small у вас все регистры 16-разрядные.model flat это для 32-разрядной Windows mul 3, mul 93 -- так не умножают, если умножение беззнаковое, тогда, в зависимости от размера, первое множимое должно быть в AL/AX/EAX, второе множимое помещают либо в регистр, либо в ячейку памяти, но это не может быть непосредственно число, произведение также зависит от размера множителей и будет помещено в AX/DX:AX/EDX:EAX. Если умножение со знаком, тогда можно использовать команду imul ax,3 или imul ax,93 -- вместо ax может быть любой другой регистр 1993/(3*93)-6*93*403
|
| Автор: oshilan 7.9.2010, 20:20 |
| Mikl_, огромное спасибо, всё работает! +1 бы, но не могу ) |