Работа с большими числами - Assembler (223762)
Формулировка задачи:
Написала программу, с маленькими числами работает. Подскажите, пожалуйста, как сделать, чтобы с большими числами работала.
Листинг программы
- 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
Решение задачи: «Работа с большими числами»
textual
Листинг программы
- ;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 ;
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д