Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.
Внимание! Некоторое время письма не доходят до аккаунтов MAIL RU GROUP, не доходят на все почтовые ящики mail.ru, inbox.ru, bk.ru. Пишите им жалобы, чтобы быстрее восстановили получение писем, регистрируйтесь через яндекс почту и gmail, туда письма с активизацией доходят.

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler
Регистрация

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

Ответ
 
Опции темы
Старый 02.05.2013, 18:58   #1
zaninpsih
Новичок
 
Регистрация: 02.05.2013
Сообщений: 1
Репутация: 10
По умолчанию Умножение чисел используя SHL и ADD

Всем привет! В программе нужно ввести два числа и перемножить их только с использованием функций шифтинга в лево SHL и сложения ADD. Я попытался это сделать и вроде бы логически все правильно, но прога зацикливается и вылетает с ошибкой. ПОМОГИТЕ, не знаю в чем дело! Посмотрел листинг и ужаснулся, что в EDX записываются страшные цифры.

Мой код:

INCLUDE Irvine32.inc
.data
s1 byte "enter your multiplayer2: ",0
s2 byte "enter your multiplayer1: ",0
s3 byte "The result of multiplication is: ",0
mult DWORD ?
mult2 DWORD ?
temp DWORD 0
count BYTE 0
countStack BYTE 0
multTEMP DWORD 0
multTfin DWORD ?
storemul2 DWORD ?
two DWORD 2
.code
main PROC
mov EAX,0
mov EBX,0
mov ECX,0
call Clrscr
call promtforInt
call promtforInt2
call howMuchShift
call FastMultiply
call display
exit
main ENDP

;--------------------0
promtforInt PROC ;USES EDX
mov edx, OFFSET s2
call WriteString
call ReadInt
mov mult,EAX
mov storemul2, EAX
call Crlf
ret
call DumpRegs
exit
promtforInt ENDP

;--------------------1
promtforInt2 PROC ;USES edx
mov edx, OFFSET s1
call WriteString
call ReadInt
mov mult2,EAX
;mov edx, eax
call Crlf
call DumpRegs
ret
exit
promtforInt2 ENDP

;--------------------2
howMuchShift PROC ;identify how many times we need to shift the multiplayer
mov countStack,0 ;clear the numbeк of value in stack
L0: call DumpRegs
inc countStack ;how many elements in STACK
mov count,1 ;clear count
mov ECX, 32 ;set the LOOP
mov EAX, 2 ;set EAX by 2
L1: mul two ;multiply by 2 until loop is over
cmp EAX, mult ;comparison eax to multiplayer2
jg M1 ;finish LOOP if eax>multiplayer2
inc count ;counting how many times loop is repeated
mov multTEMP,EAX ;store max value
je EX ;finish LOOP if eax=multiplayer2
LOOP L1 ;END of loop
M1: mov ECX,0
movzx ECX, count
push ECX ;save COUNT for the first
mov EBX, mult ;set EBX by multiplayer
sub EBX, multTEMP ;difference between multiplayer and MAX value
mov mult,EBX ;set MULT for new LOOP by that difference
cmp EBX,1 ;if differense=1
je M2
cmp EBX,2 ;if differense=2
je M3
cmp EBX,3 ;if differense=3
je M4
jmp L0 ;GO to L0
M2: push 0
inc countStack
exit
M3: push 1
inc countStack
ret
exit
M4: push 1
push 0
inc countStack
inc countStack
ret
exit
call Crlf
call DumpRegs
EX: movzx ECX, count
push ECX
mov ecx,0
ret
exit
;call DumpRegs
howMuchShift ENDP

;--------------------3
FastMultiply PROC ;USES edx
mov EDX,0
movzx ECX,countStack
L1: mov EBX,0
mov EBX,mult2
mov eax,0
pop EAX
mov cl,al
shl EBX, cl
add EDX,EBX
LOOP L1
call Crlf
ret
call DumpRegs
exit
FastMultiply ENDP

;-------------4
display PROC ;USES edx
mov eax,0
mov eax,edx
mov edx,0
mov edx, OFFSET s3
call WriteString
call WriteInt
call Crlf
ret
call dumpregs
exit
display ENDP
END main
zaninpsih вне форума   Ответить с цитированием
Старый 02.05.2013, 19:26   #2
Mikl___
Профессионал
 
Регистрация: 11.01.2010
Сообщений: 1,129
Репутация: 943
По умолчанию

zaninpsih,
не стоит создавать одни и те же темы на всех ассемблерных форумах подряд, здесь те же люди, что и на cyberforum.ru
Mikl___ вне форума   Ответить с цитированием
Ответ

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Возведение в 6 степень, используя только умножение не более 3-х раз webber9989 C# (си шарп) 2 09.10.2011 01:44
Умножение больших чисел Relrin Помощь студентам 13 22.10.2010 20:44
Умножение огромных чисел Pedro Помощь студентам 3 19.04.2009 21:32
умножение 16-разрядных чисел deeeman Assembler 3 12.12.2007 14:26


00:21.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru