Хостинг портала RFpro.ru: Московский хостер Профессиональный ХОСТИНГ на базе Linux x64 и Windows x64 РАССЫЛКИ ПОРТАЛА RFPRO.RU Лучшие эксперты по данной тематике Номер выпуска: | 1506 | Дата выхода: | 23.03.2012, 16:00 | Администратор рассылки: | Лысков Игорь Витальевич (Старший модератор) | Подписчиков / экспертов: | 100 / 40 | Вопросов / ответов: | 1 / 1 | Консультация # 185630: Здравствуйте, уважаемые эксперты! Прошу вас ответить на следующий вопрос: Ассемблер TASM Размер переменных - байты Задача: b^3-c^3/d^3 Программа такая: .model small .386 ;.stack 100h .data b db ? c db ? d db ? .code mov ax, @data mov ds, ax mov al, b cbw mov bx, ax Консультация # 185630: Здравствуйте, уважаемые эксперты! Прошу вас ответить на следующий вопрос:
Ассемблер TASM Размер переменных - байты
Задача: b^3-c^3/d^3
Программа такая:
.model small .386 ;.stack 100h .data b db ? c db ? d db ?
.code mov ax, @data mov ds, ax
mov al, b cbw mov bx, ax mov al, b imul al imul bx cwd mov ebx, eax
mov al, c cbw mov cx, ax mov al, c imul al imul cx cwd mov ecx, eax
sub ebx, ecx mov al, d cbw mov dx, ax mov al, d imul al imul dx cwd mov edx, eax
mov eax, ebx cdq idiv edx mov ax, 4c00h <- ошибка: деление на ноль int 21h end
В конце выводит ошибку : Деление на ноль, т.е. она правильно считает делимое, после делимого выдает ошибку.
Что надо изменить, чтобы она правильно работала?!
Дата отправки: 20.03.2012, 15:33 Вопрос задал: Yankov Dmitry (Посетитель) Всего ответов: 1 Страница онлайн-консультации » Консультирует Лысков Игорь Витальевич (Старший модератор): Здравствуйте, Yankov Dmitry! Сначала предлагаю свой вариант:
Код : .model small .data b db 3 c db 2 d db 1 .code .386 start: mov ax, @data mov ds, ax movsx eax, b ;команда делает знаковое расширение байта b до 32 бит регистра eax call cube ;возводим в куб mov ebx, eax ;сохраним movsx eax, c ;аналогично, находим c^3 call cube sub ebx, eax ;находим b^3 - c^3 movsx eax, d ;d^3 call cube xchg eax, ebx ;меняем местами cdq idiv ebx ;делим (b^3 - c^3) / d^3 mov ax, 4c00h int 21h cube proc ;eax = eax^3 mov ecx, eax ;ecx = eax imul eax, eax ;eax = eax * eax imul eax, ecx ;eax = eax ^3 ret cube endp end start
Переделанный Ваш вариант. Повторяющийся фрагмент оформил подпрограммой. Убрал лишние присваивания
Код : .model small .386 data b db 3 c db 2 d db 1 .code start: mov ax, @data mov ds, ax mov al, b call cube mov ebx, eax mov al, c call cube sub ebx, eax mov al, d call cube xchg eax, ebx cdq idiv ebx mov ax, 4c00h int 21h cube proc cbw mov cx, ax imul al imul cx cwde ret cube endp end start  | Консультировал: Лысков Игорь Витальевич (Старший модератор) Дата отправки: 20.03.2012, 16:27 5 нет комментария ----- Дата оценки: 20.03.2012, 16:36 | Рейтинг ответа: +1 |
Оценить выпуск | Задать вопрос экспертам главная страница | стать участником | получить консультацию техническая поддержка | восстановить логин/пароль Дорогой читатель! Команда портала RFPRO.RU благодарит Вас за то, что Вы пользуетесь нашими услугами. Вы только что прочли очередной выпуск рассылки. Мы старались. Пожалуйста, оцените его. Если совет помог Вам, если Вам понравился ответ, Вы можете поблагодарить автора - для этого в каждом ответе есть специальные ссылки. Вы можете оставить отзыв о работе портале. Нам очень важно знать Ваше мнение. Вы можете поближе познакомиться с жизнью портала, посетив наш форум, почитав журнал, который издают наши эксперты. Если у Вас есть желание помочь людям, поделиться своими знаниями, Вы можете зарегистрироваться экспертом. Заходите - у нас интересно! МЫ РАБОТАЕМ ДЛЯ ВАС! |
Комментариев нет:
Отправить комментарий