crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

> Алгоритм на асемблере
tribi
  опции профиля:
сообщение 5.12.2010, 14:34
Сообщение #1


Новичок


Группа: Новичок
Сообщений: 3
Регистрация: 5.12.2010
Пользователь №: 2245

Спасибо сказали: 0 раз(а)




Репутация:   0  


Дорогие участники форума передо мной стоит такая вот нелегкая для девушки задача, мне необходимо написать на асемблере прогу(я просто этот код копирую в блокнот и сохраняю с расширением asm) с функциями Умножения и сложения знакового числа 8 бит, помогите пожалуйста хотя бы подскажите где можно почитать, вообще я нашла алгоритм по отдельности вот, но как в одну прогу объединить не под силу мне, помогите, если вдруг я вообще ошиблась в правильности то если сможtте помогите...


Раскрывающийся текст

;add_sign - процедура сложения чисел размером 1 байт с учетом знака
:Вход: summand_1и summandj? - слагаемые.
:Выход: sum_b или sum_w - значение суммы в зависимости от наличия расширения знака.
---------------------------------------------------------------------

.data
sum_w label word
summandl db ? :значения в summand_1и summand_2 нужно внести
carry db 0; расширение знака
summand_2 db ?
.code
add_sign proc
mov al ,summand_2
add summand_l.a1
jc @@cfl_ofl
jo @<acfO_ofl
:cf=0 of=0 -> результат верный :cf"l of=0 -> результат верный r_true: jmp end__p результат -> summand_1@icfl_ofl: jno
@@cfl_of0 :cf=1 of=1 -> результат неверный
mov carry.0ffh расширение знака д.б. -1, результат ->sum_w
jmp end_p
:cf=1 of=0 -> результат верный
@@cfl_of0: jmp r_true результат -> summand_1:cf=0 of=1 -> результат неверный
@@cf0_ofl: mov carry.0 .-расширение знака д.б. =0. результат ->sum_w
jmp end_p end_p: ret add_sign endp

Программа учитывает возможное переполнение результата и перенос в старшие разряды. Для этого отслеживаются условия, задаваемые флагами, и выполняются действия:

    * CF=0F=0 — результат правильный и является положительным числом;
    * CF=1 0F=0 — результат правильный и является отрицательным числом;
    * CF=0F=1 — результат неправильный и является положительным числом, хотя правильный результат должен быть отрицательным (для корректировки необходимо увеличить размер результата в два раза и заполнить это расширение нулевым значением);
    * CF=0 0F=1 — результат неправильный и является отрицательным числом, хотя правильный результат должен быть положительным (для корректировки необходимо увеличить размер результата в два раза и произвести расширение знака).






Раскрывающийся текст
Умножение чисел размером 1 байт с учетом знака

;mul_sign.asm - программа умножения чисел размером 1 байт с учетом знака;Вход: multiplier], и multiplied - множители со знаком размерностью 1 байт.;Выход: product - значение произведения.
.data значения в multiplier], и multiplied нужно внести
product label word
productj label byte
multiplierl db ?;множитель 1 (младшая часть произведения)
product_h db 0 :старшая часть произведения
multiplied db ? :множитель 2
.code
mul_sign proc
mov al.multiplierl
imul multiplied :оценить результат:
jnc no_carry :нет переполнения - на no_carry обрабатываем ситуацию переполнения
mov productji.ah :старшая часть результата, знак результата - старший бит product_h no_carry: mov productj,al :младшая часть результата, productji - расширение знвка
ret
mul_sign endp. main:
call mul_sign end main
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
 
Начать новую тему
Ответов
Iron Bug
  опции профиля:
сообщение 5.12.2010, 23:57
Сообщение #2


Профессионал
*****

Группа: Модератор
Сообщений: 1611
Регистрация: 6.2.2009
Из: Yekaterinburg
Пользователь №: 533

Спасибо сказали: 219 раз(а)




Репутация:   12  


книга: Питер Абель "Ассемблер и программирование для IBM PC" - классика жанра для начинающих. там подобных примеров полно. а такого уровня задачи почти на любой платформе более-менее одинаково выглядят.

P.S. пример выглядит вполне рабочим. в чём проблема?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
AD
  опции профиля:
сообщение 6.12.2010, 9:26
Сообщение #3


Профессионал
*****

Группа: Участник
Сообщений: 2003
Регистрация: 4.2.2008
Из: S-Petersburg
Пользователь №: 84

Спасибо сказали: 70 раз(а)




Репутация:   17  



tribi, код следует оформлять в теги "["code"]" и "["/code"]" (без кавычек)! К ОФФТОПУ код не относится!
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме


Ответить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 29.3.2024, 3:07