Вывод значения из регистра AX - Assembler

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

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

Всем доброго времени суток, друзья! Помогите, пожалуйста, решить такую проблему, нужно вывести число из АХ, обозначу в коде комментом, где именно:
Листинг программы
  1. stseg segment para stack "stack"
  2. db 64 dup ( "stack" )
  3. stseg ends
  4. dseg segment para public "data"
  5. num dw -12345
  6. pause db 2,?,2
  7. error db "incorrect number $"
  8. buff db 6,?,6 Dup(?)
  9. buff2 db 6,?,6 Dup(?)
  10. mrr db 13,13,"Please, enter num: $"
  11. mpp db 13,13,"Please, enter num to addition: $"
  12. qs db 0Dh,0Ah,24h
  13. dseg ends
  14. cseg segment para public "code"
  15. main proc far
  16. assume cs:cseg, ds:dseg, ss:stseg
  17. push ds
  18. xor ax,ax
  19. push ax
  20. mov ax,dseg
  21. mov ds,ax
  22. mov ax,03
  23. int 10h ;очистка экрана
  24. call outputs ;вывод строки "enter num"
  25. call inputn ;функция ввода числа
  26. ;call digit ;вывод числа
  27. lea dx, pause ;пауза
  28. mov ah,10
  29. int 21h
  30. mov ax,4C00h ;окончание мейна
  31. int 21h
  32. main endp
  33. inputn proc
  34. mov ah,0ah
  35. mov dx,offset buff ; аддрес буфера
  36. int 21h ; принимаем строку
  37. mov dx,offset qs
  38. mov ah,09
  39. int 21h
  40. mov dx,offset mpp
  41. mov ah,09
  42. int 21h
  43. mov ah,0ah
  44. mov dx,offset buff2 ; аддрес буфера
  45. int 21h ; принимаем строку
  46. mov dx,offset qs
  47. mov ah,09
  48. int 21h
  49. mov si,offset buff+2 ; берем аддрес начала строки
  50. cmp byte ptr [si],"-" ; если первый символ минус
  51. jne ii1 ;перейти, если не равно 0
  52. mov di,1 ; устанавливаем флаг
  53. inc si ; и пропускаем его
  54. ii1:
  55. xor ax,ax ;сравнение
  56. mov bx,10 ; заносим значение 10 в бх
  57. ii2:
  58. mov cl,[si] ; берем символ из буфера
  59. cmp cl,0dh ; проверяем не последний ли он
  60. je endin
  61. ; если символ не последний, то проверяем его на правильность
  62. cmp cl,'0' ; если введен неверный символ <0
  63. jb er ;перейти, если меньше чем
  64. cmp cl,'9' ; если введен неверный символ >9
  65. ja er ;перейти, если больше
  66. sub cl,'0' ; делаем из символа число
  67. mul bx ; умножаем на 10
  68. add ax,cx ; прибавляем к остальным
  69. inc si ; указатель на следующий символ
  70. jmp ii2 ; повторяем
  71. er: ; если была ошибка, то выводим сообщение об этом и выходим
  72. mov dx, offset error
  73. mov ah,09
  74. int 21h
  75. int 20h
  76. ; все символы из буфера обработаны число находится в ax
  77. endin:
  78. cmp di,1 ; если установлен флаг, то
  79. jnz ii3
  80. neg ax ; делаем число отрицательным
  81. ii3:
  82. add ax,5
  83. ;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
  84. ;ВОТ ЗДЕСЬ НУЖНО ВЫВЕСТИ РЕЗУЛЬТАТ НА ЭКРАН
  85. ret
  86. inputn endp
  87. outputs proc
  88. mov dx,offset mrr
  89. mov ah,09
  90. int 21h
  91. ret
  92. outputs endp
  93. new_s proc
  94. ;mov dx,0x0a
  95. ;mov ah,09
  96. ;int 21h
  97. ;ret
  98. new_s endp
  99. digit proc
  100. mov bx, num
  101. or bx,bx
  102. jns m1
  103. mov al,'-'
  104. int 29h
  105. neg bx
  106. m1:
  107. mov ax,bx
  108. xor cx,cx
  109. mov bx,10
  110. m2:
  111. xor dx,dx
  112. div bx
  113. add dl,'0'
  114. push dx
  115. inc cx
  116. test ax,ax
  117. jnz m2
  118. m3:
  119. pop ax
  120. int 29h
  121. loop m3
  122. ret
  123. digit endp
  124. cseg ends
  125. end main
Спасибо за внимание!

Решение задачи: «Вывод значения из регистра AX»

textual
Листинг программы
  1. add eax,ebx; EAX:=EAX+EBX

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


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

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

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

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

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

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