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

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

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

Всем привет! Есть задание: Ввести 8-битовое целое число А. Если оно четное, вычислить значение выражения А3 – 1, если нечетное – значение выражения А2. Написал для Передача параметров через регистр. Тип процедуры – дальний. А как сделать через стек? Есть идеи? Листинг программы KR1Z1:
Листинг программы
  1. MODEL SMALL ;указание модели памяти
  2. STACK 256 ; размер стека
  3. dseg segment; Начало сегмента данных
  4. mess db 'rezultat A= $',0ah,0dh ; Само сообщение для пользователя
  5. dseg ends;Конец сегмента данных
  6. ;==============================================================
  7. ; Сегмент кода 1
  8. ;==============================================================
  9. cseg segment; начало кода сегмента 1
  10. assume cs:cseg
  11. soob proc;процедру вывода сообщения rezultat A=
  12. mov ah,09h ;вывод сообщения, если нашли отрицательное число
  13. lea dx, mess ; сообщение nashli otricatelnoe i zamenili na null
  14. int 21h; прирывание для вывода на экран.Вызов DOS
  15. ret; возврат из процедуры
  16. soob endp;конец процедуры вывода сообщения rezultat A=
  17. start: ;метка места начала выполнения программы
  18. mov ax,dseg; заносим данные в ах, далее
  19. mov ds,ax; занести в ds данные ax;
  20. call soob; вызываем процедуру сообщение Резултат А=
  21. mov al,4; Помещаем в регистр al число, то есть А=3
  22. test al,1; Проверяем на четность, если нечетное число то
  23. jnz nechet ; переход на метку нечетный
  24. imul al; возводим число в квадрат, результат будет в ax;
  25. imul al; возводим число в куб, результат будет в ax;
  26. sub al,1; отнимаем от данных в А единицу то есть А вкубе минус 1
  27. ;результат будет выводить через процедуру Vyvod;
  28. jmp exit; если четное число то перейти на метку exit
  29. nechet: ;метка nechet тут обрабатываем число если оно нечетное
  30. imul al; возвести данные в регистре в квадрат то есть А*А
  31. ; далее так как получили результат надо будет
  32. loop exit; перейти к метке выход
  33. exit: ;метка выход
  34. call far ptr vyvod; вызываем дальнею процедуру вывода числа то есть преоброзование
  35. mov ah,4ch ;Функция 4Ch завершения программы
  36. int 21h ;Вызов DOS
  37. cseg ends; конец кода сегмента 1
  38. ;==============================================================
  39. ; Сегмент кода 2
  40. ;==============================================================
  41. cseg2 segment; начало кода сегмента 2
  42. assume cs:cseg2
  43. vyvod proc far; процедура обработки числа для вывода на экран
  44. aam ;двоичное число преобразуем в неупакованное BCD число
  45. add ax,3030h ; преобразуем в символы ASCII
  46. mov dl,ah; в DL старшая цифра
  47. mov dh,al ; в DH младшая цифра
  48. mov ah,02 ; вывод на дисплей
  49. int 21h ;Вызов DOS
  50. mov dl,dh
  51. int 21h;Вызов DOS
  52. ret; возврат из процедуры
  53. vyvod endp ; конец процедуры
  54. cseg2 ends ; конец кода сегмента 1
  55. end start ;завершаем всю программу, конец программы и указание метки начала выполнения.
программа рабочая. Выводит результат на экран. Как все это сделать через стек?

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

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

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

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

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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут