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

Freescale MC9S08AW60汇编学习笔记(四)

时间:2015-04-30 19:48:21      阅读:119      评论:0      收藏:0      [点我收藏+]

标签:

  面对复杂的程序,我们不能都放入main主程序之中,那样会让人思路不够清晰,于是我们加入了子程序,这样程序就有了条理。主程序决定我们的思路,子程序则实现具体的功能。如果程序没有达到预想中的效果,就可以有条有理的进行分析,这在编写汇编程序时是很重要的,毕竟汇编语言不像c语言、c++、java等高级语言贴近人类语言。汇编语言的优势在于执行效率,可以用于程序的优化。为了让程序更加强大,我们给程序加入查表的功能,利用查表可以实现转换、计算等各种功能。

  例子:将单字节变量Hex_Byte中存放的十六进制数转换为两位ASCII码,并将结果存至以Result开首的字节存储单元中,可使用子程序。例如4AH的ASCII码为3441H,$F9的ASCII码为4639H。代码如下:

 org $0070
Hex_Byte ds.b 1
Result ds.b 2

 org $0870
ASCII_Table dc.b ‘0123456789ABCDEFG‘

Hex_To_Ascii: 
  clra
  clrx
  clrh

  lda Hex_Byte
  and #$f0
  nsa                         ;作用是:将寄存器a中的高4为与低4位交换:即(A[3:0]:A[7:4])-->A
  tax                         ;A-->X
  clrh                        ;00H-->H,查表时使用的寻址使用H:X中的值
  lda ASCII_Table,x    ;查表
  sta Result

  lda Hex_Byte
  and #$0f
  tax
  lda ASCII_Table,x
  sta Result+1
  rts

main:
  clra
  clrx
  clrh

  mov #4AH,Hex_Byte

  bsr Hex_To_Ascii

again:
  nop
  jmp again


 org $fffe
 dc.w main

  请时刻记住MC9S08AW60使用的是大端方式:低地址存放最高有效字节。这就是为什么高4位的ASCII码存放入Result中,二低4位的ASCII码存放入Result+1中。查表时是这样执行的:lda ASCII_Table,x    ;查表    可以理解为:找到表中的第x位并放入A中。

  我们再来试试查立方表:设字节变量Num存放在RAM的$0070单元,取值范围为0T~9T,编写查表子程序,查出变量的立方值,并存入Res_Cube字节变量中。代码如下:

 org $0070
Num ds.b 1
Res_Cube ds.b 2

 org $1860
Cube_Tab: dc.w 0000,0001,0008,0027,0064,0125,0216,0343,0512,0729


Cube: 
  clra
  clrx
  clrh

  ldx Num            ;Num-->X
  lslx                    ;X*2-->X
  clrh                    ;查表使用H:X中的值寻址,所以不要忘记清零
  lda Cube_Tab,x  ;查表得立方值高位
  sta Res_Cube    ;大端方式:低地址存放最高有效字节
  lda Cube_Tab+1,x ;查表得立方值地位
  sta Res_Cube+1
  rts

main:
  clra
  clrx
  clrh

  mov #$09,Num

  bsr Cube

again:
  nop
  jmp again


 org $fffe
 dc.w main

  分析:由于9的立方值为729T=2D9H,故表中的每一个立方值需用2B来存储,则数值Num的立方值的存储地址Addr_n和立方表的首地址Cube_Tab的关系为:Addr_n=Cube_Tab+Num*2。

  查表技术是汇编语言程序设计的一个重要技术,通过查表可避免复杂的计算和编程,如查平方表、立方表、函数表、数码管显示的段码表等。表格常数一定要定位到flash区域才能正确实现查表功能,不能将其定位到RAM区域;此外要注意清零H寄存器。

Freescale MC9S08AW60汇编学习笔记(四)

标签:

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

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