Вывод текста на экран - Assembler (223255)

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

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

написал программу для нахождения площади треугольника через высоту и основание. сделал ввод с клавы значений и вывод ответа на экран, но проблема с выводом текста и точки
Листинг программы
  1. LOCALS
  2. .model small
  3. .stack 100h
  4. .data
  5. a dw 0
  6. h dw 0
  7. Sz dw 0
  8. So dw 0
  9. Show_S db "Your S = $"
  10. Show_dot db ".$"
  11. .code
  12. main:
  13. call input
  14. mov a, ax
  15. call input
  16. mov h, ax
  17. mov bx, a
  18. imul bx
  19. mov bx, 2
  20. idiv bx
  21. mov Sz, ax
  22. mov So, dx
  23. mov ah, 9h
  24. mov dx, offset Show_S
  25. int 21h
  26. mov ax, Sz
  27. call Show
  28. mov ah, 9h
  29. mov dx, offset Show_dot
  30. int 21h
  31. mov ax, So
  32. call Show
  33. mov ax, 4C00h
  34. int 21h
  35. ;output func
  36. Show proc
  37. push ax
  38. push bx
  39. push cx
  40. push dx
  41. push di
  42. mov cx, 10
  43. xor di, di ; di - кол. цифр в числе
  44. ; если число в ax отрицательное, то
  45. ;1) напечатать '-'
  46. ;2) сделать ax положительным
  47. or ax, ax
  48. jns @@Conv
  49. push ax
  50. mov dx, '-'
  51. mov ah, 2 ; ah - функция вывода символа на экран
  52. int 21h
  53. pop ax
  54. neg ax
  55. @@Conv:
  56. xor dx, dx
  57. div cx ; dl = num mod 10
  58. add dl, '0' ; перевод в символьный формат
  59. inc di
  60. push dx ; складываем в стэк
  61. or ax, ax
  62. jnz @@Conv
  63. ; выводим из стэка на экран
  64. @@Show:
  65. pop dx ; dl = очередной символ
  66. mov ah, 2 ; ah - функция вывода символа на экран
  67. int 21h
  68. dec di ; повторяем пока di<>0
  69. jnz @@Show
  70. pop di
  71. pop dx
  72. pop cx
  73. pop bx
  74. pop ax
  75. ret
  76. Show endp
  77. ;input func
  78. input proc near
  79. push cx
  80. push dx
  81. push bx
  82. push si
  83. ; В SI будет признак знака, в BX - число, CX тоже пригодится.
  84. xor si, si
  85. xor bx, bx
  86. xor cx, cx
  87. ; Введём первый символ.
  88. mov ah, 01h
  89. int 21h
  90. ; Здесь и только здесь может попасться минус. Если это не так,
  91. ; перейдём к обычной обработке символа.
  92. cmp al, '-'
  93. jne short @ii1
  94. ; Иначе установим признак знака и
  95. inc si
  96. ; введём следующий символ.
  97. @ii0: mov ah, 01h
  98. int 21h
  99. ; Если символ за '9', то ввод некорректный, прекратим этот беспредел.
  100. @ii1: cmp al, 39h
  101. ja short @ii2
  102. ; Переводим символ в число. Если при этом получится нечто отрицательное,
  103. ; то исходный символ перед '0', значит, ввод можно прерывать.
  104. sub al, 30h
  105. jb short @ii2
  106. ; Итак, в AL цифра, которую нужно приписать справа к уже имеющемуся
  107. ; в BX числу. Поместим цифру из AL в CX. Именно для этого он обнулялся.
  108. mov cl, al
  109. ; Умножим текущий результат на 10.
  110. shl bx, 1 ; BX = 2 * bx
  111. mov ax, bx ; AX = 2 * bx
  112. shl ax, 2 ; AX = 8 * bx
  113. add bx, ax ; BX = 10 * bx
  114. add bx, cx ; BX = 10 * bx + al
  115. ; И так, пока вводят цифры.
  116. jmp short @ii0
  117. ; Когда ввели нецифру, посмотрим, надо ли менять знак,
  118. @ii2: test si, si
  119. jz short @ii3
  120. neg bx
  121. ; перейдём на новую строку
  122. @ii3: mov ah, 02h
  123. mov dl, 0Dh
  124. int 21h
  125. mov dl, 0Ah
  126. int 21h
  127. ; и запишем результат в AX.
  128. mov ax, bx
  129. pop si
  130. pop bx
  131. pop dx
  132. pop cx
  133. ret
  134. input endp
  135. end main
выводит кучу мусора + просто один а вот что если убрать весь текст. выведет 17 и 1

Решение задачи: «Вывод текста на экран»

textual
Листинг программы
  1. mov ax,@data
  2. mov ds,ax

Объяснение кода листинга программы

  1. Переменная ax используется как регистр для хранения данных и команд.
  2. Значение переменной ax копируется в регистр ds.
  3. Переменная ds используется как регистр для хранения данных и команд.
  4. Значение переменной ds используется для определения сегмента данных.
  5. Переменная @data указывает на начало области данных в памяти компьютера.

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


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

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

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

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

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

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