加载中…
个人资料
guet_dept7_ZG
guet_dept7_ZG
  • 博客等级:
  • 博客积分:0
  • 博客访问:265
  • 关注人气:1
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
相关博文
推荐博文
正文 字体大小:

汇编语言(王爽)学习笔记(一)

(2016-03-17 14:59:32)
标签:

杂谈

汇编语言(王爽)学习笔记
 
第一、二、三章
 
    汇编语言是直接在硬件之上工作的编程语言,高级语言需要经过编译成汇编语言,再编译成机器语言才能在PC机上执行

第一章    基础知识

1.机器语言
    机器语言是机器指令的集合。计算机只能识别  0 和 1 两种状态,机器指令是一连串N个不同的 0  和 1 组成,对于程序员来说,机器指令是晦涩难懂不易掌握的,所以便出现了汇编语言,每一条汇编指令对应有相应的机器指令

2.汇编语言的组成
    (1)汇编指令:机器码的助记符
    (2)伪指令:没有对应的机器码,由编译器执行,计算机并不执行
    (3)其他符号:如 +、-、*、/等,由编译器识别,没有对应的机器码

3.存储器

    CPU是计算机的核心部件,它控制整个计算机的运行并进行运算。要想让一个CPU工作,就必须向它提供指令和数据,指令和数据在存储器中存放,也就是我们平时所说的内存,寄存器就是内存。
      
    存储器分为RAM和ROM(只读存储器)
    在内存或磁盘上,指令和数据没有任何区别,都是二进制信息。CPU在工作的时候把有的信息看作指令,有的信息看作数据。
   
    CPU对存存器进行数据的读写,必须和外部器件进行下面3类信息交互
        (1)存储单元的地址(地址信息)
        (2) 器件的选择,读或写的命令(控制信息)
        (3) 读或写的数据(数据信息)

4.总线:
    (1)地址总线:寻找,N根总线可寻到2^N个内存单元,因为一个总线只能表示0或1
    (2)数据总线:传送数据,N根一次可以传送N/8个存储单元
    (3)控制总线:CPU对外部器件的控制是通过控制总线来进行的,控制总线的宽度决定了控制能力

     CPU从单元中读取数据的过程

         (1)CUP通过地址总线将地址信息发出
         (2)CPU通过控制总线发出没存读取命令,选中存储器芯片,并通知它,将要从中读取数据
         (3)存储器将地址信息指向的单元中的数据通过数据总线送入CPU
 
5.接口卡
    CPU对外部设备不能直接控制,如显示器、打印机,直接控制这些设备进行工作的是插在扩展槽上的接口卡,接口卡通过控制总线同CPU相连,CPU可以直接控制这些接口卡,从而实现对外设的间接控制。
 
6.内存地址空间
    存储器在物理上是独立的,但它们有两点相同,1)都和CPU总线相连,2)CPU对它们进行读写的时候通过控制线发出内存读写命令。
    CPU在操控它们的时候,把它们当做内存来对待,把它们总的看作是一个有若干存储单元组成的逻辑存储器,这个逻辑存储器就是我们所说的内存地址空间。
 
 
第二章   寄存器
 
    CPU由运算器、控制器、寄存器等器件构成,这些器件靠内部总线相连。在CPU中,运算器进行信息处理;寄存器进行信息存储;控制器控制各种器件进行工作;内部总线连接各种器件,在它们之间进行数据的传送。对于一个程序员来说,CPU中的主要是寄存器,寄存器是程序员可以用指令读写的部件。程序员通过改变各种寄存器中的内容来实现对CPU的控制。
 
1.通用寄存器
    8086CPU总共有14个寄存器,所有寄存器都是16位,可以存放两个字节。AX,BX,CX,DX这4个寄存器通常存放一般性的数据,被称为通用寄存器。这些寄存器又可以分为两个可独立使用的8位寄存器使用:
    例如, AX可分为AH,和AL
 
2.字的存储
    字节:记为byte,一个字节由7个bit组成,可以存在8位寄存器中
    字:记为word,一个字由两个字节组成,这两个字节分别为这个字的高位字节和地位字节,一个字可以存在一个16位的寄存器中。例如,高字节存在AH,低字节存在AL
 
3.物理地址
    CPU访问内存单元时,要给出内存单元的地址。所以内存单元构成的存储空间是一个一维线性空间,每一个内存单元在空间中都有唯一的地址,我们将这个唯一的地址称为物理地址。
    8086是16位CPU,也就是说,在8086内部,能够一次性处理、传输、暂时存储的信息最大长度是16位
 
    物理地址 = 短地址 * 16 + 偏移地址 (16进制*16,相当于十进制 *10),这个等式的含义是,CPU在访问内存时,用一个基础地址段(段地址 * 16)和一个相对于基础地址的偏移地址相加,给出物理地址。
 
4.段寄存器
    8068CPU有四个段寄存器:CS,DS,SS,ES
 
5.CS 和 IP
    CS 和 IP 是8068CPU中两个最关键的寄存器,它们指示了CPU当前要读取的指令的地址。CS为代码段寄存器,IP为指令指针寄存器。内存中的一段信息曾被CPU执行过的话,那么,它所在的内存单元必然将被CS:IP指向过。
 
 
               汇编语言(王爽)学习笔记(一)
 
    图2.10展示了8086CPU读取、执行一条指令的过程。
    初始状态,CS:IP 的值已经设置好-->CS、IP中的内容送进地址加法器-->地址加法器将物理地址送人输入输出控制电路-->输入输出电路将物理地址送上地址总线-->从物理地址所指内存单元开始存放机器指令B8 23 01 通过数据总线被送入CPU-->输入输出控制电路将机器指令B8 23 01 送入指令缓冲器-->IP中的值自动增加-->执行控制器执行指令B8 23 01
 
    修改CS:IP的值,程序员可以通过控制CS、IP中的内容来控制执行目标指令, 不能以 mov CS,2000的形式来修改CS,IP的值,最简单的修改CS、IP的值的指令 : jmp 指令
    可用形如 ”jmp 段地址:偏移地址“ 的指令完成,如
    jmp 2AE3:3   执行后CS = 2AE3,IP = 0003H,若仅想修改IP的内容,可用形如“jmp 某一合法寄存器”的指令完成
    jmp ax, 恰似 mov IP,ax
 
 
6.Debug
    Debug 是DOS、Windows都提供实模式程序的调试工具。使用它,可以查看CPU各种寄存器的内容、内存的情况和再机器码级跟踪程序的运行。但在win7 64 位中需要用 DOSBox工具才能进入实模式的dos。
    我们使用Debug进行汇编练习的常用功能
 
    R命令查看、改变CPU寄存器的内容,D命令查看内存中的内容,E命令改写内存中的内容,U命令将内存中的机器指令翻译成汇编,T命令执行一条机器指令,A命令一汇编指令的格式在内存中写入一条机器指令
 
 
第三章   寄存器(内存访问)
 
1.字单元
    字单元,即存放一个字型数据(16 位)的内存单元,由两个地址连续的内存单元组成。高地址单元中存放字型数据的高字节,底地址内存单元中存放字型数据的低位字节。
 
2.DS 和 [address]
    8086CPU中有一个DS寄存器,通常用来存放要访问的数据的段地址。比如我们要读取10000H单元的内容,可以用如下程序段进行
 
    mov bx,1000H
    mov ds,bx
    mov al,[0]
    将1000:0中的数据读到al中,mov指令中的[]说明操作对象是一个内存单元,[]中的0说明偏移地址是0,它的段地址默认放在ds中。8068CPU不支持将数据段直接送人寄存器的操作。”mov 寄存器,段寄存器“指令是正确的,“mov 段寄存器,内存单元”也是正确的 ,如 mov ds,[0]
 
    数据段,在编程时,可以根据需要,将一组内存单元定义为一个段,在这段内存空间中存放数据,这就是数据段。在操作的时候,用ds存放数据段的段地址,再根据需要,用相关指令访问数据段中的单元。如下,定义数据段
    mov ax,123BH
    mov ds,ax
 
3.栈
    栈是一种具有特殊的访问方式的存储空间。它的特殊性就在于,最后进入这个空间的数据,最先出去。(先进后出,数据结构中的内容)
 
    CPU提供入栈和出栈的指令,最基本的两个是PUSH (入栈)和 POP(出栈)。比如,push ax 表示将寄存器ax中的数据送入栈中。入栈和出栈的操作都是以字节为单位进行的。
    在CPU中,有两个寄存器,段寄存器 SS 和寄存器 SP ,栈顶的段地址存放在SS中,偏移地址存放在 IP 中。任意时刻,SS:IP指向栈顶元素。push 指令和 pop 指令执行时,CPU从SS和SP中得到栈顶的地址。
 
    push ax 执行,
   (1)sp = sp - 2,SS:SP指向当前栈顶前面的单元,以当前栈顶前面单元为新的栈顶
   (2)将ax中的内容送入SS:SP指向的内存单元处,SS:SP此时指向新栈顶
 
    栈顶超届可能会造成数据的覆盖,造成其他程序中的数据、代码等出现错误。
  
 
 
 
 
 
 
       

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

0

阅读 评论 收藏 转载 喜欢 打印举报/Report
  • 评论加载中,请稍候...
发评论

    发评论

    以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

      

    新浪BLOG意见反馈留言板 电话:4000520066 提示音后按1键(按当地市话标准计费) 欢迎批评指正

    新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 会员注册 | 产品答疑

    新浪公司 版权所有