Форум программистов, компьютерный форум, киберфорум
Наши страницы
Assembler: математика, вычисления
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/3: Рейтинг темы: голосов - 3, средняя оценка - 5.00
DocNick
0 / 0 / 0
Регистрация: 17.02.2014
Сообщений: 4
1

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

23.02.2014, 16:49. Просмотров 516. Ответов 3
Метки нет (Все метки)

Ввод двух целых больших чисел перемножить их и вывести на экран.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.02.2014, 16:49
Ответы с готовыми решениями:

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

Tasm. Сложить два произвольных числа и проверить: полученная сумма больше или меньше третьего числа
нужна помощь: Сложить два произвольных числа и проверить: полученная сумма...

Заданы два массива X[10] и Y[12], состоящие из целых чисел со знаком в формате слова. Выполнить над массивами действия согласно индивидуальному задани
Общая часть. Заданы два массива X и Y, состоящие из целых чисел со...

Сравнить два числа
Сравнить два числа X и Y. Если они равны, вывести на экран строку ‘X=Y’, иначе...

Соеденить два числа
Доброго времени суток :) У меня вопрос. У меня в двух регистрах хранятся два...

3
Mikl___
Автор FAQ
13304 / 6377 / 629
Регистрация: 11.11.2010
Сообщений: 11,539
24.02.2014, 04:19 2
DocNick,
а для кого F.A.Q. писали? Там целый раздел с примерами, который называется "Длинные числа"
0
DocNick
0 / 0 / 0
Регистрация: 17.02.2014
Сообщений: 4
24.02.2014, 20:18  [ТС] 3
Почему так не работает?

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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
.586P                       ;
.model flat, stdcall        ;
option  casemap : none      ;регистр букв не учитывать
 
;добавляемые библиотеки 
include     \masm32\include\windows.inc
include     \masm32\include\kernel32.inc
includelib  \masm32\lib\kernel32.lib
include     \masm32\include\user32.inc
includelib  \masm32\lib\user32.lib
 
.data       ;сегмент данных
 
    MaxCount = 10000
    Osn=10000
    count=4
    buf db MaxCount*3 dup (0)
    fmts db '%s', 0
    fmti db '%i', 0
    NewLine db 13, 10, 0 
    msg1 db '1-e chislo:',13, 10, 0
    msg2 db  '2-e chislo:',13, 10, 0  
    a dd MaxCount dup (0)   
    b dd MaxCount dup (0)   
    
 
    y      dd  0    ;место под значение y (при большом числе всё равно не уместится в 4 байта)
 
 
;для wsprintfA - функция форматирования чисел в их текстовое представление
    STR0        DB  100 dup(0)
    FORM        DB  "y= EDX: %lu EAX: %lu",0
    CAP1        db  'Результат',0
 
 
.code           ;сегмент кода
START:          ;точка входа
 
push 0
    push offset msg1
    push offset fmts
    call crt_printf
    add esp, 8
    push offset buf
    push offset a
    call InputInt
    push offset msg2
    push offset fmts
    call crt_printf
    add esp, 8
    push offset buf
    push offset b
    call InputInt
    push offset b
    push offset a
    call Umn
    
InputInt proc 
 
    mov ah,0ah
    xor di,di
    mov dx,offset buff ; аддрес буфера
    int 21h ; принимаем строку
    mov dl,0ah
    mov ah,02
    int 21h ; выводим перевода строки
    
; обрабатываем содержимое буфера
    mov si,offset buff+2 ; берем аддрес начала строки
    cmp byte ptr [si],"-" ; если первый символ минус
    jnz ii1
    mov di,1  ; устанавливаем флаг
    inc si    ; и пропускаем его
ii1:
    xor ax,ax
    mov bx,10  ; основание сc
ii2:
    mov cl,[si] ; берем символ из буфера
    cmp cl,0dh  ; проверяем не последний ли он
    jz endin
    
; если символ не последний, то проверяем его на правильность
    cmp cl,'0'  ; если введен неверный символ <0
    jl er
    cmp cl,'9'  ; если введен неверный символ >9
    ja er
 
    sub cl,'0' ; делаем из символа число 
    mul bx     ; умножаем на 10
    add ax,cx  ; прибавляем к остальным
    inc si     ; указатель на следующий символ
    jmp ii2     ; повторяем
 
er:   ; если была ошибка, то выводим сообщение об этом и выходим
    mov dx, offset error
    mov ah,09
    int 21h
    int 20h
 
; все символы из буфера обработаны число находится в ax
endin:
    cmp di,1 ; если установлен флаг, то
    jnz ii3
    neg ax   ; делаем число отрицательным
ii3:
    ret
 
error db "incorrect number$"
buff    db 6,7 Dup(?)
InputInt endp
 
 Umn:
;Начало наших вычислений
    XOR     EDX,EDX     ;Обнулим регистр EDX, чтобы удалить из него чужие значения
    MOV     EAX, a     ;Занесём в регистр EAX значение переменной a
    MOV     EBX, b     ;Занесём в регистр EBX значение переменной b
    MUL     EBX         ;Умножим EBX на EAX (EAX неявный оператор данной команды) то есть [a1*b1]
    MOV     ESI,EAX     ;Сохраним результат младшей части произведения [a1*b1] из EAX в ESI
    MOV     EDI,EDX     ;Сохраним результат старшей части произведения [a1*b1] из EDX в EDI
    PUSH    EAX         ;Сохраним в стек младшую часть только что полученного произведения
    PUSH    EDX         ;Сохраним в стек старшую часть только что полученного произведения
 
    
 
 
; -------------------------------------------------------------------------
 
;Этот код предназначен для вывода значений регистров EDX:EAX в мессаджбокс в десятичных значениях
 
    PUSH    EAX
    PUSH    EDX
    PUSH    offset FORM
    PUSH    offset STR0
    CALL    wsprintfA
 
    PUSH    0
    PUSH    offset CAP1
    PUSH    offset STR0
    PUSH    0
    CALL    MessageBoxA
   
 
_overflow:
 
;Выход из программы
 
    PUSH    0
    CALL    ExitProcess
0
Mikl___
Автор FAQ
13304 / 6377 / 629
Регистрация: 11.11.2010
Сообщений: 11,539
25.02.2014, 02:03 4
Цитата Сообщение от DocNick Посмотреть сообщение
Почему так не работает?
Потому что в голове у DocNick каша - ты смешал в одной программе функции Windows crt_printf, MessageBoxA, ExitProcess, wsprintfA и DOS-прерывания int 21h и int 20h. "Ты или крестик сними или трусы надень"
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.02.2014, 02:03

Преобразование целых беззнаковых чисел в длинные числа
Здравствуйте, помогите решить задачу: В памяти в байтовых ячейках X, Y...

TASM умножить два числа
assume SS:m1, DS:m2, CS:m3 m1 segment stack db 128 dup(?) m1 ends m2...

Сформировать массив чисел из целых положительных степеней числа 2
Помогите решить! Сформировать массив чисел, состоящий из целых положительных...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru