日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Freescale MC9S08AW60汇编学习笔记(五)

發布時間:2024/8/24 编程问答 50 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Freescale MC9S08AW60汇编学习笔记(五) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

  前面學習了查表的功能,可以用查表的功能實現不少強大的功能,如查立方表、平方表、函數表、數碼管顯示的段碼表等。這里還有一種由查表和轉移指令配合使用而實現的一種強大的功能:散轉。散轉是指根據輸入數據的不同來跳轉到不同的程序入口進行處理,也就是說如果有多個子程序,我們不僅可以讓它們按順序一個個執行,還可以根據做判斷用的數據的值來決定跳轉到哪一個子程序。實現散轉的具體做法是:在程序中定義一塊連續存儲單元作為跳轉表,表中順序存放各分支處理程序的跳轉地址。各跳轉地址在表中的偏移地址等于跳轉表首地址加上它們各自的序號所占字節數的乘積。感覺關于跳轉地址這一塊有點不好理解,就用一個例子來說明一下:

  設字節變量Num的取值范圍為0~3,另有程序入口地址Pro0~Pro3,編寫子程序,要求根據Num的值轉向不同的Pro程序。如Num為2則轉向Pro2。代碼如下:

?org $0070
Num ds.b 1

?org $1860

Pro0:nop ? ? ? ? ? ? ? ? ? ?;子程序群,這里都讓他們空操作。
   rts
Pro1:nop
   rts
Pro2:nop
   rts
Pro3:nop
   rts

Sbranch: ? ? ? ? ? ? ? ? ? ;分支程序,有點像c語言中switch
  ldx Num ? ? ? ? ? ? ?;Num-->X
  lda #05h ? ? ? ?
  mul ? ? ? ? ? ? ? ? ? ? ;Num*5-->X:A
  tax ? ? ? ? ? ? ? ? ? ? ?;A-->X ?
  clrh ? ? ? ? ? ? ? ? ? ? ;查表之前別忘清零
  jmp Pro_Tab,x

Pro_Tab: ? ? ? ? ? ? ? ? ? ;跳轉表
  jsr Pro0 ? ? ? ? ? ? ? ;跳轉到Pro0,3B
  bra Sb_End ? ? ? ? ?;調用Pro0完畢,返回,2B

  jsr Pro1
  bra Sb_End

  jsr Pro2
  bra Sb_End

  jsr Pro3
Sb_End: rts

main:
  clra
  clrx
  clrh

  mov #$01,Num ? ? ;設定Num的值,用來作為選擇子程序的判斷數

  bsr Sbranch


again:
  nop
  jmp again


?org $fffe
?dc.w main

  細心的人肯定會發現Num是先乘以5之后才用來做散轉的,其原因在于Pro_Tab標號后面的JSR指令是3字節指令,BRA指令值2字節指令,故數值Num、標號Pro_Tab的地址Addr_Pro和指令語句JSR ?Pro_n的首地址Addr_Pro_n之間的關系為:

               ? ? ? ? ? Address_Pro_n=Addr_Pro+Num*5

  是不是突然發現匯編的強大了,從一開始匯編給人的感覺是在寄存器之間跳來跳去變成了匯編可以實現這個功能那個功能,只要設計足夠精巧、心思足夠細膩,就算是匯編這種呆板的機器語言也可以煥發勃勃生機,舉個例子:MenuetOS是一款完全用匯編語言寫成的操作系統。 因此它運行起來超快,體積也非常小,它甚至可以放在一張軟盤內。MenuetOS提供了搶占式多任務處理,一個引人注目的漂亮GUI,用于網絡接入的 TCP/IP堆棧等等。由此可見:強大的不是工具而是人。當然,如果強大的工具加強大的人必然可以爆發出驚人的力量。

轉載于:https://www.cnblogs.com/daviddolphin/p/4469901.html

總結

以上是生活随笔為你收集整理的Freescale MC9S08AW60汇编学习笔记(五)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。