Вывод сообщения - Assembler

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

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

После вывода вещественного числа, не могу вывести сообщение. TASM
Листинг программы
  1. .286C
  2. .model small
  3. .data
  4. flt_num dq -324.7341234781
  5. x dq 5.5
  6. y dq 1.1
  7. m1 DB 'Hello World',13,10,'$'
  8. .code
  9. start:
  10.  
  11. mov ax, @data
  12. mov ds, ax
  13. finit
  14. fld x
  15. fld y
  16. fadd
  17. push 10
  18. call outfloat
  19.  
  20. .exit
  21. length_frac equ [bp+4]
  22. ten equ word ptr [bp-2]
  23. temp equ word ptr [bp-4]
  24. OutFloat proc near
  25. enter 4, 0
  26. mov ten, 10
  27. ftst
  28. fstsw ax
  29. sahf
  30. jnc @positiv
  31. mov al, '-'
  32. int 29h
  33. fchs
  34. @positiv:
  35. fld1
  36. fld st(1)
  37. fprem
  38. fsub st(2), st
  39. fxch st(2)
  40. xor cx, cx
  41. @1:
  42. fidiv ten
  43. fxch st(1)
  44. fld st(1)
  45. fprem
  46. fsub st(2), st
  47. fimul ten
  48. fistp temp
  49. push temp
  50. inc cx
  51. fxch st(1)
  52. ftst
  53. fstsw ax
  54. sahf
  55. jnz @1
  56. @2:
  57. pop ax
  58. add al, '0'
  59. int 29h
  60. loop @2
  61. fstp st
  62. fxch st(1)
  63. ftst
  64. fstsw ax
  65. sahf
  66. jz @quit
  67. mov al, '.'
  68. int 29h
  69. mov cx, length_frac
  70. @3:
  71. fimul ten
  72. fxch st(1)
  73. fld st(1)
  74. fprem
  75. fsub st(2), st
  76. fxch st(2)
  77. fistp temp
  78. mov ax, temp
  79. or al, 30h
  80. int 29h
  81. fxch st(1)
  82. ftst
  83. fstsw ax
  84. sahf
  85. loopne @3
  86. @quit:
  87. fstp
  88. fstp st
  89. leave
  90. ret 2
  91. OutFloat endp
  92. mov ax, @data
  93. mov ds, ax
  94. mov dx,offset m1
  95. mov ah,9
  96. int 21h
  97. mov ax,4c00h
  98. int 21h
  99. end start

Решение задачи: «Вывод сообщения»

textual
Листинг программы
  1. .286C
  2. .model  small
  3. .stack
  4. .data
  5.  
  6. flt_num:dq      -324.7341234781
  7. x:  dq 5.5
  8. y:  dq 1.1
  9. m1: DB 13,10,'Hello World',13,10,'$'
  10.     .code
  11. start:
  12.     mov ax, @data
  13.     mov ds, ax
  14.  
  15.     finit
  16.     fld x
  17.     fld y
  18.     fadd
  19.  
  20.     push    10
  21.     call    outfloat
  22.  
  23.     mov dx,offset m1
  24.     mov ah,9
  25.     int 21h
  26.     mov ax,4c00h
  27.     int 21h
  28.  
  29.     length_frac equ [bp+4]
  30.  
  31.     ten equ word ptr [bp-2]
  32.     temp    equ word ptr [bp-4]
  33.  
  34. OutFloat    proc near
  35.     enter   4, 0
  36.     mov ten, 10
  37.     ftst
  38.     fstsw   ax
  39.     sahf
  40.     jnc @positiv
  41.     mov al, '-'
  42.     int 29h
  43.     fchs
  44. @positiv:
  45.     fld1
  46.     fld st(1)
  47.     fprem
  48.     fsub    st(2), st
  49.     fxch    st(2)
  50.     xor cx, cx
  51.  
  52. @1:
  53.     fidiv   ten
  54.     fxch    st(1)
  55.     fld st(1)
  56.     fprem
  57.     fsub    st(2), st
  58.     fimul   ten
  59.     fistp   temp
  60.     push    temp
  61.     inc cx
  62.     fxch    st(1)
  63.     ftst
  64.     fstsw   ax
  65.     sahf
  66.     jnz @1
  67. @2:
  68.     pop ax
  69.     add al, '0'
  70.     int 29h
  71.     loop    @2
  72.  
  73.     fstp    st
  74.     fxch    st(1)
  75.     ftst
  76.     fstsw   ax
  77.     sahf
  78.     jz  @quit
  79.     mov al, '.'
  80.     int 29h
  81.     mov cx, length_frac
  82. @3:
  83.     fimul   ten
  84.     fxch    st(1)
  85.     fld st(1)
  86.     fprem
  87.     fsub    st(2), st
  88.     fxch    st(2)
  89.     fistp   temp
  90.     mov ax, temp
  91.     or  al, 30h
  92.     int 29h
  93.     fxch    st(1)
  94.     ftst
  95.     fstsw   ax
  96.     sahf
  97.     loopne  @3
  98. @quit:
  99.     fstp
  100.     fstp    st
  101.     leave
  102.     ret 2
  103. OutFloat    endp
  104.  
  105.     end start

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

Список элементов кода:

  1. Переменные flt_num, x, y, m1, являются переменными типа double и содержат числа с плавающей точкой.
  2. Код начинается с вызова функции outfloat, которая принимает на вход число типа double, обрабатывает его и выводит в консоль.
  3. Затем код выводит строку Hello World с символом доллара в конце.
  4. Далее происходит попытка вывода числа с плавающей точкой в консоль. Функция outfloat обрабатывает число, преобразуя его в строку, используя арифметические операции для получения цифр после запятой.
  5. Для вывода цифр после запятой используется цикл, который повторяется до тех пор, пока не будут выведены все цифры числа.
  6. В конце кода происходит возврат в основную программу.

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


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

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

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

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

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

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