《汇编语言与接口技术》——子程序设计

一、 实验要求

  1. 编程实现两个数:#8888H 和 #79H 的乘除运算。
  2. 结合实验1的代码,将加减乘除四则运算写成四个子程序,注意现场保护。

二、 实验设计

 1.整体思路

  1. 主程序 MAIN
    • 通过 ACALL 指令调用四个不同的子程序,分别进行加法、减法、乘法和除法。
    • 在每次调用子程序之前,清零寄存器,以确保没有之前的结果干扰当前运算。
    • ADDI 子程序实现加法,SUBI 子程序实现减法,MULI 子程序实现乘法,DIVI 子程序实现除法。
  2. 加法子程序 ADDI
    • 将两个数 NUM1NUM2 分别加载到寄存器,并执行加法。
    • 结果存储在 R1R0 寄存器中,需要考虑进位。
  3. 减法子程序 SUBI
    • 将两个数 NUM1NUM2 分别加载到寄存器,并执行减法。
    • 结果存储在 R1R0 寄存器中,需要考虑借位。
  4. 乘法子程序 MULI
    • 将两个数 NUM1NUM2 分别加载到寄存器,并执行乘法。
    • 结果以低位存储在 R2,R1,R0 寄存器,高位存储在 R1 寄存器。
  5. 除法子程序 DIVI
    • 初始化被除数 NUM1 和除数 NUM2
    • 通过一个循环,一次减去除数,同时记录商。
    • 当被除数高位发生借位时,进入 DOWN 部分,修正商和余数。
    • 在最后,将商存储在 R6R7 寄存器中。

2.流程图

图2-1 流程图

3.主要模块设计思路及分析

  1. 主程序模块 (MAIN):
    • 这是程序的入口点,负责调用四个不同的子程序来执行加法、减法、乘法和除法操作。
    • 在每次调用子程序之前,初始化相关寄存器和标志位,以确保结果不会受到之前运算的影响。
  2. 加法子程序 (ADDI):
    • 这个子程序实现两个数的加法操作。
    • 加载要相加的两个数到寄存器。
    • 执行加法操作,并考虑进位情况。
    • 将结果存储在适当的寄存器中。
  3. 减法子程序 (SUBI):
    • 这个子程序实现两个数的减法操作。
    • 加载被减数和减数到寄存器。
    • 执行减法操作,并考虑借位情况。
    • 将结果存储在适当的寄存器中。
  4. 乘法子程序 (MULI):
    • 这个子程序实现两个数的乘法操作。
    • 加载被乘数和乘数到寄存器。
    • 执行乘法操作,并将结果的低位和高位分别存储在不同的寄存器中。
  5. 除法子程序 (DIVI):
    • 这个子程序实现两个数的除法操作。
    • 初始化被除数和除数。
    • 使用循环来重复减去除数,并记录商。
    • 处理高位借位情况以及余数的计算,最终将商和余数存储在适当的寄存器中。

三、 实现效果

图3-1

调用完减法指令:

   8888

-      79

————

    880F

结果分别存在R0,R1。

图3-2

调用完之后,进行清零操作,避免影响后续计算。

图3-3

调用完加法指令:

        8888

+          79

—————

         8901

结果分别存在R0,R1。

图3-4

调用除法:

8888

-   79

————

             一直减,直到高位发生借位

最终结果保存到R7与R6。

图3-5

乘法调用:

           8888

      x       79

          —————

             4048

     4048

             —————

         408848

最终结果保存在R2,R1,R0

  • 总结

        通过实验,我成功地设计并实现了一个基于汇编语言的程序,能够对两个16位的数进行加法、减法、乘法和除法运算。在主程序中,我使用了 ACALL 指令来调用四个不同的子程序,每个子程序负责一个特定的运算。

        在加法子程序(ADDI)中,我加载了两个数到寄存器,并执行了加法操作,同时考虑了进位的情况。减法子程序(SUBI)类似,加载了被减数和减数,并执行减法操作,处理了借位的情况。

        乘法子程序(MULI)实现了乘法运算,将两个数加载到寄存器中,并计算了结果的低位和高位。除法子程序(DIVI)则通过循环减去除数的方式,计算商和余数,并处理了高位借位的情况。

        实验结果表明,程序能够正确地执行加法、减法、乘法和除法操作,得到了预期的结果。通过流程图和模块设计,成功地组织了程序结构,使其清晰易懂。

        这个实验可以加深我们对汇编语言和低级计算机操作的理解,特别是在处理进位、借位和循环等方面。通过实践,我们更深入地了解了计算机底层运算的细节,对编程和计算机体系结构也有了更深刻的认识。

  • 10
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值