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