Работа с большими числами - 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 ;
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д