当前位置:   article > 正文

汇编语言:键盘输入1~8之间的一个属,求阶乘,十进制显示在屏幕上_汇编显示数字到屏幕

汇编显示数字到屏幕

汇编语言实验三:

目的及要求:

  1. 从键盘输入1到8之间的一个数,求阶乘

  1. 把结果在屏幕上以十进制数形式显示出来;

  1. 把整个过程和执行结果截图,写成实验报告

实验步骤:

  1. 定义堆栈段,数据段和代码段,数据段用于存放字符串以及回车换行指令;

  1. 主程序用于显示字符串以及call子程序,最后返回操作系统;

  1. Input子程序用于接受键盘输入,判断输入的正确性,并将输入结果保存至bx寄存器;

  1. Rank子程序用于计算阶乘,要初始化ax,并且计算结果保存到ax寄存器;

5、Output子程序用于输出,将10作为除数并放在cl中,ch则用于计数并用于判断输出是否完成。

  1. 主程序流程图:

  1. input子程序:

  1. rank子程序:

  1. output子程序:

程序代码:

  1. stacks segment stack
  2. dw 128 dup(?)
  3. stacks ends
  4. datae segment
  5. string1 db 'input number is :','$'
  6. string2 db ' is the result:','$'
  7. crlf db 0ah,0dh,'$'
  8. string3 db 'no result','$'
  9. datae ends
  10. code segment
  11. assume cs:code,ds:datae,ss:stacks
  12. start:
  13. mov ax,datae
  14. mov ds,ax
  15. lea dx,string1
  16. mov ah,9
  17. int 21h
  18. call input ;用于接收输入的N的数值
  19. mov cx,dx
  20. call rank ;阶乘运算
  21. call output ;输出结果
  22. lea dx,string2
  23. mov ah,9
  24. int 21h
  25. mov ah,4ch
  26. int 21h
  27. input proc near
  28. push ax ;保护现场
  29. push bx
  30. push cx
  31. mov dx,0 ;作为返回值,保存结果
  32. mov bl,10 ;用于乘法计算
  33. inputnum:
  34. mov ah,1 ;接受键盘输入数值,保存在al中
  35. int 21h
  36. cmp al,'0'
  37. jb error1
  38. cmp al,'0'
  39. je error2
  40. cmp al,'8' ;判断数字是否大于8
  41. ja error1
  42. mov cl,al ;暂时存数
  43. sub cl,48
  44. mov ch,0
  45. mov ax,dx
  46. mul bl
  47. mov dx,ax ;存储结果
  48. add dx,cx
  49. jmp inputnum
  50. error1:
  51. pop cx
  52. pop bx
  53. pop ax
  54. ret
  55. error2:
  56. lea dx,crlf ;回车换行
  57. mov ah,9
  58. int 21h
  59. mov ah,2h
  60. mov dl,'1' ;输入的值为0,把1直接显示出来
  61. int 21h
  62. lea dx,string2
  63. mov ah,9
  64. int 21h
  65. mov ah,4ch
  66. int 21h
  67. input endp
  68. rank proc near
  69. push bx
  70. mov ax,1 ;初始化ax
  71. mov bx,1 ;初始化bx,用于计数外加乘法运算
  72. fact:
  73. mul bl
  74. cmp bx,cx
  75. je exit1 ;运算结束
  76. inc bx
  77. jmp fact
  78. exit1:
  79. pop bx ;恢复现场,数据出栈,恢复数值
  80. ret
  81. rank endp
  82. output proc
  83. push cx
  84. push dx
  85. mov ch,0
  86. mov cl,10 ;作为除数
  87. output1:
  88. cmp ax,0
  89. je rotate
  90. div cl ;取出数据,放置在ah中
  91. push ax
  92. mov ah,0 ;将al与ax等值
  93. inc ch
  94. jmp output1
  95. rotate:
  96. cmp ch,0 ;输出完成的判断
  97. je exit2
  98. pop dx ;接收数据,进行输出
  99. mov dl,dh
  100. add dl,48
  101. mov ah,2
  102. int 21h
  103. dec ch
  104. jmp rotate
  105. exit2:
  106. pop dx ;恢复现场
  107. pop cx
  108. ret
  109. output endp
  110. code ends
  111. end start

实验结果:

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Monodyee/article/detail/80506
推荐阅读
相关标签
  

闽ICP备14008679号