| 
  |||||||||||
| 技術交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術 | 電源技術 | 測控之家 | EMC技術 | ARM技術 | EDA技術 | PCB技術 | 嵌入式系統(tǒng) 驅動編程 | 集成電路 | 器件替換 | 模擬技術 | 新手園地 | 單 片 機 | DSP技術 | MCU技術 | IC 設計 | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe  | 
  
一個簡單的問題 | 
  
| 作者:zjsa6 欄目:單片機 | 
我是入門者,帶來一個簡單的問題,請各位幫答 明明兩個變量a,b,怎么給了一個寄存器,調試也是一個。 附上: void main() { unsigned CHAR a,b; a=22; b=33;} /********ambler*************/ .MODULE ddd.c .area text(rom, con, rel) .dbfile C:\zjs\ddd.c .dbfunc e main _main fV ; b -> R16 /** a,b 均為R16**/ ; a -> R16 .even _main:: .dbline -1 .dbline 4 ; ; ; void main() ; { .dbline 6 ; unsigned CHAR a,b; ; a=22; ldi R16,22 .dbline 7 ; b=33;} ldi R16,33 .dbline -2 .dbline 7 L1: .dbline 0 ; func end ret .dbsym r b 16 c .dbsym r a 16 c .dbend  | 
  
| 2樓: | >>參與討論 | 
| 作者: john_lee 于 2003/9/7 12:31:00 發(fā)布:
         編譯器優(yōu)化的結果 在編譯優(yōu)化作用下: 1、局部變量的存儲空間是在該變量第一次被訪問時分配的,而不是在申明和定義時。 2、局部變量在最后一次被訪問后,它所占據(jù)的存儲空間就會被編譯器釋放。 由此,不難理解此程序被編譯后的生成結果: void main() { unsigned CHAR a,b; // 這句只是a,b的申明和定義,編譯器不會立即為它們分配存儲 a=22; // a變量第一次被訪問,編譯器為它分配了R16寄存器存儲空間 // a變量在此后就沒有被訪問了,所以編譯器又釋放了a變量的存儲空間R16 b=33; // b變量第一次被訪問,編譯器為它分配了R16寄存器存儲空間(因為這時R16是空閑的) } 實際上,有些編譯器優(yōu)化更厲害,它會判斷變量的訪問上下文,并根據(jù)一種復雜的優(yōu)化規(guī)則,對變量的存儲和訪問作更深度的優(yōu)化。如果變量是無意義的(象此文中這樣的變量的定義和訪問),可能被忽略掉(根本不為變量分配存儲,也不生成與該變量有關的訪問代碼)。  | 
  |
| 3樓: | >>參與討論 | 
| 作者: zjsa6 于 2003/9/7 13:47:00 發(fā)布:
         謝謝 謝謝  | 
  |
  | 
    
 
  | 
  
| 免費注冊為維庫電子開發(fā)網(wǎng)會員,參與電子工程師社區(qū)討論,點此進入 | 
Copyright © 1998-2006 www.udpf.com.cn 浙ICP證030469號  |