单片机学习小组
直播中

付华一

7年用户 132经验值
私信 关注

求解答汇编语言基础的三个问题!

这个是义隆单片机的汇编代码,我就截取了一部分,就3个简单的问题,各位大神帮我下吧!感激不尽只学过C 第一次用汇编有点理不清额START:            R0 ==0X00 //间接地址寄存器            TCC ==0X01            PC ==0X02            STATUS==0X03            R4  ==0X04            IOC5==0X05            IOC6==0X06            PORT5==0X05            PORT6==0X06            IOCB ==0X0B            IOCC ==0X0C            IOCD ==0X0D            IOCE ==0X0E            IOCF ==0X0F            RF  ==0X0F            DATA_R==0X10            ;显示缓冲区10H~27H            DIS_CNT==0X28           ;行扫描寄存器            R_LOOP  ==0X29            R_LOOP_24==0X2A            SHIFT_R ==0X2B            tiME_R  ==0x2E            TIME_R_1==0x2F            DLY_TIME==@50            NUMBER==@35            CY==STATUS.0            ZERO==STATUS.2            CP_164==PORT5.0         ;定义164_CP端            SCK_595==PORT5.1        ;定义595_CP端            RCK_595==PORT5.2        ;定义595_RCK锁存端            OE_595==PORT5.3        ;定义595_OE端            SI_595_G==PORT6.0       ;定义595绿色SI端            SI_595_R==PORT6.1       ;定义595绿色SI端            SI_164==PORT6.6         ;定义164_SI端            GREEN_TEST==PORT6.7     ;定义595绿色测试端             ORG     0X000            JMP     INITIAL_MAIN  ////第一个问题是不明白,为什么这里要初始化两次,而且第二次还换了个地址再初始化            DISI            RET            NOP            ORG     0X008            JMP     INITIAL_MAIN            NOP            ORG     0X010        ////第二个问题是到这里换了个地址就结束了?问题是怎么运行到main里面的程序 感觉到这里好像结束了?? ;程序初始化    INITIAL_MAIN:            DISI            MOV     A,@0XF0            IOW     IOC5            ORT5设置为输出            MOV     A,@0B10111000            IOW     IOC6            ORT6设置            MOV     A,@0B00111111            IOW     IOCD            CLRA                    ;TCC为外触发计数方式            IOW     IOCE            ;WDT禁止            IOW     IOCF            ;禁止中断被开放            MOV     A,@0B11111000            MOV     PORT5,A            MOV     A,@0B10110000            MOV     PORT6,A            ;CALL   DLY250MS        ;250毫秒延时        MAIN:                       //问题3:这个main 是像start一样固定用法的伪指令 还是就一个标识符没什么意义的伪指令?            JBS     GREEN_TEST            JMP     DIS_NO_SIGN     ;禁止符号显示程序            MOV     A,@NUMBER            MOV     DIS_CNT,A

回帖(2)

张玉英

2019-8-30 09:05:08
1,MAIN:是个伪指令
2,ORG 0X008估计是个中断函数入口地址(51单片机就是外部中断0的中断入口 )
3,ORG 0X010是指定INITIAL_MAIN:程序断的开始地址位置。
举报

陈英

2019-8-30 09:12:23
1,ORG指令一般是说明程序段开始的地址,单片机的0x00地址一般是复位向量,0x08一般是中断向量,也就是说发生中断的时候程序指针会指向0x08这个地址并从该地址响应中断服务程序。至于你的第一个问题,你需要根据具体功能来看,有可能功能需求就是要一段时间滞后就重新开始呢?
2,第二个问题,并不是说程序结束了,而是重新指定程序开始执行的起始地址。不加ORG 0x010的话,INITIAL_MAIN的地址就是0X009。程序顺序执行的时候是会进入到MAIN中的。
3,第三个问题,我认为MAIN只是你自己定义的一个标号,你也可以给它重新取个名字。当然,最好是看芯片的DATASHEET来确定下。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分