Перемножить два больших числа - Assembler
Формулировка задачи:
Проблема состоит в том что надо перемножить два больших числа(из инструментов у меня lzasm+insight и всё это под freedos-oм)
Вот что выдаёт отладчик(у кого есть возможность можете проверить числа)
https://yadi.sk/i/Eva3mnUzgFdVv
Вопрос правильно ли идёт умножение двух чисел 0B5E0*0C137
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
Решение задачи: «Перемножить два больших числа»
textual
Листинг программы
Model Tiny .Code Org 100h Start: mov ax, word ptr ds:Operand_1 mul word ptr ds:Operand_2 mov word ptr Result, ax mov cx, dx mov ax, word ptr ds:Operand_1+2 mul word ptr ds:Operand_2+2 mov si, ax mov di, dx mov ax, word ptr ds:Operand_1+2 mul word ptr ds:Operand_2 add cx, ax adc si, dx mov ax, word ptr ds:Operand_1 mul word ptr ds:Operand_2+2 add cx, ax adc si, dx adc di, 0 mov word ptr ds:Result+2,cx mov word ptr ds:Result+4,si mov word ptr ds:Result+6,di ret Operand_1 dd 12345678h Operand_2 dd 87654321h Result dq ? End Start