0
回复
收藏
点赞
分享
发新帖
论坛首页
单片机MCU/嵌入式
51的单片机有111条指令,复杂?
51的单片机有111条指令,复杂?
我现在正在学习51单片机的汇编,指令太多了,简单的程序还可以,但是要有点复杂的程序编写起来真麻烦,我想是不应该学习C语言,但我听说汇编的程序很容易运行并且很快,我不知道我是否应该继续把汇编学下去,太难了,太复杂了,指令太多了,不实用的单片机,这样的指令怎样去普及?我想不明白,或许是想以后更好的发展空间才这样设计的吧?请老师们说说看法!
全部回复(10)
只看楼主
正序查看
倒序查看
现在还没有回复呢,说说你的想法
njyd
LV.8
2
2007-08-24 19:41
多吗?不多也.
常用的不到一半.
就象进入各种字典的汉字有六万到十万个,你只要认识其中的一千五到两千个就能熟练地读书看报了.
0
回复
提示
ceor
LV.4
3
2007-08-29 16:59
@njyd
多吗?不多也. 常用的不到一半. 就象进入各种字典的汉字有六万到十万个,你只要认识其中的一千五到两千个就能熟练地读书看报了.
有道理,我也在学,可以交个朋友.gaozhijuncool@163.com
0
回复
提示
njyd
LV.8
4
2007-09-01 14:22
还有:
111条指令是指机器指令,是操作指令与寻址“相乘”得到的.实际应用只需要记住汇编中的操作指令(mov、jmp等)与每种操作指令可以使用的寻址方式就行了,这样顶多记十几条就够用了,碰到不常用的没记住再查书.
还有,象调用子程序指令有长调用LCALL和短调用ACALL,直接转移指令也有长短之分:LJMP、AJMP、SJMP.实际写程序时不需要管长短,只接写CALL和JMP就行了,现在的汇编程序会根据距离远近自动选用长短.这样不光少记了三条指令,还不需要在编程时判断距离远近.
0
回复
提示
苏磊
LV.3
5
2007-09-04 06:44
@njyd
还有: 111条指令是指机器指令,是操作指令与寻址“相乘”得到的.实际应用只需要记住汇编中的操作指令(mov、jmp等)与每种操作指令可以使用的寻址方式就行了,这样顶多记十几条就够用了,碰到不常用的没记住再查书. 还有,象调用子程序指令有长调用LCALL和短调用ACALL,直接转移指令也有长短之分:LJMP、AJMP、SJMP.实际写程序时不需要管长短,只接写CALL和JMP就行了,现在的汇编程序会根据距离远近自动选用长短.这样不光少记了三条指令,还不需要在编程时判断距离远近.
老师,你说的真好,有道理,指点了就是明白!我还想问相乘等运算在实际编程中有用吗?大吗?有简便的方法吗?还有设定时间很麻烦,有简单的方法设定吗?有时候还需要计算每个指令的长度等?
0
回复
提示
njyd
LV.8
6
2007-09-09 16:42
@苏磊
老师,你说的真好,有道理,指点了就是明白!我还想问相乘等运算在实际编程中有用吗?大吗?有简便的方法吗?还有设定时间很麻烦,有简单的方法设定吗?有时候还需要计算每个指令的长度等?
单字节相乘很容易,多字节就比较麻烦,我是从书上找乘法程序改一下用上,而且在我的范围基本上不用乘除法.
有一些偷懒办法,比如乘除二、四等可以用右、左移一、两位解决.
时间要准确一般应该用定时器,如果要计算一段程序的运行时间我有个偷懒的办法,不用算.仿真机监控程序都有运行时间显示,在仿真机上运行这段程序再看时间显示就知道了.但这种方法不太准,因为大部分程序运行时都会有不同的转移路径,这样每次运行到的语句就会不一样.甚至没有不同的转移路径也会有误差,我碰到过同样一段延时程序多次运行时间有大约千分之几的不同.
0
回复
提示
华盛电子
LV.3
7
2007-09-10 16:49
@njyd
单字节相乘很容易,多字节就比较麻烦,我是从书上找乘法程序改一下用上,而且在我的范围基本上不用乘除法. 有一些偷懒办法,比如乘除二、四等可以用右、左移一、两位解决. 时间要准确一般应该用定时器,如果要计算一段程序的运行时间我有个偷懒的办法,不用算.仿真机监控程序都有运行时间显示,在仿真机上运行这段程序再看时间显示就知道了.但这种方法不太准,因为大部分程序运行时都会有不同的转移路径,这样每次运行到的语句就会不一样.甚至没有不同的转移路径也会有误差,我碰到过同样一段延时程序多次运行时间有大约千分之几的不同.
高手,请多多指点.
0
回复
提示
苏磊
LV.3
8
2007-09-14 20:03
@njyd
单字节相乘很容易,多字节就比较麻烦,我是从书上找乘法程序改一下用上,而且在我的范围基本上不用乘除法. 有一些偷懒办法,比如乘除二、四等可以用右、左移一、两位解决. 时间要准确一般应该用定时器,如果要计算一段程序的运行时间我有个偷懒的办法,不用算.仿真机监控程序都有运行时间显示,在仿真机上运行这段程序再看时间显示就知道了.但这种方法不太准,因为大部分程序运行时都会有不同的转移路径,这样每次运行到的语句就会不一样.甚至没有不同的转移路径也会有误差,我碰到过同样一段延时程序多次运行时间有大约千分之几的不同.
谢谢老师!
0
回复
提示
竹林清风
LV.1
9
2007-09-22 21:54
@njyd
还有: 111条指令是指机器指令,是操作指令与寻址“相乘”得到的.实际应用只需要记住汇编中的操作指令(mov、jmp等)与每种操作指令可以使用的寻址方式就行了,这样顶多记十几条就够用了,碰到不常用的没记住再查书. 还有,象调用子程序指令有长调用LCALL和短调用ACALL,直接转移指令也有长短之分:LJMP、AJMP、SJMP.实际写程序时不需要管长短,只接写CALL和JMP就行了,现在的汇编程序会根据距离远近自动选用长短.这样不光少记了三条指令,还不需要在编程时判断距离远近.
我是在校学生,谢谢老师的讲解
0
回复
提示
vmfjru47
LV.1
10
2007-09-30 16:20
用C51.
0
回复
提示
sunnywei1125
LV.1
11
2007-10-04 20:17
@vmfjru47
用C51.
51指令不算多啊,记住一些常用的,手边放一本书,随时查,其实51的汇编不难的!
0
回复
提示
工程师都在看
【 DigiKey DIY原创大赛】基于树莓派的自行车电子围栏设计
Godsama
【 DigiKey DIY原创大赛】基于双向电源模块设计的双向直流大功率源载一体机
电源技术砖家
【 DigiKey DIY原创大赛】基于反激式开关电源的手机充电器设计(二)PCB Layout篇
砖一谈芯
【 DigiKey DIY原创大赛】基于反激式开关电源的手机充电器设计(四)单板调试篇
砖一谈芯
AD工程PCB文件导入LCEDA故障问题解决。
程序小白
精华推荐
换一换
立
即
发
帖