Натуральное число m представить в виде суммы квадратов двух натуральных чисел - Assembler
Формулировка задачи:
1)Натуральное число m представить в виде суммы квадратов двух натуральных чисел. Выдать сообщение, если такое представление невозможно.
Решение задачи: «Натуральное число m представить в виде суммы квадратов двух натуральных чисел»
textual
Листинг программы
@stack segment para stack db 1024 dup(?) @stack ends @data segment M dw 1234 A dw 0 B dw 0 MsgNo db 'It is impossible.', 0Dh, 0Ah, '$' MsgYes db 'It is avaiable:', 0Dh, 0Ah, '$' Msg1 db '^2 + ', '$' Msg2 db '^2 = ', '$' CrLf db 0Dh, 0Ah, '$' @data ends @code segment assume cs:@code, ds:@data, ss:@stack main proc ;инициализация сегментного регистра данных mov ax, @data mov ds, ax mov di, 0 ;решений не найдено mov bx, 1 @@WhileA: mov ax, bx mul ax cmp dx, 0 jnz @@BreakA cmp ax, [M] jae @@BreakA mov si, ax mov cx, bx @@WhileB: mov ax, cx mul ax cmp dx, 0 jnz @@BreakB add ax, si cmp ax, [M] ja @@BreakB jne @@NextB inc di ;решение найдено mov [A], bx mov [B], cx jmp @@BreakA @@NextB: inc cx jmp @@WhileB @@BreakB: inc bx jmp @@WhileA @@BreakA: cmp di, 0 jz @@No mov ah, 09h lea dx, [MsgYes] int 21h mov ax, bx call Show_AX mov ah, 09h lea dx, [Msg1] int 21h mov ax, cx call Show_AX mov ah, 09h lea dx, [Msg2] int 21h mov ax, [M] call Show_AX jmp @@Exit @@No: mov ah, 09h lea dx, [MsgNo] int 21h @@Exit: ;завершение программы mov ax, 4C00h int 21h main endp ; выводит знаковое 16-разрядное число из регистра AX на экран ; входные данные: ; ax - число для отображения Show_AX proc push ax push bx push cx push dx push di mov cx, 10 xor di, di ; di - кол. цифр в числе ; если число в ax отрицательное, то ;1) напечатать '-' ;2) сделать ax положительным or ax, ax jns @@Conv push ax mov dx, '-' mov ah, 2 ; ah - функция вывода символа на экран int 21h pop ax neg ax @@Conv: xor dx, dx div cx ; dl = num mod 10 add dl, '0' ; перевод в символьный формат inc di push dx ; складываем в стек or ax, ax jnz @@Conv ; выводим из стека на экран @@Show: pop dx ; dl = очередной выводимый символ mov ah, 2 ; ah - функция вывода символа на экран int 21h dec di ; повторяем пока di<>0 jnz @@Show pop di pop dx pop cx pop bx pop ax ret Show_AX endp @code ends end main
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д