打印

被逼的,才写了这个启动代码,说明书实在太难了,还有什么asser

[复制链接]
5093|23
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
小李志|  楼主 | 2008-4-30 20:20 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
没办法,实验箱里带的例程太高级了,看都都看不懂,拷过来程序还是编译不了,于是下定决心写的这个启动代码,精简版的
  1没中断
  2只要可能跳到c语言的入口就知足了,
不过还是有的地方不懂,慢慢来吧,

;/****************************************************
;//s3c2410精简启动代码
;//小李志写于2008年4月29日,感谢我的虫虫,
;/****************************************************

WTCON     EQU  0x53000000       ;看门狗时间模式的地址
INTMSK       EQU  0x4a000008    ;中断开启控制
LOCKTIME    EQU  0x4c000000     ;PLL锁时间寄存器
MPLLCON     EQU  0x4c000004     ;MPLL控制器 
INTSUBMSK    EQU  0x4a00001c    ;子中断开启控制
GSTATUS2    EQU  0x560000b4     ;复位的类型
BWSCON      EQU  0x48000000     ;总线宽度和等待状态

;//**********************************8


_STACK_BASEADDRESS    EQU 0x33ff8000  ;堆栈开始的地方


;//***********************************


;有关堆栈的设定
;//Pre-defined constants
USERMODE    EQU     0x10
FIQMODE     EQU     0x11
IRQMODE     EQU     0x12
SVCMODE     EQU     0x13
ABORTMODE   EQU     0x17
UNDEFMODE   EQU     0x1b
MODEMASK    EQU     0x1f
NOINT       EQU     0xc0

;//The location of stacks,每一种模式要求一个堆栈
UserStack    EQU    (_STACK_BASEADDRESS-0x3800)            ;//0x33ff4800 ~ 
SVCStack    EQU    (_STACK_BASEADDRESS-0x2800)         ;//0x33ff5800 ~
UndefStack    EQU    (_STACK_BASEADDRESS-0x2400)         ;//0x33ff5c00 ~
AbortStack    EQU    (_STACK_BASEADDRESS-0x2000)         ;//0x33ff6000 ~
IRQStack    EQU    (_STACK_BASEADDRESS-0x1000)            ;//0x33ff7000 ~
FIQStack    EQU    (_STACK_BASEADDRESS-0x0)            ;//0x33ff8000 ~ 


;//存储器的设定,我没动
;/***********************************************




DW8        EQU    (0x0)
DW16        EQU    (0x1)
DW32        EQU    (0x2)
WAIT        EQU    (0x1<<2)
UBLB        EQU    (0x1<<3)

B1_BWSCON    EQU (DW32)
B2_BWSCON    EQU (DW16)
B3_BWSCON    EQU (DW16)
B4_BWSCON    EQU (DW16)
B5_BWSCON    EQU (DW16)
B6_BWSCON    EQU (DW32)
B7_BWSCON    EQU (DW32)

;BANK0CON 

B0_Tacs        EQU    0x0    ;0clk
B0_Tcos        EQU    0x0    ;0clk
B0_Tacc        EQU    0x7    ;14clk
B0_Tcoh        EQU    0x0    ;0clk
B0_Tah        EQU    0x0    ;0clk
B0_Tacp        EQU    0x0    
B0_PMC        EQU    0x0    ;normal

;BANK1CON
B1_Tacs        EQU    0x0    ;0clk
B1_Tcos        EQU    0x0    ;0clk
B1_Tacc        EQU    0x7    ;14clk
B1_Tcoh        EQU    0x0    ;0clk
B1_Tah        EQU    0x0    ;0clk
B1_Tacp        EQU    0x0    
B1_PMC        EQU    0x0    ;normal

;Bank 2 parameter
B2_Tacs        EQU    0x0    ;0clk
B2_Tcos        EQU    0x0    ;0clk
B2_Tacc        EQU    0x7    ;14clk
B2_Tcoh        EQU    0x0    ;0clk
B2_Tah        EQU    0x0    ;0clk
B2_Tacp        EQU    0x0    
B2_PMC        EQU    0x0    ;normal

;Bank 3 parameter
B3_Tacs        EQU    0x0    ;0clk
B3_Tcos        EQU    0x0    ;0clk
B3_Tacc        EQU    0x7    ;14clk
B3_Tcoh        EQU    0x0    ;0clk
B3_Tah        EQU    0x0    ;0clk
B3_Tacp        EQU    0x0    
B3_PMC        EQU    0x0    ;normal

;Bank 4 parameter
B4_Tacs        EQU    0x0    ;0clk
B4_Tcos        EQU    0x0    ;0clk
B4_Tacc        EQU    0x7    ;14clk
B4_Tcoh        EQU    0x0    ;0clk
B4_Tah        EQU    0x0    ;0clk
B4_Tacp        EQU    0x0    
B4_PMC        EQU    0x0    ;normal

;Bank 5 parameter
B5_Tacs        EQU    0x0    ;0clk
B5_Tcos        EQU    0x0    ;0clk
B5_Tacc        EQU    0x7    ;14clk
B5_Tcoh        EQU    0x0    ;0clk
B5_Tah        EQU    0x0    ;0clk
B5_Tacp        EQU    0x0    
B5_PMC        EQU    0x0    ;normal

;Bank 6 parameter
B6_MT        EQU    0x3    ;SDRAM
;B6_Trcd        EQU    0x0    ;2clk
B6_Trcd        EQU    0x1    ;3clk
B6_SCAN        EQU    0x1    ;9bit

;Bank 7 parameter
B7_MT        EQU    0x3    ;SDRAM
;B7_Trcd        EQU    0x0    ;2clk
B7_Trcd        EQU    0x1    ;3clk
B7_SCAN        EQU    0x1    ;9bit

;REFRESH parameter
REFEN        EQU    0x1    ;Refresh enable
TREFMD        EQU    0x0    ;CBR(CAS before RAS)/Auto refresh
Trp        EQU    0x0    ;2clk
Trc        EQU    0x3    ;7clk
        
Tchr        EQU    0x2    ;3clk
REFCNT        EQU    1113    ;period=15.6us, HCLK=60Mhz, (2048+1-15.6*60)




;/********************************************************************
;//存储器的设定,我没动


  
;//关于时钟的设定,我也没动

M_MDIV    EQU    0x52    ;Fin=12.0MHz Fout=33.75MHz 
M_PDIV    EQU    0x2     ;根据数据手册上的值,238页
M_SDIV    EQU    0x3     ;Mpll=(m*Fin)/(P*2的平方)
                    ;m=(MDIV+8),p=(PDIV+2),s=SDIV

 ;//关于时钟的设定,我也没动     
    IMPORT  main    ;// The main entry of mon program
     ;从编译环境中引入一些地址
    IMPORT  |Image$$RO$$Limit|  ;// End of ROM code (=start of ROM data)  
    IMPORT  |Image$$RW$$Base|   ;// Base of RAM to initialise   
    IMPORT  |Image$$ZI$$Base|   ;// Base and limit of area   
    IMPORT  |Image$$ZI$$Limit|  ;// to zero initialise



 

    AREA    Init,CODE,READONLY

    ENTRY
    b   ResetHandler


ResetHandler
    ldr    r0,=WTCON       ;//禁止看门狗
    ldr    r1,=0x0
    str    r1,[r0] 

    ldr    r0,=INTMSK
    ldr    r1,=0xffffffff  ;//所有中断都没有了
    str    r1,[r0]
    
    ldr    r0,=INTSUBMSK
    ldr    r1,=0x7ff        ;//所有的子中断都关闭
    str    r1,[r0]
    
    
    ;//To reduce PLL lock time, adjust the LOCKTIME register. 
    ;//减少pll锁时间,调整锁时间寄存器
    ldr    r0,=LOCKTIME
    ldr    r1,=0xffffff   
    str r1,[r0]
    
     ;//配置MPLL
    ldr    r0,=MPLLCON          
    ldr    r1,=((M_MDIV<<12)+(M_PDIV<<4)+M_SDIV)  ;//Fin=12MHz,Fout=50MHz   
    str r1,[r0]
    
       ;//Set memory control registers
    ldr    r0,=SMRDATA
    ldr    r1,=BWSCON    ;//BWSCON Address
    add    r2, r0, #52    ;//End address of SMRDATA
0       
    ldr    r3, [r0], #4    
    str    r3, [r1], #4    
    cmp    r2, r0        
    bne    %B0   ;配置存储器的语句,但不明白bne %B0是什么意思
    
    
        ;//初始化堆栈
    bl  InitStacks

     ;// Setup IRQ handler,这是有关中断的暂时先放弃
    ;ldr    r0,=HandleIRQ       ;//This routine is needed   
    ;ldr    r1,=IsrIRQ          ;//if there isn't 'subs pc,lr,#4' at 0x18, 0x1c   
    ;str    r1,[r0]   

    ;//Copy and paste RW data/zero initialized data   
    ldr    r0, =|Image$$RO$$Limit| ; Get pointer to ROM data   
    ldr    r1, =|Image$$RW$$Base|  ; and RAM copy   
    ldr    r3, =|Image$$ZI$$Base|     
       
    ;//Zero init base => top of initialised data   
    cmp    r0, r1      ;// Check that they are different   
    beq    %F2   
1       
    cmp    r1, r3      ;// Copy init data,为什么那两个地址不一样就进行rom程序的搬运,为什
                    ;//么要拿rom的高地址来和rw的低地址来比较       
    ldrcc    r2, [r0], #4    ;//--> LDRCC r2, [r0] + ADD r0, r0, #4              
    strcc    r2, [r1], #4    ;//--> STRCC r2, [r1] + ADD r1, r1, #4     
    bcc    %B1   
2       
    ldr    r1, =|Image$$ZI$$Limit| ;// Top of zero init segment,设置0初始化的最高地址   
    mov    r2, #0   
3       
    cmp    r3, r1      ;// Zero init   
    strcc    r2, [r3], #4     ;把r2的值的给以r3为地址的存储器,给完之后r3加4,
    bcc    %B3   
  
  
   bl    main  ;  跳到c语言的入口处
   b    .


    
    
    
;LOOP2   B LOOP2
  ;为什么这段只能放在代码段里,不能放在文件的最开头
SMRDATA DATA
;// Memory configuration should be optimized for best performance 
;// The following parameter is not optimized.                     
;// Memory access cycle parameter strategy
;// 1) The memory settings is  safe parameters even at HCLK=75Mhz.
;// 2) SDRAM refresh period is for HCLK=75Mhz. 

        DCD (0+(B1_BWSCON<<4)+(B2_BWSCON<<8)+(B3_BWSCON<<12)+(B4_BWSCON<<16)+(B5_BWSCON<<20)+(B6_BWSCON<<24)+(B7_BWSCON<<28))
        DCD ((B0_Tacs<<13)+(B0_Tcos<<11)+(B0_Tacc<<8)+(B0_Tcoh<<6)+(B0_Tah<<4)+(B0_Tacp<<2)+(B0_PMC))   ;//GCS0
        DCD ((B1_Tacs<<13)+(B1_Tcos<<11)+(B1_Tacc<<8)+(B1_Tcoh<<6)+(B1_Tah<<4)+(B1_Tacp<<2)+(B1_PMC))   ;//GCS1 
        DCD ((B2_Tacs<<13)+(B2_Tcos<<11)+(B2_Tacc<<8)+(B2_Tcoh<<6)+(B2_Tah<<4)+(B2_Tacp<<2)+(B2_PMC))   ;//GCS2
        DCD ((B3_Tacs<<13)+(B3_Tcos<<11)+(B3_Tacc<<8)+(B3_Tcoh<<6)+(B3_Tah<<4)+(B3_Tacp<<2)+(B3_PMC))   ;//GCS3
        DCD ((B4_Tacs<<13)+(B4_Tcos<<11)+(B4_Tacc<<8)+(B4_Tcoh<<6)+(B4_Tah<<4)+(B4_Tacp<<2)+(B4_PMC))   ;//GCS4
        DCD ((B5_Tacs<<13)+(B5_Tcos<<11)+(B5_Tacc<<8)+(B5_Tcoh<<6)+(B5_Tah<<4)+(B5_Tacp<<2)+(B5_PMC))   ;//GCS5
        DCD ((B6_MT<<15)+(B6_Trcd<<2)+(B6_SCAN))    ;//GCS6
        DCD ((B7_MT<<15)+(B7_Trcd<<2)+(B7_SCAN))    ;//GCS7
        DCD ((REFEN<<23)+(TREFMD<<22)+(Trp<<20)+(Trc<<18)+(Tchr<<16)+REFCNT)    



        DCD 0x32            ;//SCLK power saving mode, BANKSIZE 128M/128M
        DCD 0x30            ;//MRSR6 CL=3clk
        DCD 0x30            ;//MRSR7
;//        DCD 0x20            ;//MRSR6 CL=2clk
;///       DCD 0x20            ;//MRSR7

        ;ALIGN


        ;AREA RamData, DATA, READWRITE
         
InitStacks
    ;//Don't use DRAM,such as stmfd,ldmfd......
    ;//SVCstack is initialized before
    ;//Under toolkit ver 2.5, 'msr cpsr,r1' can be used instead of 'msr cpsr_cxsf,r1'
    mrs    r0,cpsr
    bic    r0,r0,#MODEMASK
    orr    r1,r0,#UNDEFMODE|NOINT
    msr    cpsr_cxsf,r1        ;//UndefMode
    ldr    sp,=UndefStack
    
    orr    r1,r0,#ABORTMODE|NOINT
    msr    cpsr_cxsf,r1        ;//AbortMode
    ldr    sp,=AbortStack

    orr    r1,r0,#IRQMODE|NOINT
    msr    cpsr_cxsf,r1        ;//IRQMode
    ldr    sp,=IRQStack
    
    orr    r1,r0,#FIQMODE|NOINT
    msr    cpsr_cxsf,r1        ;//FIQMode
    ldr    sp,=FIQStack

    bic    r0,r0,#MODEMASK|NOINT
    orr    r1,r0,#SVCMODE
    msr    cpsr_cxsf,r1        ;//SVCMode
    ldr    sp,=SVCStack
    
    ;//USER mode has not be initialized.
    
    mov    pc,lr ;设用时的惯用招数,最后一句,必须的
    ;//The LR register won't be valid if the current mode is not SVC mode.
        
    end

以下是c语言文件

//设置寄存器的地址,没用到头文件,因为对头文件还不熟
// UART
//***************************************************
#define rULCON0     (*(volatile unsigned *)0x50000000) //UART 0 Line control
#define rUCON0      (*(volatile unsigned *)0x50000004) //UART 0 Control
#define rUFCON0     (*(volatile unsigned *)0x50000008) //UART 0 FIFO control
#define rUMCON0     (*(volatile unsigned *)0x5000000c) //UART 0 Modem control
#define rUTRSTAT0   (*(volatile unsigned *)0x50000010) //UART 0 Tx/Rx status
#define rUERSTAT0   (*(volatile unsigned *)0x50000014) //UART 0 Rx error status
#define rUFSTAT0    (*(volatile unsigned *)0x50000018) //UART 0 FIFO status
#define rUMSTAT0    (*(volatile unsigned *)0x5000001c) //UART 0 Modem status
#define rUBRDIV0    (*(volatile unsigned *)0x50000028) //UART 0 Baud rate divisor
//*******************************************************

//设置H端口的寄存器的值
//***********************************************************
#define GPHCON    (*(volatile unsigned *)0x56000070) //Port H control
#define GPHDAT    (*(volatile unsigned *)0x56000074) //Port H data
#define GPHUP     (*(volatile unsigned *)0x56000078) //Pull-up control H
//*********************************************************************
//#define rUTXH0 (*(volatile unsigned char *)0x50000020) //UART 0 Transmission Hold
#define rUTXH0         (*(volatile unsigned *)0x50000020)    //UART 0 Transmission Hold



//初始化串口函数
void Uart_Init(unsigned long BautRate)

  { 
   GPHCON=0x2afaaa;//设置rxd0,txd0引脚,一个输出一个输入
   GPHUP=0x7ff;//设置上拉电阻
   rUFCON0=0x0;//禁用FIFO
   rUMCON0=0x0;//禁用AFC
   rULCON0=0x3;//设置线寄存器,UART LINE CONFIG  正常模式,无奇偶校验,一个停止位,8个数据位
   rUCON0=0x245;//设置Uart0控制器,RX边沿触发,TX电平触发,禁用延时中断,使用RX 错误中断,正常操作模式,中断请求或表决模式
   //rUBRDIV0= int(33750000 / 16 / BautRate)-1;   // rUBRDIV0=0x11;//设置波特率为115200,int(50700000 / 16 / 115200) - 1 = 26
   rUBRDIV0= (int)((33750000/16/BautRate)-1);//又上他们的当了,强制转换是这样的(int)()
   }
  
void Uart_SendByte(unsigned char a)//发送字符函数
  { 
  
    unsigned long temp;
    rUTXH0=a;
    //while( (rUTRSTAT0&0x0004!=0x0004))//判断是否发完
    while(1)
    {    temp=rUTRSTAT0&0x0004;
         if(rUTRSTAT0 & 0x2)//!(rUTRSTAT0 & 0x2) //为什么不判断第三位
         { rUTRSTAT0=rUTRSTAT0&(!(0x0004));
           break;
         }  
    }
  }
  
  //发送一个字符串
void Uart_SendString(const char * pd,unsigned char line_feed)
{
 while((*pd)!='\0')
  {
   Uart_SendByte(*pd);
   pd++;
  }
 if(line_feed)
 {
  Uart_SendByte(13);
  Uart_SendByte(10);
 }
}

int main(void)
{  
   
   /*GPHCON=0x2afaaa;//设置rxd0,txd0引脚,一个输出一个输入
   GPHUP=0x7ff;//设置上拉电阻
   rUFCON0=0x0;//禁用FIFO
   rUMCON0=0x0;//禁用AFC
   rULCON0=0x3;//设置线寄存器,UART LINE CONFIG  正常模式,无奇偶校验,一个停止位,8个数据位
   rUCON0=0x245;//设置Uart0控制器,RX边沿触发,TX电平触发,禁用延时中断,使用RX 错误中断,正常操作模式,中断请求或表决模式
   rUBRDIV0=0x11;//设置波特率为115200,int(50700000 / 16 / 115200) - 1 = 26
   */
   Uart_Init(115200);
   //Uart_SendByte('l');
   //Uart_SendString("这是ARM第一个程序",1);
   for(;;)
   { ;//Uart_SendByte('l');
     Uart_SendString("这是ARM第一个程序,感谢和献给我深爱的虫虫,",1);
     }
  /* for(;;)
   
   {  rUTXH0=0x55;

     if( rUTRSTAT0&0x0004==0x0004)
     rUTXH0=0x55;
   
      ;}
   
   while(1)
   ;*/
}

相关帖子

沙发
fengyeu| | 2008-5-1 09:23 | 只看该作者

顶下!

顶下!
难得看见有人贴代码.

使用特权

评论回复
板凳
小李志|  楼主 | 2008-5-1 12:02 | 只看该作者

呵呵

谢了,写的比较乱

使用特权

评论回复
地板
icecut| | 2008-5-1 15:46 | 只看该作者

不错

阉割的只剩下头了。不过start.S是够了.顶一个
看了几天UBOOT和优龙的bios,觉得,如此相似.

使用特权

评论回复
5
XZL| | 2008-5-1 21:38 | 只看该作者

呵呵,是被阉割了的

使用特权

评论回复
6
shang21ic| | 2008-5-2 00:28 | 只看该作者

阉割?

阉割? 呵呵,
那不是太监版了?

使用特权

评论回复
7
小李志|  楼主 | 2008-5-2 16:37 | 只看该作者

哈哈,

太监版?
不过这个是还可再生的,还可以长出来

使用特权

评论回复
8
avocationA| | 2008-5-3 10:47 | 只看该作者

ddd

d

使用特权

评论回复
9
avocationA| | 2008-6-18 10:25 | 只看该作者

俺也贴段代码!

              /*----------------------------------------------------------------------------
 *      R T L   K e r n e l   E x a m p l e
 *----------------------------------------------------------------------------
 *      Name:    BLINKY.C
 *      Purpose: RTX example program
 *      Rev.:    V3.20
 *----------------------------------------------------------------------------
 *      This code is part of the RealView Run-Time Library.
 *      Copyright (c) 2004-2008 KEIL - An ARM Company. All rights reserved.
 *---------------------------------------------------------------------------*/

#include "S3C2440.h"                    /* S3C2440 definitions               */

#define LED_SPARK_TIME_DELAY 400000
#define LED_MSK        0x1E0
#define    LED1        0x20
#define    LED2        0x40
#define    LED3        0x80
#define    LED4        0x100
int    LEDclose=10;

/* LED: PB5678 low light    */
// 01 01010100 00000000

void Led_Delay(void);

void uartini(void)
{
    GPHCON = 0xaa;
    GPHUP  = 0x0f;
    UFCON0 = 0x0;
    UMCON0 = 0x0;
    ULCON0 = 0x3;   //Line control register : Normal,No parity,1 stop,8 bits
    UCON0  = 0x05;   // Control register
    UBRDIV0=( (int)(304000000/6/16./115200+0.5) -1 ); 
}

void uartSendByte(char data)
{
    if(data=='\n')
        {
            while(!(UTRSTAT0 & 0x2));
           // Delay(1);                 //because the slow response of hyper_terminal 
            UTXH0 = '\r';
        }
          while(!(UTRSTAT0 & 0x2));   //Wait until THR is empty.
      //  Delay(1);
        UTXH0 = data;
}

void uartSendString(char *pt)
{
    while(*pt)
        uartSendByte(*pt++);
}

char uartGetChar(void)
{
    while(!(UTRSTAT0 & 0x1)); //Receive data ready
    return URXH0;
}
    

void uart(void)
{
    GPBCON = 0x15400;
    GPBDAT |= LED_MSK;
    Led_Delay();
    uartini();
    GPBDAT &= ~LED_MSK;
    Led_Delay();
    GPBDAT |= LED_MSK;
    Led_Delay();
    uartSendString("测试代码启动!\n");
    uartSendString("请按任意键点亮LED!\n");
    uartGetChar();//读取键盘

ledstar:    while(LEDclose>0)
    {    LEDclose--;
        uartini();
        uartSendString("呵呵LED亮了!\n");
        GPBDAT |= LED_MSK;
        GPBDAT &= ~LED1;
        Led_Delay();
        GPBDAT |= LED_MSK;
        GPBDAT &= ~LED2;
        Led_Delay();
        GPBDAT |= LED_MSK;
        GPBDAT &= ~LED3;
        Led_Delay();
        GPBDAT |= LED_MSK;
        GPBDAT &= ~LED4;
        //led_test();
        Led_Delay();
    }
//    return 0;
    LEDclose=10;
    uartini();
    uartSendString("请按任意键点亮LED!\n");
    uartGetChar();//读取键盘
    goto ledstar;
}

void Led_Delay(void)
{
    long i=0;
    for(i=0; i<LED_SPARK_TIME_DELAY; i++);
    return;
}



相关链接:https://bbs.21ic.com/upfiles/img/20078/200783104042335.rar

使用特权

评论回复
10
avocationA| | 2008-6-18 10:28 | 只看该作者

S3C44B0的UART波特率计算公式

S3C44B0的UART波特率计算公式 
MCLK即主频 此处为60MHz
UBRDIVn(又称divisor) = ( (int)(MCLK / (bps * 16) + 0.5) – 1 ) 
MCLK = Fout = Fpllo 
Bps = 1200,9600,19200,38400,57600,115200
例如 主频=60MHz=60000000Hz 
串口速度选115200

divisor=取整[60000000/(115200*16)    +  0.5]    -1   =   32

使用特权

评论回复
11
avocationA| | 2008-6-18 16:35 | 只看该作者

ftp://ftp.hp.com/pub/softpaq/sp38501-39000/sp38886.exe

ftp://ftp.hp.com/pub/softpaq/sp38501-39000/sp38886.exe

使用特权

评论回复
12
high| | 2008-6-18 16:54 | 只看该作者

泼你冷水

除了注释和c部分, 没有一行是你自己的.

assert是断言

使用特权

评论回复
13
lichenlin| | 2008-6-18 22:57 | 只看该作者

xx

呵呵!!

使用特权

评论回复
14
avocationA| | 2008-6-19 09:56 | 只看该作者

晕到!我说过我写的吗?

晕到!我说过我写的吗?           贴段代码

使用特权

评论回复
15
avocationA| | 2008-6-19 10:02 | 只看该作者

看错了不是说我的!呵呵!贴代码就得顶!

to  12  楼  莫非 小李的那程序是你写的 呵呵!!!

使用特权

评论回复
16
db200| | 2008-6-19 10:09 | 只看该作者

使用特权

评论回复
17
wy3168| | 2008-6-20 14:57 | 只看该作者

bne %B0 ;配置存储器的语句,但不明白bne %B0是什么意思

使用特权

评论回复
18
wy3168| | 2008-6-20 15:00 | 只看该作者

bne %B0 ;配置存储器的语句,但不明白bne %B0是什么意思

刚才按错了,不好意思,
bne %B0;跳转到向后的0标识位置处,%B 代表向后查找,%F代表向前查找的意思,网上这么解释的,一直不知道正确否。

使用特权

评论回复
19
dadong| | 2008-6-21 21:09 | 只看该作者

|Image$$RO$$Limit|

|Image$$RO$$Limit|在程序中的含义是不是类似一个程序地址标号啊?就像
CopyProcBeg 

使用特权

评论回复
20
dld2| | 2008-6-21 21:12 | 只看该作者

re楼上

那玩意是链接器产生的符号。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

151

主题

727

帖子

3

粉丝