• 回复
  • 收藏
  • 点赞
  • 分享
  • 发新帖

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
回复
2007-09-10 16:49
@njyd
  单字节相乘很容易,多字节就比较麻烦,我是从书上找乘法程序改一下用上,而且在我的范围基本上不用乘除法.  有一些偷懒办法,比如乘除二、四等可以用右、左移一、两位解决.  时间要准确一般应该用定时器,如果要计算一段程序的运行时间我有个偷懒的办法,不用算.仿真机监控程序都有运行时间显示,在仿真机上运行这段程序再看时间显示就知道了.但这种方法不太准,因为大部分程序运行时都会有不同的转移路径,这样每次运行到的语句就会不一样.甚至没有不同的转移路径也会有误差,我碰到过同样一段延时程序多次运行时间有大约千分之几的不同.
高手,请多多指点.
0
回复
苏磊
LV.3
8
2007-09-14 20:03
@njyd
  单字节相乘很容易,多字节就比较麻烦,我是从书上找乘法程序改一下用上,而且在我的范围基本上不用乘除法.  有一些偷懒办法,比如乘除二、四等可以用右、左移一、两位解决.  时间要准确一般应该用定时器,如果要计算一段程序的运行时间我有个偷懒的办法,不用算.仿真机监控程序都有运行时间显示,在仿真机上运行这段程序再看时间显示就知道了.但这种方法不太准,因为大部分程序运行时都会有不同的转移路径,这样每次运行到的语句就会不一样.甚至没有不同的转移路径也会有误差,我碰到过同样一段延时程序多次运行时间有大约千分之几的不同.
谢谢老师!
0
回复
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
回复
2007-10-04 20:17
@vmfjru47
用C51.
51指令不算多啊,记住一些常用的,手边放一本书,随时查,其实51的汇编不难的!
0
回复