チェック「パークをブログ」

2019年11月15日を確認し、「ブログ・パークは」始まる私の技術記事を開設しました

KEILのコンパイルをどのように達成するかについて興味がないの誰も

最も単純なシングルチップC言語の解析開始から

#include <reg52.h>
メインボイド)
{
unsigned char型A = 255。
unsigned char型のB = 255。
unsigned char型* P;

P =&;
* P = 254。

}

 

アプリケーションのC含有量は、単純なメモリとアプリケーションメモリアドレスで、それらを割り当てます。

私の分析のために、それは(分析DBUG)

C:0000 020026 LJMP C:0026 (STEP15: アセンブラジャンプ命令ジャンプ無条件LJMP CPU物理アドレス16:0026(16進数))C
CSTPTR :?
C:BB0106 CJNE R3 0x0003、0x01の#、C :000C(ステップ16:CJNE: R3:00 <01 フラグビットがC = 1と等しくないと000Cにジャンプ)
C:0x0006 8982 MOV DPL(0x82と)は、R
C:MOV 0x0008で8A83 DPH(0x83の)、R2
C: DPTR F0 0x000A、A @ MOVX
22 RET 0x000Bである:C
C:(ステップ17はCを決定する:0または0でないので、次のいずれかに移動されている)0010():0x000C JNC 5002 C
C:R1を、A(@ 0x000E F7 MOV STEP18:0X7F R1へコンテンツA:終了アドレスポインタ割り当てで)0x08の内部アドレス
C:22がRET 0x000Fである
C:0x0010 BBFE01 CJNE R3、#0xFEの、C:0014
C:R1を、@ 0x0013 F3 MOVX
C :22は、RET 0x0014である
)(ボイドメイン:2
。3:{
4 = 255 Aはunsigned char;
C:0x0015 7508FF MOV 0x08に、0xFFの#(STEP8:オープン:0X 08とメモリアドレス0XFF)
。5:unsigned char型のB = 255;
6:unsigned char型* P;
7:
C:0x0018 7509FF MOV 0x09の、0xFFの番号(STEP9:開放から0xFF 0x09ののメモリアドレスは:ポインタアドレスが定義されている定義)
。8:P = &;
C:0x001B 7B00 MOV R3、#は0x00(STEP10:フラグビットに対応するレジスタ)      
C:0x001D 7A00 MOV R2、#は0x00(STEP11:一時的な記憶場所ポインタアドレス:上位8ビット)
C:0x001F 7908 MOV R1を、 #0x08に(STEP12:一時保管場所ポインタアドレス:下位8ビット)
9:P * = 254;
C:0x0021 74FE MOV A、#0xFEの(STEP:13である:値がポインタに割り当てることが、最初のレジスタに)であり、
0003)(SETP14:0003にジャンプ)C :? 0x0023 020 003 LJMP CSTPTR C(C
C:0x0026 787F MOV R0、#から0x7F(STEP2:即時:7FレジスタR0に)
C:0x0028 E4 CLR(SETP 3:クリアされるレジスタの内容)
:F6 MOV R0、@ 0x0029(STEP4:コンテンツAは、メモリアドレス空間7Fに記憶されている)Cを
C:0x002A D8FD DJNZ R0、C :0029(STEP5 結果は次のいずれかにジャンプする0029まで転送されない場合はR0が0にデクリメントされる7F値は0である)
C:MOV 0x002C SP 758 109(0x81と)、#0x09の( STEP6:遅延上記SP点が0x09の)スタックます
:C 0x002F 020 015 LJMPメイン(C:0015)(STEP7:メイン関数を入力するために0015にジャンプ)
C:0x0032 NOP 00

 

 

おすすめ

転載: www.cnblogs.com/2SBC/p/11864246.html