Работа с большими числами - 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                      ;

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

5   голосов , оценка 3.4 из 5
Похожие ответы