PowerPC VxWorks BSP分析(2)--PowerPC汇编
生活随笔
收集整理的這篇文章主要介紹了
PowerPC VxWorks BSP分析(2)--PowerPC汇编
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
PowerPC匯編
這里總結PPC指令集中幾種常用的指令。
首先為運算和邏輯指令,它與通用寄存器有關,源數據來自GPR或16位立即數,目的是GPR寄存器,操作為32位,GPR中存放32位更新數據,大多數都可以望文生義,注意在最后列的“cntlzw”指令“計算字中的第一個0”,在一個字中找到1時將一個指令中的0的數量找出,它在決定例外寄存器中最高優先服務時有用,我們將在例外處理那章討論。
下面為裝入存儲指令,它們對數據在存儲器中和通用寄存器中傳送非常有用,如果數據小于一個字,為半個字或一個字節。指令總是使數據變位32位,將不同位填0或符號擴展。
“lbz”為“存0入字節”。
“lha”為“存半字”,意思為將符號擴展到一個字。
“lhz”為“存半字擴展”。
下一個為“lwz”指令,它為“存字擴展0”它為PPC在64位結構中使用準備,但在32位結構中也可以使用。這個縮寫不變。
還有“store byte”指令,“store half word”和"store word"。
下面我們看到"load multiple word" , "store multiple word" , "load string word" 和"store string word" 。
另外,還有2個指令結尾位“brx" - "sthbrx"? 和 "stwbrx" 它 對 PPC 存 取 小 ENDIAN 格式數據非常有用,有可能是PowerPC與其他使用小ENDIAN格式數據的處理機共用存儲器,為使PowerPC可以存取這樣的數據,這些指令允許存取這樣的數據。如果數據以小ENDIAN順序進入總線,就把它存為大ENDIAN順序。
下面介紹支持指令流控制的幾個指令,它包括轉移指令.這里我們看到轉移指令,條件轉移指令,它們利用條件寄存器的位來決定是否轉移,在指令的右邊說明了條件寄存器,它分為4個4位域,在每一域中的位代表小于、大于、等于和總和溢出,這個寄存器提供了8種支持條件轉移指令的條件域。
同樣還有轉移到計數器的指令,SPR9用在用戶態編程模式中
特殊用途寄存器8可以完成基于接連寄存器的轉移指令,SPR8存儲著轉向子程序的地址。
還有自陷指令,一個系統調用指令,“rfi”用于例外服務程序,還有許多影響條件寄存器的指令。
下面,我們看到處理機控制指令的表,一個非常重要的因素是這些指令可以完成特殊用途寄存器之間和通用寄存器之間的數據交換,不可以直接對特殊用途寄存器中的值進行處理,但是,可以將一個值先拷貝到一個通用寄存器上再處理,操作后,將信息存到特殊用途寄存器上。
“特殊寄存器移出”指令將特殊寄存器中的數據移到通用寄存器上,“移入特殊寄存器”指令將通用寄存器上的數據移到特殊寄存器上。
舉例說,如果用戶要初始化計數寄存器,就要將數據裝入通用寄存器,這里“裝入立即數”指令裝入R13和計數寄存器,然后,移入特殊寄存器指令將R13中的值裝入計數寄存器。
比較指令可以影響任何條件寄存器域。
基本的比較指令語法為縮寫cmp后面進跟著4個域。
第一域說明CR0~CR7中哪一個受影響,第2域指出長度,有2種長度選擇,32位或64位,MPC860中只有32位。第三和第四域指出將會比較的寄存器rA和rB。
第二種比較的格式為“cmpl”比較邏輯,第三種為“cmpi”立即比較,第四種為“cmpli” 是立即比較邏輯;
比較功能也可以用簡化的縮寫完成,第一個例子是“cmpw r13, r14”,等于“cmp cr0,0,r13,r14”,表中下面的例子說明可以在操作數中包括cr5,它是用來指定cr5而不是cr0。
在下面還有2個舉例,有2個寄存器,r10包括16進制的7千萬,r11包含16進制的8千萬,第一個例子比較r10和r11并把值存入cr5中的條件位,在這里cmpw是一個符號比較,即r11和r10中的值有符號值。16進制,7千萬是一個大正數,16進制8千萬是一個負數,這樣r10比r11大所以大于位設置,而“小于”位和“等于”位為0。
下一個指令相似但為邏輯,在這里,參數作為無符號數處理,這樣,16進制8千萬大于16進制7千萬,所以11比10大,這樣小于位設置,而“大于”位和“等于”位為0。
這里我們學習使用XER寄存器的多精度運算,XER包含3個位:總和溢出、溢出和進位。
編程者需要指出使用或修改XER的那位,可以利用后綴的“C”“E”和/或“O”。“C”在CA中記錄進位,“E”利用CA作為指令中的操作數在CA中記錄進位。最后,“O”在溢出和總和溢出中記錄溢出。
作為例子,一個簡單的“add”指令不使用XER,“addc”在CA中記錄進位,“adde”利用CA作為操作數并將進位記入CA,“addo”在OV中記錄溢出,“addco”在OV中記錄溢出,在CA中記錄進位。
本文出自 “Inside SW,FW and HW R&D” 博客,請務必保留此出處http://21cnbao.blog.51cto.com/109393/133621
總結
以上是生活随笔為你收集整理的PowerPC VxWorks BSP分析(2)--PowerPC汇编的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 取代人力 中石化研发智能加油机器人:18
- 下一篇: 谷歌 Alphabet 第四季度净利润同