Программирование на ассемблер
Здравствуйте! Решаю следующую задачу: Вернуть 1, если числа являются сторонами треугольника Пифагора, иначе вернуть 0. При этом, задачу нужно выполнить используя подпрограмму; входные данные передаются в подпрограмму через стек, а результат возвращается через регистр AL. Я написала код (прикреплен ниже), но с командой ret он почему-то не работает (зацикливается). Что не так, понять никак не могу. Без ret работает, но это, как я понимаю, всё равно неправильно в случае работы с подпрограммой. Помогите, пожалуйста, разобраться в чём проблема! Работаю в программе emu8086.
Код:
data segment
x1 db 5
x2 db 4
x3 db 2
ends
stack segment
dw 128 dup(0)
ends
code segment
start:
mov ax, @data
mov ds, ax
mov al, x1
cbw
mov bh, 0
mov ch, 0
mov bl, x2
mov cl, x3
push ax
push bx
push cx
call Pifagor
ends
Pifagor PROC NEAR
push bp
mov bp, sp
mov ax, [bp+4]
mul ax
mov bx, ax
mov ax, [bp+6]
mul ax
mov cx, ax
mov ax, [bp+8]
mul ax
a:
mov dx,ax
add dx,bx
cmp dx,cx
je YES
b:
mov dx,ax
add dx,cx
cmp dx,bx
je YES
c:
mov dx,bx
add dx,cx
cmp dx,ax
je YES
NO:
mov ax,0
jmp EXIT
YES:
mov ax,1
EXIT:
pop bp
ret
Pifagor endp
mov ax, 4c00h
int 21h
ends
end start
push ax
push bx
push cx
call Pifagor
; после возврата из Pifagor, код пойдет дальше
; и пойдет выполнять код Pifagor
ends ; вот это вообще непонятно зачем
; есть процедура ниже тоже входит в данный сегмент
Pifagor PROC NEAR
push bp
mov bp, sp
...
; этот код не выполнится
mov ax, 4c00h
int 21h
ends push ax
push bx
push cx
call Pifagor
; тут нужно освобождать стек, так как после возврата
; из Pifagor, 6 байт будут висеть в стеке
; например
push ax
push bx
push cx
call Pifagor
pop cx
pop bx
pop ax Спасибо большое, всё получилось!!! ends писала, чтобы завершить программу, но уже поняла, что это было неправильно. Спасибо большое еще раз, что помогаете другим и делитесь своими знаниями! :)
1. Треугольник со сторонами 2 4 5 не "Пифагоров" и даже не прямоугольный
2. Программа проверяет треугольник только на прямоугольность
3. Что по твоему делает код после выполнения "строки" call Pifagor ?
Понятное дело, что он не Пифагоров, в моём случае программа должна вывести 0, как и сказано в задании.