如何学习单片机的汇编语言

我的C语言很好,但是吧,我们学校用的破教程是汇编语言的,我对汇编语言中的寻址实在是搞不定,别看就7中,很是让我不解,快考试了,我的单片还不怎么样,有哪位高人可以通俗的讲下单片汇编里的寻址吗?或者有其他学校的视频教程也行,我实在受不了了。谢谢。郁闷中
补充下我们学的是高等教育出版社出版社的单片机教程,学的是80c51

我也学习单片机寻址有很多方式:(举几个例子给你吧)
1. 寄存器寻址

寄存器寻址就是操作数存放在寄存器中,指令中指定的寄存器的内容就是操作数。
2. 直接寻址
直接寻址方式就是在指令中直接给出操作数所在存储单元的地址。此时,指令中操作数部分是操作数所在地址。
3. 立即数寻址
立即数寻址就是操作数在指令中直接给出,或者说指令操作码后面立即给出一字节或两字节操作数
4. 寄存器间接寻址
寄存器间接寻址是把指定寄存器的内容作为操作数地址,该地址所指定的单元内容作为操作数。
为了区分寄存器寻址和寄存器间接寻址,在寄存器间接寻址中,所用到的寄存器的前面要加间接寻址符“@”。
例:寄存器R0内容为30H,片内RAM 30H单元的内容为45H。
解:指令“MOV A,R0”的功能是将R0的内容30H传送给累加器A,指令执行结果是累加器A中的内容为30H。
指令“MOV A,@R0”的功能是将R0的内容30H作为操作数的地址,根据这一地址找到内部RAM 30H单元,将其内容45H传送至累加器A,指令执行结果是累加器A中内容为45H。
5. 变址寻址(基址寄存器+变址寄存器间接寻址)
例如:指令“MOVC A,@A+DPTR”是变址寻址。
解:假设DPTR的内容为2030H,累加器A的内容为12H。
该指令的功能是将2030H和12H相加,得到2042H作为操作数地址,在程序存储器中找到2042H单元,将其内容送至累加器A。
6. 相对寻址
例如:在程序存储器中2000H单元有一条双字节的相对转移指令“SJMP 75H”。
解:程序存储器2000H、2001H单元的内容80H、75H是“SJMP 75H”的机器语言代码。
温馨提示:内容为网友见解,仅供参考
第1个回答  2010-06-10
你的C语言学得很好,再学其他语言,就易如反掌了,汇编语言是直接面对硬件的语言,学汇编之前,必须了解你所学单片机的内部硬件结构,各个寄存器的功能,输出输入端口等.
我个人的经历可以供你参考,在学单片机之前,我只是在大学里学过BASIC语言,工作中接触到单片机,以为它很神秘,深入学习后,才发现,单片机是非常简单的,汇编的编程思路和BASIC基本相似,从入门学习单片机到第一个产品开发成功,我只用了1个半月的时间,这都归功于我的BASIC功底.
别人能行的事,你肯定也能行.相信自己,努力
第2个回答  2010-06-10
在汇编里一般寻址都带@符号
在一般寻址里,用@R1,@R0的比较多,R2,--7不能用这类指令
其中R1,R0存放的是指针,优点是寻址快,使用方便,但寻址范围最大256
例如我想取空间为RAM200处的物理位置的数据
语句如下:
MOV R0,#200 ;将地址放入R0
MOV A,@R0 ;将200地址的数据取出放入A
MOV A,#12H ;立即数0x12放入A
MOV @R0,A ;将A中的数据放入200地址
此外还有@DPTR指针,这类指针的地址是16位,最大64k主要是针对于外部的RAM空间寻址,指令时MOVX A,@DPTR,
方法类似于上面的介绍
第3个回答  2020-01-04
先把基本的指令命令是什么意思弄明白,然后再看些别人的程序,当能比较熟练时,可以开始编写一些小程序进行锻炼。
第4个回答  2010-06-10
现在实际应用中很少用到汇编了,c是主流,汇编能看懂就行
相似回答