现在在学习汇编,买了几本书,都感觉看不懂,照例子去还可以弄好,自己写个数码管100倒计时就写不出来,所以想找找教程或者好的视频学习下
湖边草,俯仰若有情。岁月千载如流水,人生一世似漂萍,何必求浮名。
湖边草,俯仰若有情。岁月千载如流水,人生一世似漂萍,何必求浮名。
1) 汇编的话,主要是指令要记住怎么用
2) 还有代码的执行流程
3) 如果不为了考试,也可以从C学起,这个理解起来会更容易^_^
专注智能产品的研究与开发,专注于电子电路的生产与制造……QQ:2912615383,电子爱好者群: void
从汇编入门能更深入了解单片机,我以前学的时候就从汇编开始 的,非常 支持你,网上有很多51汇编知识的,
网上搜一下,有很多的,现在学校里的微机原理都是汇编,有很多单片机书籍也是用汇编写程序的(主要是讲51单片机的书)
汇编语言的一些概念
1、寻址
CPU和内存的关系,就象一个计算器和一张纸。你把要做的事写到纸上。然后让计算器去照着做。计算器就是CPU。内存就是纸。怎么让cpu找到要执行的程序和数据就是寻址!
2、寄存器
部件内部中保存状态或数据的存储器称为"寄存器"。通常都比较少,但是速度快。CPU部件中的存储器、MPU中有些保存外设控制状态或数据的存储器也称寄存器。寄存器可以分六大类。1、有可以进行数学运算的—累加器。2、标志cpu工作状态的(累加器的运算结果、数据的符号等)。3、还有保存程序执行的当前位置的程序指针寄存器(称PC)。4、堆栈指针寄存器。5、一些保存临时数据的寄存器—通用寄存器。6、标志程序指令地址或特定内存位置的段寄存器。
3、中断
你的计算机在执行一段程序任务时.这时你按了一下键盘希望CPU能响应你.这时cpu就停下当前的工作去看有什么事发生.如果处理完这件事.就继续执行刚才放下的事.这一过程叫中断执行.cpu要完成这件事就要知道两件事.第一就是要知道扫描键盘的程序在哪里.第二是执行完成后回到哪里.这就是中断向量和堆栈.向量指明了cpu可以到哪里找到扫描键盘的程序.堆栈里则保存着断点.为什么可以用这些地方呢?因为在cpu设计时就知道了该在哪里找到这些向量和堆栈的地址.所以cpu可以找到!这是硬中断。它是由外界的信号引起的。还有一些是因为cpu本身引起的。cpu执行了一些错误的指令如被零除等,就会中断。还有一些是由于执行了特定的指令也可以引起中断。为什么要有这样的指令呢。我们在一个多段程序中想使用外设(打印机、声卡等)或是想调用一些特定的功能(多数都是操作系统的功能。所以也叫系统调用)这时也会引起cpu的中断。
4、堆栈
刚才说了中断要保存断点。保存到哪里呢。内存中。那到底在内存哪里呢?通常cpu中会设置有一个特定的寄存器,该寄存器中被用来保存这个堆栈的地址。这个寄存器就叫堆栈指针寄存器。堆栈指针寄存器有个特性能够自动的"加一"或"减一"操作。保存完数据后寄存器值自动的加一或减一,为下一次操作指定地址。是加操作还是减操作,与指令类型(压栈/出栈)和栈的增长方向有关。中断发生时cpu会自动的把断点的地址保存到堆栈指针寄存器指定的地址里去。不需要人工干预。但是中断程序中需要用到的寄存器(寄存器是共用的)要自己写代码保存。在返回被中断程序前时又要手工的把保留的数据恢复回去。刚才说的CPU自动保存的地址等数据不用你手动恢复。cpu根据这些自动保存的数据跳回到断点处。为什么要后进先出呢?这个你自己想吧!调用子程序也和中断过程类似。也可以把中断看做是一个特殊的子程序。
5、地址分段
内存中的数据可以直接找到。干吗还那么麻烦的用个什么段地址寄存器来指定。多麻烦啊!回答这个问题要从象操作系统这样的软件说起。操作系统一般都要进行任务的调度。那么多程序放到内存里。在调度时要找到它们就是一件不容易的事。这还不是麻烦的。你在编程序时可不知道操作系统要把它放到哪里。那你怎么在转跳时把位置搞定啊!这时要是能不用操心它就好了。哪我就假定它是从一个特定的地址开始的。我写程序就照它写。不就解决问题了吗?这样做操作系统就傻眼了。它就要知道需要改那些你指定的地址。这可是很麻烦的啊!为了这些问题。出现了MMU(memory manager unit)内存管理单元。可以解决上面的问题。写程序时你照着给定的地址写。执行时cpu改一下段地址寄存器(code segment register)的值。就很快的改好了。因为段寄存器加上你假定的地址,就是你内存的地址。怎么回事呢!例如你现在所在的地址是A。你要跳转的地址是X。这时你要是执行程序很可能出现错误。因为你在写程序时不是假定的A而是一个别的地址。那还不出错啊!同理在定位操作数时也一样。那让操作系统改不就行了吗?可是鬼知道你定义的变量在哪里啊!回到刚才的问题。cpu不知道你怎么编的程序。它在执行时用段寄存器做参考。你变量地址就成为一个相对于段的偏移量。段地址+你的地址。是不是很方便!至于保护模式有个物理地址和线性地址的事。这个比较麻烦我以后写出来。
6 外设操作
操作外设。不同的cpu体系有不同的设计。主要分两类。一类是与内存地址分开编址(I/O独立式)。一类是与内存地址一同编址(端口映射式)。8086是I/O独立式。早期的APPLE是端口映射式。分别讲一下。I/O独立式就是把I/O输入输出设备编到I/O地址里与内存分开。操作设备就是向哪个I/O地址写或读。因为不与内容编址。所以指令也不同。out 10H就是向I/O地址的10H的这个设备写入数。操作数在A寄存器里。怎样的好处是可以把内存做的很大。设备也可以用不同的机器周期。端口映射式就是把I/O设备编到统一的地址里。和内存占用同样的地址线。好处是寻址灵活。但减少了内存的空间。如果你要操作设备就可以用ld [xxxx]。这样的指令。cpu设计也简单了。还有一些其它方式。如8051这样的芯片它的外设是在内部寄存器里的。
7 DMA
DMA是不需要CPU参与的情况下由外设来操作地址总线向内存写数或读数。这种机制可以省去cpu时间。使I/O的速度加快。再有就是CPU的速度和外设的配备。
注1 10H是COMS的地址
如果不是搞研究,仅仅是做应用,觉得没有必要从汇编做起,直接从C开始就行。
个人的一点建议,单片机可以说是玩出来的,当你觉得好玩的时候,你自然就会有兴趣学它,如果你一开始就看汇编,绝对看的你头大,我就是先学的C,当时用的是王云51单片机C语言教材(这本书配套有云龙51单片机视频,书和视频结合看新手很容易上手),然后参加了一个学校的小电子比赛,之后到大二才学的单片机(就是学校以课程的形式来讲单片机),那个时候我们讲的时候老师是讲汇编,但是他不鼓励我们用汇编,很明显C这么简单的形式不用为什么要用汇编这种像裹脚布一样的东西呢?