现在的位置: 首页 > 综合 > 正文

汇编学习(一)基础扫描

2014年09月05日 ⁄ 综合 ⁄ 共 1265字 ⁄ 字号 评论关闭

      最近一直在看CSAPP这本书,看到第三章程序的机器级表示,翻了几页表示压力很大,没有学过汇编,硬着头皮看有点吃力,刚好手头买了一本王爽的《汇编语言》,也打算系统的学习下汇编,因此暂停下CSAPP的阅读计划,先学习汇编语言。 汇编语言包含三部分:(1)汇编指令(2)伪指令(3)其他符号;汇编指令对应机器码,本人着重学习汇编指令,毕竟以后也不搞汇编,只是通过汇编了解点底层知识和调试作用。本文就是个人的一点笔记。

  1. 硬件基础

       要学汇编多少得懂点硬件知识,汇编语言是直接在硬件之上工作的编程语言,首先要了解硬件系统的结构,才能有效的应用汇编语言对其编程。本人不是计算机专业的,也不太懂硬件知识,此次也只是简单记录下。
     CPU 是计算机的核心部件.它控制整个计算机的运作并进行运算,要想让一个CPU 工作,就必须向它提供指令和数据。指令和数据在存储器中存放,也就是平时所说的内存。

一个典型的CPU由运算器、控制器、寄存器等器件组成,这些器件靠内部总线相连。
    寄存器:简单的讲是CPU中可以存储数据的器件,一个CPU中有多个寄存器。不同的CPU寄存器个数不同,8086CPU(注:下文没有特别注明的话提到CPU均是指8086CPU)有14个,分别是AX,BX,CX,DX,CS,DS,ES,SS,SP,IP,BP,SI,DI,PSW。其中所有寄存器都是16位的,可以存放两个字节(1Byte = 8bit )。

1.1 通用寄存器

    其中AX,BX,CX,DX称为通用寄存器,其存储最大数据为2的16次方-1,为了兼容8位CPU,AX分为AH,AL,BX:BH,BL,CX:CH,CL,DX:DH,DL;即高8位和低8位。

1.2 段寄存器

    8086CPU有4个段寄存器:CS(代码段寄存器,Code Segment),DS(数据段寄存器,Data Segment),SS(堆栈段寄存器,Stack Segment),ES(

Extra Segment,附加段寄存器)。CPU访问内存单元时要给出内存单元的地址。所有的内存单元构成的存储空间是一个一维的线性空间。
 每一个内存单元在这个空间中都有唯一的地址,这个唯一的地址称为物理地址。段地址是指将内存分成一个一个段,要寻找内存物理地址用地址加法器采用 物理地址=段地址×16+偏移地址 ;当一个程序要执行时,就要决定程序代码、数据和堆栈各要用到内存的哪些位置,通过设定段寄存器 CS,DS,SS 来指向这些起始位置。通常是将DS固定,而根据需要修改CS。
  注意:
(1)CS存放指令的段地址,IP存放指令的偏移地址。8086机中,任意时刻,CPU将CS:IP指向的内容当作指令执行。
(2)段地址×16 必然是 16的倍数,所以一个段的起始地址也一定是16的倍数;
(3)偏移地址为16位,16 位地址的寻址能力为 64K,所以一个段的长度最大为64K。

1.3 8086CPU工作过程

(1)从CS:IP指向内存单元读取指令,读取的指令进入指令缓冲器;
(2)IP指向下一条指令;
(3)执行指令。(转到步骤(1),重复这个过程。)

抱歉!评论已关闭.