码迷,mamicode.com
首页 > 其他好文 > 详细

Freescale MC9S08AW60汇编学习笔记(三)

时间:2015-04-30 18:01:53      阅读:123      评论:0      收藏:0      [点我收藏+]

标签:

  前面给出了一个实现加法的小程序,但是如果要求变得更复杂、步骤变得更繁琐,这时又该怎么办呢??我们可以使用子程序来解决这个问题,这里给个例子:若字变量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。

Freescale MC9S08AW60汇编学习笔记(三)

标签:

原文地址:http://www.cnblogs.com/daviddolphin/p/4469419.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!