Передача параметров через стек. Тип процедуры – ближний - Assembler

Узнай цену своей работы

Формулировка задачи:

Всем привет! Есть задание: Ввести 8-битовое целое число А. Если оно четное, вычислить значение выражения А3 – 1, если нечетное – значение выражения А2. Написал для Передача параметров через регистр. Тип процедуры – дальний. А как сделать через стек? Есть идеи? Листинг программы KR1Z1:
MODEL SMALL ;указание модели памяти
STACK 256    ; размер стека        
dseg segment; Начало сегмента данных
mess db 'rezultat A= $',0ah,0dh ; Само сообщение для пользователя
dseg ends;Конец сегмента данных
;==============================================================
; Сегмент кода 1                                                    
;==============================================================
cseg segment; начало кода сегмента №1
assume cs:cseg
soob proc;процедру вывода сообщения rezultat A=
mov    ah,09h    ;вывод сообщения, если нашли отрицательное число
lea    dx, mess ; сообщение nashli otricatelnoe i zamenili na null
int    21h; прирывание для вывода на экран.Вызов DOS
ret; возврат из процедуры
soob endp;конец процедуры вывода сообщения rezultat A=
start: ;метка места начала выполнения программы
mov ax,dseg; заносим данные в ах, далее
mov ds,ax; занести в ds данные ax;
call soob; вызываем процедуру сообщение Резултат А=
mov al,4; Помещаем в регистр al число, то есть А=3
test al,1; Проверяем на четность, если нечетное число то
jnz nechet ; переход на метку нечетный 
imul al; возводим число в квадрат, результат будет в ax;
imul al; возводим число в куб, результат будет в ax;
sub al,1; отнимаем от данных в А единицу то есть А вкубе минус 1  
;результат будет выводить через процедуру Vyvod;
jmp exit; если четное число то перейти на метку exit
nechet: ;метка nechet тут обрабатываем число если оно нечетное 
imul al; возвести данные в регистре в квадрат то есть А*А
; далее так как получили результат  надо будет
loop exit; перейти к метке выход
exit: ;метка выход
call far ptr vyvod; вызываем дальнею процедуру вывода числа то есть преоброзование
mov ah,4ch ;Функция 4Ch завершения программы
int 21h ;Вызов DOS
cseg ends; конец кода сегмента №1
;==============================================================
; Сегмент кода 2                                                    
;==============================================================
cseg2 segment; начало кода сегмента №2
 assume cs:cseg2
vyvod proc far; процедура обработки числа для вывода на экран
aam ;двоичное число преобразуем в неупакованное BCD число 
add ax,3030h ; преобразуем в символы ASCII
mov dl,ah; в DL старшая цифра
mov dh,al ; в DH младшая цифра
mov ah,02 ; вывод на дисплей
int 21h ;Вызов DOS
mov dl,dh 
int 21h;Вызов DOS
ret; возврат из процедуры
vyvod endp ; конец процедуры
cseg2 ends ; конец кода сегмента №1
end start ;завершаем всю программу, конец программы и указание метки начала выполнения.
программа рабочая. Выводит результат на экран. Как все это сделать через стек?

Решение задачи: «Передача параметров через стек. Тип процедуры – ближний»

textual
Листинг программы
pop bp

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

5   голосов , оценка 3.6 из 5