Форум программистов, компьютерный форум, киберфорум
Assembler для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.52/21: Рейтинг темы: голосов - 21, средняя оценка - 4.52
0 / 0 / 0
Регистрация: 09.03.2015
Сообщений: 49
1

Перемножить два больших числа

26.04.2015, 15:53. Показов 3915. Ответов 26
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Проблема состоит в том что надо перемножить два больших числа(из инструментов у меня lzasm+insight и всё это под freedos-oм)
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
Operand1 equ 0B5E0H
Operand2 equ 0C137H
model small
p586                  
stack 100h               
 
 
codeseg
startupcode 
    mov ax,[Operand1]     
    mul [Operand2]        
    mov di,ax           
    mov si,dx          
    sub cx,cx           
    sub bx,bx           
 
    mov ax,[Operand1+2]    
    mul [Operand2]        
    add si,ax           
    adc cx,dx           
 
    mov ax,[Operand1]      
    mul [Operand2+2]       
    add si,ax           
    adc cx,dx          
    adc bx,bx          
 
    mov ax,[Operand1+2]   
    mul [Operand2+2]       
    add cx,ax           
    adc bx,dx          
 
    mov [c],di      
    mov [c+2],si    
    mov [c+4],cx    
    mov [c+6],bx    
 
    exitcode 0
;---------------------------------------------------------------------
dataseg
 
c DW  ?
END
Вот что выдаёт отладчик(у кого есть возможность можете проверить числа)
https://yadi.sk/i/Eva3mnUzgFdVv
Вопрос правильно ли идёт умножение двух чисел 0B5E0*0C137
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
26.04.2015, 15:53
Ответы с готовыми решениями:

Перемножить два шестнадцатеричных числа
Всем привет. Не знаком с ассемблером вообще. Нужна помощь. Конкретно: нужно написать программу,...

Перемножить два числа
Как перемножить два числа(в 10-ой системе счисления) через 2-ичную систему например я знаю что...

Передать в макрос два списка и перемножить 1 элемент из 1-го списка с 1 эл. из 2-го, потом 2 и т.д.
Здравствуйте, объясните пожалуйста работу <>(треугольных скобочек в asm).В них можно передавать...

Получить из массива два других массива чисел больших 5 и остальных
Написать com файл .В памяти расположен массив М состоящий из 10 байт .Получить из него два массива...

26
0 / 0 / 0
Регистрация: 09.03.2015
Сообщений: 49
27.04.2015, 10:52  [ТС] 21
Author24 — интернет-сервис помощи студентам
Ethereal, а почему так же не получается с делением(div), отладчик вообще вылетает, хоть числа я не менял!!
0
6770 / 2739 / 384
Регистрация: 17.02.2013
Сообщений: 4,047
27.04.2015, 11:32 22
А ты улови фишку.
Когда ты умножаешь два 16-разрядных числа, то результат 32-разрязный. Поэтому он и распихивается по двум регистрам.
А когда ты делишь нужно 32-разрядное делить на 16-разрядное.

Команда
div bр
, к примеру, поделит 32-х разрядное число в регистровой паре dx:ax на bp
В результате частное окажется в ax, а остаток в dx

Добавлено через 2 минуты
mov ax, 0B5E0h
mov bp, 0C137h
mul bp ;в результате DX=8944h AX=0F320h
div bp ;в результате AX=0B5E0h DX=0
1
0 / 0 / 0
Регистрация: 09.03.2015
Сообщений: 49
27.04.2015, 14:07  [ТС] 23
Ethereal, всё равно бредняк выходит, при делении двух чисел, отладчик крашится
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Operand1 equ 05E0H
Operand2 equ 1137H
Operand3 equ 0B5E0H
Operand4 equ 0C137H
 
model small
p586
stack 100H
 
codeseg
startupcode
 
        mov eax, Operand1
        mov dx, Operand2
        div dx
        
        mov ebx, Operand3
        mov ax, Operand4
        div ax
 
exitcode 0
0
Ушел с форума
Автор FAQ
16279 / 7604 / 1065
Регистрация: 11.11.2010
Сообщений: 13,617
27.04.2015, 14:28 24
4ePtb,
число в DX перед делением всегда должно быть меньше делителя, команды div edx/div dx/div ah всегда приведут к переполнению результата и сообщению "деление на 0"
1
0 / 0 / 0
Регистрация: 09.03.2015
Сообщений: 49
27.04.2015, 15:52  [ТС] 25
Mikl___, Ethereal,
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Operand2 equ 05E0H
Operand1 equ 1137H
Operand4 equ 0B5E0H
Operand3 equ 0C137H
 
 
model small
p586
stack 100H
 
codeseg
startupcode
 
        mov eax, Operand1
        mov cx, Operand2
        div cx
 
        mov ebx, Operand3
        mov ax, Operand4
        div ax
 
exitcode 0
Вроде подправил, а всё равно отладчик крашиться(
с числами действительно была проблема, это проверил Operand1>Operand2, Operand3>Operand4

Добавлено через 58 минут
Всем спасибо, всё решилось!
0
Клюг
7674 / 3189 / 382
Регистрация: 03.05.2011
Сообщений: 8,380
27.04.2015, 15:55 26
Цитата Сообщение от 4ePtb Посмотреть сообщение
отладчик не показал правильный результат (B5E0*C137=8944F320) ((
Дык, в чём грабли?
8944F320h = 2302997280.
И да, выкладывайте картинки на форум, а то этот я-диск верещит, что у меня слишком старый браузер.
Миниатюры
Перемножить два больших числа  
0
6770 / 2739 / 384
Регистрация: 17.02.2013
Сообщений: 4,047
27.04.2015, 20:38 27
Вот это
mov eax, Operand1
mov dx, Operand2
div dx
должно приводить к краху в любом случае. Потому-что ты число
Operand2:Operand1 = DX:AX = 10000h*DX + AX = 10000h*Operand2 + Operand1 делишь на DX = Operand2.
Результатом деления должно быть частное 10000h и остаток Operand1.
Но частное 10000h не влезает в регистр размером в слово.
Так-что такое деление карается прерыванием Divide by Zero.

Добавлено через 1 минуту
Вот это
mov eax, Operand1
mov cx, Operand2
div cx
А тут у тебя регистр DX никак не определен.
А команда div cx делит DX:AX на CX.
Деление неизвестного числа на Operand2 вполне может привести к известным результатам - Divide by Zero.
0
27.04.2015, 20:38
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
27.04.2015, 20:38
Помогаю со студенческими работами здесь

Есть два больших числа, записанных в string. Необходимо задать ограничения на два эти числа
Добрый вечер. Помогите разобраться. Есть два больших числа , записанных в string. Необходимо...

Перемножить два целых числа
Ввод двух целых больших чисел перемножить их и вывести на экран.

Перемножить два сверхдлинных числа из файла
Здравствуйте, вот есть такое задание, помогите реализовать пожалуйста: 1.Перемножить два...

Как перемножить два числа, сгенерированных случайно?
Как перемножить два числа, сгенерированных случайно в C# ?.


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
27
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru