• 【微机原理与汇编语言】循环程序设计


    一、实验目的

    1.熟练掌握8086/8088常用汇编指令的使用方法

    2.熟练掌握循环结构程序编程技巧

    3.熟练掌握汇编语言程序运行调试方法

    二、实验要求

    认真分析实验题目,设计程序流程图,独立完成代码编写及运行调试。

    三、实验题目

    给出不大于255的十个正整数,分别计算出其中偶数和奇数的平均值,并以十进制的方式输出,保留到小数点后两位。

    四、程序流程图

    略。

    五、程序代码

    1. sseg segment stack
    2. stp db 100 dup(0)
    3. sseg ends
    4. dseg segment
    5. dta db 12,14,12,14,12,16,57,21,25,11
    6. dtb db 0;偶数计数器
    7. dtc db 0;奇数计数器
    8. jishu db 0,0
    9. oushu db 0,0
    10. num db ?
    11. flag db 1
    12. dseg ends
    13. cseg segment
    14. assume cs:cseg,ds:dseg
    15. assume ss:sseg
    16. print macro
    17. add al,30h
    18. mov dl,al
    19. mov ah,02h
    20. int 21h
    21. endm
    22. huanhang macro
    23. mov al,0ah
    24. mov dl,al
    25. mov ah,02h
    26. int 21h
    27. endm
    28. shijinzhi macro
    29. local a,b,c
    30. mov num,al
    31. ;判断是否大于100
    32. cmp num,100
    33. jc a;num<100,cf =1,跳a
    34. mov ah,0
    35. mov al,num
    36. mov bl,100
    37. div bl;al为商,ah为余数
    38. mov num,ah
    39. print
    40. mov flag,0
    41. a: ;判断是否大于10
    42. cmp num,10
    43. jc b
    44. mov ah,0
    45. mov al,num
    46. mov bl,10
    47. div bl;al为商,ah为余数
    48. mov num,ah
    49. print
    50. mov flag,1
    51. b: cmp flag,1
    52. ;flag的作用是防止余数小于10
    53. jnc c
    54. mov al,0
    55. print
    56. c: mov al,num
    57. print
    58. endm
    59. panduan proc
    60. mov dl,2eh
    61. mov ah,02h
    62. int 21h
    63. mov al,num
    64. mov ah,0
    65. cmp ah,al
    66. jc notzero
    67. print
    68. ret
    69. notzero: mov al,num
    70. mov num,100
    71. mul num;存在ax中
    72. div bl
    73. shijinzhi
    74. ret
    75. panduan endp
    76. start: mov ax,dseg
    77. mov ds,ax
    78. mov ax,sseg
    79. mov ss,ax
    80. mov sp,size stp
    81. mov cx,10
    82. mov si,0
    83. again: mov al,[si]
    84. shr al,1;cf = 1奇,cf = 0
    85. jc d
    86. mov bl,[si]
    87. add oushu,bl
    88. adc byte ptr oushu+1,0
    89. inc dtb
    90. jmp e
    91. d: mov bl,[si]
    92. add jishu,bl
    93. adc byte ptr jishu+1,0
    94. inc dtc
    95. e: inc si
    96. loop again
    97. mov ah,oushu+1
    98. mov al,oushu
    99. div dtb;al中存平均值,ah存余数
    100. mov oushu,al
    101. mov oushu+1,ah
    102. mov ah,jishu+1
    103. mov al,jishu
    104. div dtc;
    105. mov jishu,al
    106. mov jishu+1,ah
    107. ;按十进制输出
    108. mov al,oushu
    109. shijinzhi
    110. mov al,oushu+1
    111. mov num,al
    112. mov bl,dtb
    113. call panduan
    114. huanhang
    115. mov al,jishu
    116. shijinzhi
    117. mov al,jishu+1
    118. mov num,al
    119. mov bl,dtc
    120. call panduan
    121. mov ah,4ch
    122. int 21h
    123. cseg ends
    124. end start

    运行截图:

    六、实验总结

    本次实验中,我对循环结构程序又有了更新一层认识,对汇编指令的使用规则及方法掌握的更熟练了。在本次实验中,我同时也遇到了一些困难:

    1. 在最后的几次调试时,发现小数位是不对的,且只有一位数。经过调试发现是我直接将余数打印了出来,并没有处理成小数。要想将余数转化成小数,将余数乘以10的倍数再除以除数即可。
    2. 在写宏定义时,也想运用循环结构,不知是否可行。在老师的帮助下,发觉需要在头部声明:local x,x,x。原因是当宏在主程序中被二次展开时,标号会重名,所以要提前声明一下防止出错。
    3. 在写程序的过程中也犯了一些基础的错误,如不能直接div 数值,需将数值放在寄存器中;adc oushu+1,0是不行的,需要指明数值类型是字还是字节,应修改为:adc byte ptr oushu+1,0;以及mov 存储器,存储器这种低级的错误。

    经过这段时间的训练,一点点地编写代码与调试,对于汇编语言有了更高一层的理解与掌握,也认识到了它身为低级语言的重要性,希望我在未来的学习中能更加深刻的学习与掌握相关知识,搭建好人与机器沟通的桥梁。

  • 相关阅读:
    CSS基础12-canvas
    你见过哪些实用到爆的 Java 代码技巧?
    我的周刊(第068期)
    使用开源ros包实现导航功能(一)
    C# 获取本机IP地址,IPv4,IPv6(保姆级)
    微信小程序检查版本更新并重启
    Tapdata 获阿里云首批产品生态集成认证,携手阿里云共建新合作
    mac osx 10.9的电脑如何删除Windows系统
    [附源码]计算机毕业设计JAVAjsp社区新冠疫苗接种管理系统
    Python数据容器——字典的常用操作(增、删、改、查)
  • 原文地址:https://blog.csdn.net/weixin_52553215/article/details/139483539