51汇编与C全面周立功

2019-03-24 17:07发布

书上系统时钟例程能看懂,但后面对该例程的优化看不明白了。怎么将下面这段代码与时钟系统的c程序连接起来呢?我试了好长时间,一直没成功。
CSEG AT 0400H
bcdmap: DB '0' ,'0'
DB '0' ,'1'
DB '0' ,'2'
...
DB '5' ,'7'
DB '5' ,'8'
DB '5' ,'9'
END 此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
19条回答
ahshmj
1楼-- · 2019-03-24 22:49
相当于c 的数组。是指定地址的数组。

[ 本帖最后由 ahshmj 于 2013-12-10 15:38 编辑 ]
xuyiyi
2楼-- · 2019-03-25 04:13
unsigned char bcdmap = { '0' ,'0',
                      '0' ,'1',
                      '0' ,'2',
                      ...
                      '5' ,'7',
                      '5' ,'8',
                      '5' ,'9'};
xuyiyi
3楼-- · 2019-03-25 06:51
 精彩回答 2  元偷偷看……
hfjzy0702
4楼-- · 2019-03-25 07:27
原程序中是这样初始化二维数组的。但这样的数组无法定位表头的地址,地址由keil自动编译产生。
uchar code bcdmap[60][2]={
"00", "01","02", "03","04", "05","06", "07","08", "09","10", "11","12", "13","14",
"15","16", "17","18", "19","20", "21","22", "23","24", "25","26", "27","28", "29",
"30", "31","32", "33","34", "35","36", "37","38", "39","40", "41","42", "43","44",
"45","46", "47","48", "49","50", "51","52", "53","54", "55","56", "57","58", "59"};

下面这段汇编代码就能把表头地址定位在ROM区的0400H位置上,缩短主程序查询表格的指令周期。就是用这段汇编代码取代原程序中的C语言定义的方法。 但是不知道怎么把这小段汇编代码与C程序连接起来。
xuyiyi
5楼-- · 2019-03-25 08:32
用Keil  C自动编译,建议采用不指定表头地址方式,由Keil  C自动编译时自动定位产生。

如有些特殊的需要,一定要用到表头地址绝对定位方式,方便产品中的某些特定应用,如动态修改指定表位内容等,由于Keil  对变量地址的指定符 _at ,  只有对变量不赋值时才有效,对变量一经赋值则通不过编译,通常俺采用2种方法变通便用。

1.  在连接时指定该表头的重定位地址,这样,经Keil  C编译后,这段表格即重定位在指定地址。

2.  用汇编方式单独写一个子程序,指定定位地址,然后用Keil  C一起编译。
hfjzy0702
6楼-- · 2019-03-25 09:31
 精彩回答 2  元偷偷看……

一周热门 更多>