读书写笔记-王爽《汇编语言》

原创 2006年05月18日 00:38:00

第2章 寄存器(CPU工作原理)

2.1 通用寄存器
    8086CPU的所有寄存器都是16位,可以存放两个字节。AX、BX、CX、DX四个寄存器通常用来存放一般性的数据,被称为通用寄存器。
    一个16位寄存器可以存储一个16位的数据。
    那么一个16位寄存器所能存储的数据的最大值为多少呢?
    8086CPU的上一代CPU中的寄存器都是8位的,为了保证兼容,使原来基于上代CPU编写的程序稍加修改就可以运行在8086之上,8086CPU的AX、BX、CX、DX四个寄存器都可分为两个可独立使用的8位寄存器来使用:
    AX可分为AH和AL;
    BX可分为BH和BL;
    CX可分为CH和CL;
    DX可分为DH和DL;

2.3 汇编指令
    汇编指令举例:
        mov ax,18  将18送入寄存器AX                            AX=18
        mov ah,78  将78送入积存器AH                            AH=78
        add ax,8   将寄存器AX中的数值加上8                     AX=AX+8
        mov ax,bx  将寄存器BX中的数据送入寄存器AX              AX=BX
        add ax,bx  将AX和BX中的数值相加,结果存在AX中          AX=AX+BX

     在写一条汇编指令或一个寄存器的名称时不区分大小写,如:mov ax,18和MOV AX,18的含义相同;bx和BX的含义相同。

     注意:如果单独把AH和AL做为两个独立的8位寄存器来用,那么它们两个就是两个不相关的寄存器,不要错误的认为,诸如add al,93H的指令产生的进位会存储在ah中,add al,93H进行的是8位运算。
如果执行add ax,93H,低8位的进位会存储在ah中,CPU在执行这条指令时认为只有一个16位寄存器ax,进行的16位运算。指令add ax,93H执行后,ax中的值为:0158H。此时,使用的寄存器是16位寄存器ax,add ax,93H相当于将ax中的16位数据00c5H和另一个16位数据009CH相加,结果是16位的0158H。

    在进行数据传送或运算时,要注意指令的两个操作对象的位数应当是一致的,例如:
    mov ax,bx
    mov bx,cx
    mov ax,18H
    mov al,18H
    add ax,bx
    add ax,20000
    等都是正确的指令,而
    mov ax,bl      (在8位寄存器和16位寄存器之间传送数据)
    mov bh,ax      (在16位寄存器和8位寄存器之间传送数据)
    mov al,20000   (8位寄存器最大可存放值为255的数据)
    add al,100H    (将一个高于8位的数据加到一个8位寄存器中)
    等都是错误的指令,错误的原因都是指令的两个操作对象的位数不一致。


    在8086CPU加电启动或复位后(即CPU刚开始工作时)CS和IP被设置为CS=F000H,IP=FFFFH,即在8086PC机刚启动时,CPU从内存FFFF0H单元中读取指令执行,FFFFOH单元中的指令是8086PC机开机后执行的第一条指令。

    现在,我们更清楚了CS和IP的重要性,它们的内容提供了CPU要执行指令的地址。

    mov指令不能用于设置CS、IP的值,原因很简单,因为8086CPU没有提供这样的功能。8086CPU为CS、IP提供了另外的指令来改变它们的值。能够改变CS、IP的内容的指令被统称为转移指令。
    我们现在介绍一个最简单的可以修改CS、IP的指令:jmp指令。
    若想同时修改CS、IP的内容,可用指令“jmp 段地址: 偏移地址”完成,如:
    jmp 2AE3:3,执行后:CS=2AE3H,IP=0003H,CPU将从2AE33H处读取指令。
    jmp 3:0B16,执行后:CS=0003H,IP=0B16H,CPU将从00B46H处读取指令。

    若想仅修改IP的内容,可用指令“jmp 某一合法寄存器”完成,如:
    jmp ax,指令执行前:ax=1000H,CS=2000H,IP=0003H
           指令执行后:ax=1000H,CS=2000H,IP=1000H
    指令“jmp 某一合法寄存器”的功能为:用寄存器中的值修改IP。

    jmp ax,在含义上类似于mov IP,ax这样的指令。

    CPU只认被CS:IP指向的内存单元中的内容为指令,所以,要让CPU执行我们放在代码段中的指令,必须要将CS:IP指向所定义的代码段中的第一条指令的首地址。

    对于上面的例子,我们将一段代码存放在123BOH-123BAH内存单元中,将其定义为代码段,如果要让这段代码得到执行,可设CS=123BH,IP=0000H。

    段地址在8086CPU的段寄存器中存放。当8086CPU要访问地址时,由段寄存器提供内存单元的段地址。8086CPU有4个段寄存器,其中CS用来存放指令的段地址。

    CS存放指令的段地址,IP存放指令的偏移地址。
    8086机中,任意时刻,CPU将CS:IP指向的内容当作指令执行。

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

   查看CPU和内存,用机器指令和汇编指令编程
   1:预备知识:Debug的使用
      (1)什么是Debug?
           Debug是DOS,Windows都提供的实模式(8086方式)程序的调试工具,使用它,可以查看    CPU各种寄存器中的内容、内存的情况和在机器码级别跟踪程序的运行。
      (2)我们用到的Debug功能
           用Debug的R命令查看、改变CPU寄存器的内容;
           用Debug的D命令查看内存中的内容;
    用Debug的E命令改写内存中的内容;
     用Debug的U命令将内容中的机器指令翻译成汇编指令;
           用Debug的T命令执行一条机器指令;
    用Debug的A命令以汇编指令的格式在内存中写入一条机器指令;
      (3)进入Debug
           Debug是在DOS方式下使用的程序。我们进入Debug前,应先进入到DOS方式,用以下方式可    以进入DOS:
    1:重新启动计算机,进入DOS方式,此时进入的是实模式的DOS;
           2:在Windows中进入DOS方式,此时进入的是虚拟8086模式的DOS;

    下面说明在Windos2000中进入Debug的一种方法,在Windows98中进入的方法与此类似。
            开始-运行-输入command
            进入DOS方式后,如果显示为窗口方式,可以按下Alt+Enter键将窗口变成全屏方式,然后             运行Debug程序。
            具体使用方法看P46。   

相关文章推荐

《汇编语言》-王爽-第三版-读书笔记-前言

重新开始学习汇编语言,也是重新梳理编程的开始。以后要循序渐进,不能急功近利,走稳每一步。此博客为第一天学习汇编语言的前言的读书笔记。...

王爽《汇编语言》(第二版) 学习笔记 (第十七章 使用BIOS进行键盘输入和磁盘读写)

 第十七章使用BIOS进行键盘输入和磁盘读写本章概述:1.         大多数有用的程序都需要处理用户的输入,键盘输入是最基本的输入。2.         程序和数据通常需要长期存储,磁盘是最常用...
  • lr2131
  • lr2131
  • 2011年05月02日 21:36
  • 1818

<学习笔记>王爽汇编语言__更加灵活的定位内存地址的方法

在之前的文章中,我们用[0],[bx]的方法定位内存单元的地址,我们现在将用一些具体问题来复习一些更灵活的定位地址内存的方法和相关的编程方法。   and和or指令: (1)and指令,逻辑与指...
  • aksnzhy
  • aksnzhy
  • 2011年09月14日 11:17
  • 1465

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

最近在学习赵炯老师的《Linux 0.11内核完全

读王爽老师汇编语言笔记---寄存器(内存访问)

2013-6-22 10:22:23 cpu中用16位寄存器来存储一个字,高8位存放高位字节,低8位存放低位字节,在内存中存储时,由于内 存单元是字节单元(一个单元存放一个字节),则一...

读王爽老师汇编语言笔记---基础知识

2013-6-18 20:46:29 cpu在工作的时候,把有的信息看着指令,把有的信息看着数据,为同样的信息赋予不同的意义.    存储器被划分为若干个存储单元,每个存储单元从0开始编号...

<学习笔记>王爽汇编语言__再论寄存器

在上篇文章中,我们主要从CPU的角度复习了8086CPU的逻辑结构,形成物理地址的方法和相关的一些寄存器。这篇文章我们一内存访问的角度来继续学习几个寄存器。 内存中字的存储: CPU中,用...
  • aksnzhy
  • aksnzhy
  • 2011年09月12日 18:15
  • 1367

王爽《汇编语言》(第二版) 学习笔记 (第十章 CALL和RET指令 )

 第十章 CALL和RET指令本章概述:call和ret指令都是转移指令,它们都修改IP,或同时修改CS和IP。它们经常被共同用来实现子程序的设计。一、             ret和retf1. ...
  • lr2131
  • lr2131
  • 2011年04月26日 19:53
  • 764

王爽《汇编语言》(第二版) 学习笔记 (第八章 数据处理的两个基本问题 )

第八章数据处理的两个基本问题本章概述:1.         计算机是进行数据处理、运算的机器,那么有两个基本的问题就包含在其中:1)  处理的数据在什么地方?2)  要处理的数据有多长?这两个问题,在...
  • lr2131
  • lr2131
  • 2011年04月20日 22:30
  • 1029

王爽《汇编语言》(第二版) 学习笔记 (第九章 转移指令的原理 )

第九章 转移指令的原理本章概述:1.         可以修改IP,或同时修改CS和IP的指令统称为转移指令。概括地讲,转移指令就是可以控制CPU执行内存中某处代码的指令。2.         808...
  • lr2131
  • lr2131
  • 2011年04月20日 22:37
  • 809
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:读书写笔记-王爽《汇编语言》
举报原因:
原因补充:

(最多只允许输入30个字)