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