日韩一区二区三区精品,欧美疯狂xxxxbbbb牲交,热99re久久免费视精品频,人妻互换 综合,欧美激情肉欲高潮视频

寫在前面

??就我所知,STM8的開發(fā)平臺有兩種:意法官方的STVD和IAR for STM8. STVD沒嘗試過。反正IAR用的感覺還湊合,各種該有的功能都有,但界面不怎么友好。估計是低版本的緣故,由于我長時間盯著屏幕眼睛酸痛,所以沒辦法只能把編輯界面底色改成黑色,可TM怎么行號編程白色的了?根本看不清??床磺寰筒豢戳藛h,反正也沒啥用。但是就是感覺超不爽。而且字體顯示不知道怎么搞的,在縮放的時候就變得特別奇怪,跟手寫的一樣。


相關(guān)資料

??如之前所述,官方的永遠是最好的,沒有誰比創(chuàng)造者更了解他的產(chǎn)品了。

在這里插入圖片描述

環(huán)境設(shè)置

??俗話說,站在巨人的肩膀上能看得更遠。學習匯編也是一樣,先看代碼。但是由于匯編對于不同的芯片差異很大,網(wǎng)絡(luò)上也很難找到資源。怎么辦呢?最好的辦法是去看看編譯環(huán)境是怎么把c語言轉(zhuǎn)換成匯編的。但是默認情況下,編譯結(jié)果是不會自動跑到workspace的。所以需要作如下設(shè)置:

1. workspace右鍵選’options…'或單擊Project菜單選擇’options…'打開工程選項

2. 選擇 ‘C/C++ Compiler’,在 ‘List’ 選項卡中選擇 ‘Output assembler file’,并選擇其子選項 'Include source’

??‘Output assembler file’ 是為了讓編譯器輸出匯編的編譯結(jié)果,‘Include source’ 可以把對應(yīng)的C語言標在每段匯編前,這樣有助于理解每段匯編的含義。如果想看到全部匯編信息,請將 ‘Include all call frame information’ 勾選。

3. 還是在 ‘Options…’ => ‘C/C++ Compiler’ 中,選擇 ‘Optimization’ 選項卡,優(yōu)化等級選擇 ‘Low’ 或 'None’

??選擇優(yōu)化等級的原因是,在高等級的優(yōu)化中,C語言和匯編的對應(yīng)關(guān)系不是特別明顯,有的時候會把十幾行代碼一起優(yōu)化掉,雖然結(jié)果相同,但是你很難去用自己寫的時候的思路去理解生成的代碼,而且有的時候會把你的代碼邏輯徹底變掉。之前就遇到過這種情況,初始化的時候本來想用查表法去對參數(shù)賦初值,結(jié)果發(fā)現(xiàn)改Flash里面的數(shù)據(jù)根本不會影響運行結(jié)果。把匯編打開之后,發(fā)現(xiàn)居然把從Flash取值的指令直接優(yōu)化成立即數(shù)尋址。唉,不得不感慨編譯器不懂我啊。當然還有其他更好的辦法解決,之后會講到。


??完成以上設(shè)置之后,去編譯你的工程,你會發(fā)現(xiàn)在每個c文件下多了個Output文件夾,點開后,里面有一個 ‘.s’ 文件,這個里面就是編譯得到的匯編結(jié)果。 

在這里插入圖片描述
在這里插入圖片描述

匯編語言結(jié)構(gòu)

??做完上述設(shè)置之后,編譯完打開 ‘.s’ 文件,你會看到如下格式的代碼:


        RTMODEL "__SystemLibrary", "DLib"

        RTMODEL "__code_model", "small"

        RTMODEL "__core", "stm8"

        RTMODEL "__data_model", "medium"

        RTMODEL "__rt_version", "4"


        EXTERN ?b0

        EXTERN ?b1

        EXTERN ?w0

        EXTERN ?w1


        PUBLIC array

        PUBLIC main

        PUBLIC val

        

          CFI Names cfiNames0

          CFI StackFrame CFA SP DATA

          CFI Resource A:8, XL:8, XH:8, YL:8, YH:8, SP:16, CC:8, PC:24, PCL:8

          CFI Resource PCH:8, PCE:8, ?b0:8, ?b1:8, ?b2:8, ?b3:8, ?b4:8, ?b5:8

          CFI Resource ?b6:8, ?b7:8, ?b8:8, ?b9:8, ?b10:8, ?b11:8, ?b12:8, ?b13:8

          CFI Resource ?b14:8, ?b15:8

          CFI ResourceParts PC PCE, PCH, PCL

          CFI EndNames cfiNames0

        

          CFI Common cfiCommon0 Using cfiNames0

          CFI CodeAlign 1

          CFI DataAlign 1

          CFI ReturnAddress PC CODE

          CFI CFA SP+2

          CFI A Undefined

          CFI XL Undefined

          CFI XH Undefined

          CFI YL Undefined

          CFI YH Undefined

          CFI CC Undefined

          CFI PC Concat

          CFI PCL Frame(CFA, 0)

          CFI PCH Frame(CFA, -1)

          CFI PCE SameValue

          CFI ?b0 Undefined

          CFI ?b1 Undefined

          CFI ?b2 Undefined

          CFI ?b3 Undefined

          CFI ?b4 Undefined

          CFI ?b5 Undefined

          CFI ?b6 Undefined

          CFI ?b7 Undefined

          CFI ?b8 SameValue

          CFI ?b9 SameValue

          CFI ?b10 SameValue

          CFI ?b11 SameValue

          CFI ?b12 SameValue

          CFI ?b13 SameValue

          CFI ?b14 SameValue

          CFI ?b15 SameValue

          CFI EndCommon cfiCommon0

        

// E:socexample_emptymain.c

//    1 #include "Untitled1.h"

//    2 typedef enum {FALSE = 0, TRUE = !FALSE} bool;


        SECTION `.near.bss`:DATA:REORDER:NOROOT(0)

//    3 int val;

val:

        DS8 2


        SECTION `.near.data`:DATA:REORDER:NOROOT(0)

//    4 int array[10] = {1,33,2,6,8,9,4,45,8,0};

array:

        DC16 1, 33, 2, 6, 8, 9, 4, 45, 8, 0


        SECTION `.near_func.text`:CODE:REORDER:NOROOT(0)

          CFI Block cfiBlock0 Using cfiCommon0

          CFI Function main

        CODE

//    5 int main( void )

//    6 {

//    7   int i = 0;

main:

        CLR       S:?b1

        CLR       S:?b0

//    8   int buf;

//    9   bool flag = TRUE;

        LD        A, #0x1

        JRA       L:??main_0

//   10   while(1)

//   11   {

//   12     if(array[i] > array[i+1])

//   13     {

//   14       buf = array[i];

//   15       array[i] = array[i+1];

//   16       array[i+1] = buf;

//   17       flag = FALSE;

//   18     }

//   19     if(i == 9)

//   20     {

//   21       if(flag)

//   22       {

//   23         break;

//   24       }

//   25       i = 0;

??main_1:

        CLR       S:?b1

        CLR       S:?b0

??main_0:

        LDW       X, S:?w0

        SLLW      X

        ADDW      X, #array + 2

        LDW       X, (X)

        LDW       S:?w1, X

        LDW       X, S:?w0

        SLLW      X

        ADDW      X, #array

        LDW       Y, X

        LDW       X, S:?w1

        CPW       X, (Y)

        JRSGE     L:??main_2

        LDW       X, S:?w0

        SLLW      X

        LDW       X, (L:array,X)

        LDW       S:?w1, X

        LDW       X, S:?w0

        SLLW      X

        ADDW      X, #array + 2

        LDW       X, (X)

        LDW       Y, X

        LDW       X, S:?w0

        SLLW      X

        LDW       (L:array,X), Y

        LDW       X, S:?w0

        SLLW      X

        LDW       Y, S:?w1

        ADDW      X, #array + 2

        LDW       (X), Y

        SUBW      X, #array + 2

        CLR       A

??main_2:

        LDW       X, S:?w0

        CPW       X, #0x9

        JRNE      L:??main_0

        TNZ       A

        JREQ      L:??main_1

//   26     }

//   27 

//   28   }

//   29   return 0;

        CLRW      X

        RET

//   30 }

          CFI EndBlock cfiBlock0


        SECTION VREGS:DATA:REORDER:NOROOT(0)


        END

// 

//  2 bytes in section .near.bss

// 20 bytes in section .near.data

// 84 bytes in section .near_func.text

// 


??具體含義簡單介紹一下:


1. 運行模型結(jié)構(gòu)(Runtime model attributes)

??這類東西基本找不到官方的翻譯,那就按字面上的意思咯。它主要是對程序整體的一些基礎(chǔ)設(shè)置,一般要保持代碼中所有匯編文件保持一致。在自己寫匯編時可加可不加。如果要加的話一定要從同工程下別處原樣復制過來,一個符號都不要改


        RTMODEL "__SystemLibrary", "DLib" //基礎(chǔ)庫,包括C和C++所必需的頭文件

        RTMODEL "__code_model", "small" //代碼量,代表尋址空間

        //"small"  ->最大16KB尋址空間

        //"medium" ->最大16MB尋址空間,但函數(shù)代碼地址不允許超過64KB邊界

        //"large"  ->最大16MB尋址空間,函數(shù)代碼地址允許超過64KB邊界

        RTMODEL "__core", "stm8" //芯片型號,只能是"stm8"

        RTMODEL "__data_model", "medium" //詳見幫助文檔

        RTMODEL "__rt_version", "4" //同個程序RTMODEL改變時,版本號相應(yīng)改變


2. 標號聲明(Symbol control)

[1] [2] [3]
關(guān)鍵字:STM8  匯編學習  開發(fā)環(huán)境 引用地址:STM8 匯編學習筆記2: 開發(fā)環(huán)境

上一篇:[STM8學習筆記] IAR工程搭建筆記
下一篇:STVD配置

推薦閱讀

今天午間,中興通訊緊急發(fā)布公告稱,公司已經(jīng)注意到美國參議院于周一晚通過了一項將恢復對公司進行處罰的立法案。不過,美國參議院通過的NDAA(《國家防御授權(quán)法案》)的版本目前仍非美國法律,因為其僅在美國國會參眾兩院中的一院獲得了通過。公告還具體解釋了NDAA相關(guān)章節(jié)包括以下三條與中興通訊有關(guān)的條文:第一,直到美國總統(tǒng)向相關(guān)國會委員會證明下列...
不久前,三星宣布與AMD達成戰(zhàn)略合作,將AMD RDNA圖形架構(gòu)的強大功能與三星的Exynos系列移動芯片結(jié)合在一起。任天堂下一代Switch雖然有可能從英偉達采購芯片,但外媒稱英偉達在消費級ARM產(chǎn)品上的進展不大,恐怕無法實現(xiàn)任天堂的更新下一代的需求(至少在CPU方面)。自從英偉達的Tegra K1(Kepler架構(gòu))芯片公布以來,他們尚未更新Shield平板電腦產(chǎn)品線,...
作為全球最大的線上零售商和全球第二大的互聯(lián)網(wǎng)公司,亞馬遜正在全球多個國家扮演著相當于國民生活基礎(chǔ)設(shè)施的角色了。 新冠疫情期間,這一角色的作用更加明顯了。當 3 月初疫情開始在北美蔓延的時候,廁紙、洗手液、消毒液等生活衛(wèi)生用品的訂單如潮水一般暴漲,同時由于民眾開始居家隔離,其他訂單也全面激增。亞馬遜當即宣布在 4 月底前要在美國額外...
盡管保時捷肯定仍然是駕駛者之車,但跑車品牌并沒有吝嗇其信息娛樂技術(shù)。全新保時捷通訊管理系統(tǒng) (PCM) 6.0 旨在為駕駛員提供更多信息,同時將信息娛樂系統(tǒng)無縫集成到駕駛體驗中。首先,經(jīng)過大修的 PCM 6.0 界面具有重新設(shè)計的字體、圖標和布局,并增加了 Apple CarPlay 的集成度。它還首次具有 Android Auto 功能。無線更新將確保保時捷司機...

史海拾趣

小廣播
設(shè)計資源 培訓 開發(fā)板 精華推薦

最新單片機文章

 
EEWorld訂閱號

 
EEWorld服務(wù)號

 
汽車開發(fā)圈

 
機器人開發(fā)圈

電子工程世界版權(quán)所有 京ICP證060456號 京ICP備10001474號-1 電信業(yè)務(wù)審批[2006]字第258號函 京公網(wǎng)安備 11010802033920號 Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved