Freescale MC9S08AW60汇编学习笔记(三)

  前面给出了一个实现加法的小程序,但是如果要求变得更复杂、步骤变得更繁琐,这时又该怎么办呢??我们可以使用子程序来解决这个问题,这里给个例子:若字变量Data1和Data2分别存放着两个16位无符号数,编写求两个数之和的子程序,并将和存放到Sum字节存储空间中。代码如下:

 org $0070
data1 ds.b 2
data2 ds.b 2
sum ds.b 3

 org $1860
Add_Pro: clc        ;清空进位标志位
  clrx
  clrh
  clra

  mov #$00,data1
  mov #$04,data1+1
  mov #$00,data2
  mov #$28,data2+1

  lda data1+1
  add data2+1
  sta sum+2

  lda data1
  adc data2
  sta sum+1
  rola                    ;得到第17为,主要操作是:将寄存器a中数据向做移一位并把进位标志位放入寄存器a中的第一位

  and #01H
  sta sum

  rts                     ;子程序返回指令

main:
  clra
  clrx
  bsr Add_Pro    ;子程序调用,直接进入子程序中,执行子程序中的程序。

again:
  nop
  jmp again

 org $fffe
 dc.w main
  分析:两个16位无符号数相加,和为17位,至少需要3B的存储空间。又因为MC9S08AW60的存储方式是大端方式:低地址存放最高有效字节。所以对两个数的低位数相加时是使用Data1+1、Data2+1。

转载于:https://www.cnblogs.com/daviddolphin/p/4469419.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值