OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3346|回复: 3

汇编简单问题,在线等!!!谢谢

[复制链接]

19

主题

27

帖子

0

精华

初级会员

Rank: 2

积分
140
金钱
140
注册时间
2015-9-26
在线时间
7 小时
发表于 2016-8-4 10:24:07 | 显示全部楼层 |阅读模式
1金钱
这个是义隆单片机的汇编代码,我就截取了一部分,就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            ;显示缓冲区10H27H
            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

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

4

主题

346

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3657
金钱
3657
注册时间
2016-2-21
在线时间
542 小时
发表于 2016-8-5 09:29:09 | 显示全部楼层
问题1:收下他不是想初始化两次,跳转后,不会再回来的,所以初始化还是一次。第二个跳转到初始化,根据他给的起始地址,0x008,这种很靠前的地址一般存放着中断向量表。所以,估计是后面的一些程序会引发中断,然后就跳回去重新初始化了。他的初始化之后,就是直接紧接着主程序的,所以,每次初始化后,肯定会进入主程序。具体啥会引发中断,就不仔细看了,省时间
回复

使用道具 举报

4

主题

346

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3657
金钱
3657
注册时间
2016-2-21
在线时间
542 小时
发表于 2016-8-5 09:32:36 | 显示全部楼层
问题3:汇编里 XXXX+: 的写法是代表了标号。代表了该行程序的首地址。因为假如你要跳转到某个地方,写JMP 00AH ,这种直接写地址的写法太**了。JMP XXXX 则直观很多。
回复

使用道具 举报

58

主题

6291

帖子

1

精华

资深版主

Rank: 8Rank: 8

积分
11406
金钱
11406
注册时间
2014-4-1
在线时间
1282 小时
发表于 2016-8-5 10:11:27 | 显示全部楼层

ORG 0x008  
意思是:ORG是定位的意思,后面的程序从0x008地址开始,顺序写入程序存储器,直至遇到下一个ORG。

Q1:这里是中断向量,这段相当于中断服务程序。
        “初始化两次”,估计理解错了。

Q2:这是新的开始,后面的INITIAL_MAIN、MAIN等等要从这里开始写。

Q3:就是一个标识符。


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-23 09:24

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表