Форум программистов, компьютерный форум, киберфорум
Наши страницы
Assembler для начинающих
Войти
Регистрация
Восстановить пароль
 
Leila_1994
0 / 0 / 0
Регистрация: 05.11.2015
Сообщений: 53
1

Работа с большими числами

23.06.2016, 20:45. Просмотров 483. Ответов 8
Метки нет (Все метки)

Написала программу, с маленькими числами работает. Подскажите, пожалуйста, как сделать, чтобы с большими числами работала.
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
text segment 'code' 
assume cs:text, ds:data 
myproc proc 
mov ax, data 
mov ds, ax 
lea dx, str1 
mov ah, 09h 
int 21h 
 
 
mov ax,138 
imul x 
mov bx,dx
mov cx,ax 
mov ax,k 
imul z 
add ax,cx 
mov cx,ax 
mov ax,k 
mov bx,z 
sub ax,bx 
mov bx,ax 
mov ax,cx 
idiv bx 
mov bx,ax 
mov ax,x 
imul x 
sub bx,ax 
mov ax,bx 
 
 
call outp 
mov y, ax 
lea dx, str2 
mov ah, 09h 
int 21h 
mov ax, 4c00h 
int 21h 
myproc endp 
 
outp proc 
push ax 
push cx 
push dx 
push bx 
xor cx,cx 
mov bx, 000Ah 
cont: xor dx, dx 
div bx 
push dx 
inc cx 
or ax, ax 
jnz cont 
mov ah, 02h 
next: 
pop dx 
add dl, 30h 
int 21h 
loop next 
pop bx 
pop dx 
pop cx 
pop ax 
ret 
outp endp 
text ends 
data segment 
    x dw 10
    k dw 4400
    z dw 4000
y dw ? 
str1 db 'reschenie y=(138x+k*z)/(k-z)-x*x', 0Ah, 0Dh, '$' 
str2 db 0Ah, 0Dh, 'rechenie zakoncheno', 0Ah, 0Dh, '$' 
data ends 
stack1 segment para stack 'stack' 
db 128 dup (?) 
stack1 ends 
end myproc
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.06.2016, 20:45
Ответы с готовыми решениями:

Работа с большими числами
Всем доброго времени суток! В программе надо работать с большими числами, а точнее есть уравнение...

Работа с большими числами в регистрах
.486 .model flat, stdcall option casemap :none include windows.inc include kernel32.inc...

Возведение в степень, с большими числами, без ФПУ, в ему8086
Помогите пожалуйста, хотиабы направьте кудато :), Написал на ему8086, код вовзведения в степень,...

Калькулятор для работы с большими числами
.model tiny .code JUMPS ; эта директива заставляет генерировать код, при котором можно писать...

Как избежать переполнения при работе с большими числами
При написании программы возникла проблема с большими числами. У меня есть число, которое копится в...

8
R71MT
4512 / 1711 / 330
Регистрация: 29.07.2014
Сообщений: 2,696
Записей в блоге: 5
23.06.2016, 21:35 2
Цитата Сообщение от Leila_1994 Посмотреть сообщение
чтобы с большими числами работала.
..а большие это какие? У тебя сейчас числа определены как слово, а это 65535:
Assembler
1
2
3
    x dw 10
    k dw 4400
    z dw 4000
0
Constantin Cat
2738 / 1490 / 420
Регистрация: 28.02.2015
Сообщений: 3,015
Завершенные тесты: 1
24.06.2016, 09:16 3
Цитата Сообщение от R71MT Посмотреть сообщение
а большие это какие?
y=(138x+k*z)/(k-z)-x*x --> K*Z=4400*4000=17'600'000
Приблизительно такие.


Цитата Сообщение от Leila_1994 Посмотреть сообщение
как сделать, чтобы с большими числами работала
Используйте сопроцессор.
0
R71MT
4512 / 1711 / 330
Регистрация: 29.07.2014
Сообщений: 2,696
Записей в блоге: 5
24.06.2016, 10:19 4
..или 32-битные регистры: EAX = 0FFFF FFFFh = 4.294.967.295
0
Constantin Cat
2738 / 1490 / 420
Регистрация: 28.02.2015
Сообщений: 3,015
Завершенные тесты: 1
24.06.2016, 10:28 5
R71MT, там дробь равна 44003.45
0
shmkv
1318 / 480 / 67
Регистрация: 21.07.2015
Сообщений: 1,241
24.06.2016, 14:25 6
Leila_1994, найди учебник Юрова "Assembler". Там эта тема очень подробно изложена с примерами (ода из первых глав). Объяснять тут на пальцах смысла не вижу, т.к. лучше вряд ли получится.
0
R71MT
4512 / 1711 / 330
Регистрация: 29.07.2014
Сообщений: 2,696
Записей в блоге: 5
24.06.2016, 16:48 7
Цитата Сообщение от Constantin Cat Посмотреть сообщение
там дробь равна 44003.45
..не пойму, я не правильно считаю или ты?
Код
(138x+k*z) = 1380+17600000 = 17601380
(k-z)-x*x  = 400 - 100 = 300
----------------------------------------
17601380 / 300 = 58671,267
Кликните здесь для просмотра всего текста

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
;fasm code....
format MZ
org  100h
jmp  start
 
str1  db   13,10,' X=10, K=4400, Z=4000'
      db   13,10,' Y=(138x+k*z)/(k-z)-x*x'
      db   13,10,' -------------------------'
      db   13,10,' Result: $'
 
X     dd   10
K     dd   4400
Z     dd   4000
 
start:  mov   ah,9          ; мессага
        mov   dx,str1       ;
        int   21h           ;
 
        mov   ebx,[X]       ;
        imul  ebx,ebx       ;
        mov   eax,[K]       ;
        sub   eax,[Z]       ;
        sub   eax,ebx       ;
        push  eax           ; запомним правую часть
 
        mov   ebx,[K]       ;
        imul  ebx,[Z]       ;
        mov   eax,138       ;
        imul  eax,[X]       ;
        add   eax,ebx       ;
 
        pop   ebx           ;
        xor   edx,edx       ;
        div   ebx           ; результат в EAX:EDX
 
        push  edx           ; запомним остаток
        mov   ebx,10        ; система счисления
        call  hex2asc       ; выводим EAX на экран! (целое)
        mov   al,'.'        ; разделитель..
        int   29h           ;
        pop   eax           ; выводим EDX на экран! (остаток)
        call  hex2asc       ;
 
exit:   xor   ax,ax         ;
        int   16h           ;
        mov   ax,4c00h      ;
        int   21h           ; выход!
;-----------------------------------------------------
hex2asc:                 ; Функция переводит числа в символы
   pushad                ; Вход:  EАХ = число, EBX = система счисления
   xor   ecx,ecx         ; Выход: на экране
isDiv:                   ;
   xor   edx,edx         ;
   div   ebx             ;
   push  edx             ;
   inc   ecx             ;
   or    eax,eax         ;
   jnz   isDiv           ;
isOut:                   ;
   pop   eax             ;
   cmp   al,9            ;
   jle   noHex           ;
   add   al,7            ;
noHex:                   ;
   add   al,30h          ;
   int   29h             ;
   loop  isOut           ;
   popad                 ;
ret                      ;
0
Миниатюры
Работа с большими числами  
Ferrari F1
795 / 525 / 157
Регистрация: 27.01.2015
Сообщений: 3,025
Записей в блоге: 1
Завершенные тесты: 1
24.06.2016, 16:51 8
можно использовать длинную арифметику...
использовать массивы, скажем, на 100 элементов типа word или dword, которые из себя и представляют одно длинное число.
Ну и складывать поэлементно эти массивы через ADC, вычитание через SBB, ну и дописать еще пару процедур для умножения и деления
0
Constantin Cat
2738 / 1490 / 420
Регистрация: 28.02.2015
Сообщений: 3,015
Завершенные тесты: 1
24.06.2016, 17:17 9
Цитата Сообщение от R71MT Посмотреть сообщение
не пойму, я не правильно считаю или ты?
Смотрите на скобки и приоритеты операций:
1)138x+k*z
2)k-z
3)деление
4)вычитание
0
24.06.2016, 17:17
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.06.2016, 17:17

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Открыть файл и записать данные в двумерный массив. Работа с большими файлами
var Arr: array of array of longword; x, y, i: longint; f: file; maxx,maxy:longword; begin...

Работа с числами
Всем привет! Кто сможет помочь с ассемблере? Нужно откорректировать лабораторную? условие лабы у...

Работа с числами
1. Создайте хранилище Mercurial. • .hgignore • .hg\hgrc • Makefile 2. Создайте программу: Для...


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

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

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