`

汇编语言基础之寄存器

 
阅读更多

内存单元

无论计算机CPU的位数怎么变,从x86到现在的酷睿,CPU内部数据总线位宽在变大、寄存器的数量在增大、寄存器位数也在变大。但是对于内存的管理始终没有变化。计算机中用于存储的最小部件是一个二进制位(bit),一个bit能够存放两个数据,要么0要么1。在管理计算机存储空间的时候,将8个bit位分为一组,这就是计算机中的最小存储单元。称之1个字节(byte),一个字节的存储容量是2^8-1=255。1024(即2^10)个字节称之为1KB,接下来的M、G、T单位也就同理了。

8086CPU的寄存器都是16位的,后来的32位和64位CPU寄存器的位数与之前的CPU位数不一样,但是,就像8086CPU与上一代CPU寄存器兼容一样,32位和64位计算机的CPU为了向前兼容,按理来说,其内部一个32位的寄存器和64位寄存器应该可以分开当成2个16位的寄存器和4个16位的寄存器来使用。

不同的CPU,寄存器的个数、结构是不相同的,8086CPU中有14个寄存器。这14个寄存器的用途不尽相同,但是结构都一致:


这16位的二进制数据用相等的16进制来显示就成了四位数据了,所以,在查看计算机寄存器的时候,可以看到所有的寄存器值都是4位的:


其中AX、BX、CX、DX用于存放一般性数据,叫做通用寄存器。


物理地址的计算

cpu需要从内存中读取数据,就需要知道在内存中的实际物理地址。而8086cpu的地址总线有20条,而内部的寄存器只有16位,怎么用16位的寄存器来达到20条地址总线的寻址能力呢(20条数据总线的寻址能力是2^20=1M,但是16位寄存器实际能够表达的数据仅有2^16)?。8086cpu设计了两个寄存器来计算物理地址,即段寄存器和偏移地址寄存器(两种寄存器都分别有多个,如CS代码段和DS数据段),具体的计算方法是

物理地址=段地址X16+偏移地址

为什么要乘以16呢?乘以16何以能解决达到20位寻址能力的要求?解释是,往16位的段地址上乘以16,实际意义是往段地址后面增加了一个0,然后让IP加到低位。这里增加了一个0表示多了一位,多一位的16进制数据,即多了4位二进制位,从而达到了从16位表示能力增加到20位表示能力的目的。


代码段和代码段寄存器(CS)

其实在计算机中存放的都是二进制数据而已,这些数据的实际意义是根据实际情况附加上去的,你认为它是代码那他就是代码,你认为它是数据那它就是数据,代码和数据的本质是相同的。代码段寄存器(CS)中存放的地址说明,从这个地址开始(x16加上偏移地址后)的内容都是cpu将要执行的指令。

汇编语言中修改CS和IP的方法:jmp 段地址:偏移地址

从debug中可以通过-r CS和-r IP 来修改CS和IP


数据段和数据段寄存器(DS)

数据段的作用就不用多说了,但是DS的用法却需要注意一下,在读取数据段的内容的时候,需要先将DS的值设置好,然后通过如下的方式来访问数据段的内容:

mov ax,[0]

[...]表示一个内存单元,其中的0表示内存单元的偏移地址。这个偏移地址是在DS的基础上而言的。值得注意的是,这个地方往ax中传递的值是一个字类型(2字节,16位数据)而不是字节类型(8位数据)。


mov指令规则

内存单元、通用寄存器和段寄存器之间可以相互赋值,而数据只允许直接存放到通用寄存器中。


cpu提供了栈的机制共我们使用,栈顶的位置由SS:SP确定,8086cpu不保证栈地址越界,所以我们自己要时刻注意越界的问题。栈的使用时,可以将栈想象成一口井,井口的地址小,井底地地址大。在往井里倒水(入栈)的时候,井水水面上升(栈顶地址变小SP-=2);在从井里打水(出栈)时,井水水面下降(栈顶地址变大SP-=2)。其实,对于栈,cpu真的没有多实现什么,就像CS:IP一样,cpu可以根据这个地址来读取操作指令,cpu无非是在这个基础上增加了对SP的自动移动而已,理解了这个移动,就理解了栈的本质。



debug工具的使用

在32位机器上可以直接在命令行输入debug来启动debug工具,64位机器需要额外安装工具才能模拟debug工具。

-r查看和修改寄存器内容

直接输入一个-r可以查看寄存器情况,也可以输入-r 寄存器名称例如-r ax 来修改寄存器的值

-d 查看内存内容

该命令后面可以跟两个参数,一个参数是起始地址,该参数有两部分组成,用冒号分隔,例如1000:0;第二参数可以限定显示内存的单位数量,例如-d 1000:0 f,表示显示一行内存情况。

-u 查看内存数据对应的指令

-a 录入汇编指令到内存,这些内存可以通过-u命令查看

-e 直接修改内存内容

输入-e 和起始地址,输入要修改的值,按空格键跳到下一个内存单元,回车表示输入完毕



分享到:
评论

相关推荐

    汇编基础、计算机寄存器及软件破解.pdf

    汇编基础、计算机寄存器及软件破解.pdf

    零基础入门学习汇编语言视频课程27讲(小甲鱼主讲)

    教程名称:零基础入门学习汇编语言视频课程27讲(小甲鱼主讲)课程目录:【】0201零基础入门学习汇编语言第二章 寄存器(CPU工作原理)01【】0202零基础入门学习汇编语言第二章 寄存器(CPU工作原理)02【】0203零...

    汇编语言基础学习资料

     1.1 汇编语言的由来及其特点  1 机器语言  2 汇编语言  3 汇编程序  4 汇编语言的主要特点  5 汇编语言的使用领域  1.2 数据的表示和类型  1 数值数据的表示  2 非数值数据的表示  3 基本的数据类型 ...

    汇编语言教程-包括寄存器、指令、程序结构等

    汇编语言是一种低级语言,与...汇编语言的基础知识包括寄存器、指令、程序结构等。汇编语言的编程风格通常是面向过程的,程序结构清晰,执行效率高。汇编语言可以用于编写系统软件、驱动程序、嵌入式系统等方面的程序。

    asm 汇编语言基础知识

    实验一 DOS环境下的汇编语言编程环境使用(基础与验证型) 一、实验要求和目的 1、掌握汇编语言程序设计的基本方法和技能; 2、熟练掌握使用全屏幕编辑程序EDIT编辑汇编语言源程序; 3、熟练掌握宏汇编程序MASM的...

    IBM大型汇编语言基础

    汇编语言基础,初学者和进阶者都可以, 寄存器,EBCDIC码,数的表示和转换,书写格式

    汇编语言基础教程 汇编语言基础教程

     1.1 汇编语言的由来及其特点  1 机器语言  2 汇编语言  3 汇编程序  4 汇编语言的主要特点  5 汇编语言的使用领域  1.2 数据的表示和类型  1 数值数据的表示  2 非数值数据的表示  3 基本的数据类型 ...

    汇编语言_王爽(清晰)卷2

     1.2 汇编语言的产生   1.3 汇编语言的组成   1.4 存储器   1.5 指令和数据   1.6 存储单元   1.7 CPU对存储器的读写   1.8 地址总线   1.9 数据总线   1.10 控制总线   1.11 内存地址...

    编语言:计算机底层的奥秘解析汇编语言:计算机底层的奥秘解析汇编语言:计算机底层的奥秘解析

    本文将深入介绍汇编语言的基础概念、语法特点、应用场景以及对程序员的重要意义,带你一窥汇编语言的神秘之处。 一、汇编语言的基础概念 1. 定义:汇编语言是一种低级语言,它与计算机底层的机器指令直接相关。与...

    汇编语言基础知识问答

    现在学习32位汇编语言程序设计的人越来越多,但都刚进入这一领域,对汇编语言程序设计的基础了解甚少,学习总是不得其门而入,没有一点关于寄存器相关知识是绝对不行的,你们需要一些基础,需要这些基础,才能知道...

    《汇编语言程序设计》课件

    汇编语言程序设计 主 编 : 宋锦河 副主编 : 曾长军 李珍香  陈兴无 王泽生  主 审: 黄维通 《汇编语言程序设计》 第1章 基础知识 第2章 寻址方式和指令系统 第3章 宏汇编语言 第4章 程序设计方法 第5章 ...

    8086/8088汇编语言程序设计教程

    第一部分是基础部分,以8086/8088为背景,以DOS和PC兼容机为软硬件平台,以MASM和TASM为汇编器,介绍汇编语言的有关概念,讲解汇编语言程序设计技术。第二部分是提高部分,以80386为背景,以新一代微处理器Pentium为...

    汇编语言(第3版).王爽(带详细书签)

    汇编语言是很多相关课程(如数据结构、操作系统、微机原理等)的重要基础。为了更好地引导、帮助读者学习汇编语言,作者以循序渐进的思想精心创作了这本书。 《汇编语言(第3版)》具有如下特点:采用了全新的结构...

    汇编实验1熟悉汇编语言环境

    1.熟悉8088CPU内部的寄存器 2.学习和了解汇编语言源程序的编写方法 3.熟悉汇编语言的编译和链接方法 4.为后面章节程序调试奠定基础

    王爽著《汇编语言》课件及课后习题答案和实验解答

    汇编语言是很多相关课程(如:数据结构、操作系统、微机原理等)的重要基础。为了更好地引导、帮助读者学习汇编语言,作者以循序渐进的方式精心创作了这本书。本书具有如下特点:采用全新的结构对课程的内容进行了组织...

    80X86汇编语言程序设计

    第一部分是基础部分,以8086/8088为背景,以DOS和PC兼容机为软硬件平台,以MASM和TASM为汇编器,介绍汇编语言的有关概念,讲解汇编语言程序设计技术。第二部分是提高部分,以80386为背景,以新一代微处理器Pentium为...

    《汇编语言》王爽著

    汇编语言是直接在硬件之上工作的编程语言,首先要了解硬件系统的结构,才能有效的应用汇编语言对其编程。 在本章中,对硬件系统结构的问题进行一部分的探讨,以使后续的课程可在一个好的基础上进行。 机器语言是机器...

    《汇编语言》-第三版-王爽-以及课后答案

    1.2 汇编语言的产生 1.3 汇编语言的组成 1.4 存储器 1.5 指令和数据 1.6 存储单元 1.7 CPU对存储器的读写 1.8 地址总线 1.9 数据总线 1.10 控制总线 1.11 内存地址空间(概述) 1.12 主板 1.13 接口卡 1.14 各类...

    零基础入门学习CE汇编教程.chm

    汇编语言是面向机器的程序设计语言。本教程就是讲解汇编语言的相关知识。 为什么叫CE汇编?那是因为本教程所讲解的内容都或多或少的与游戏修改有关,与游戏修改没有任何关系的汇编知识一概不 讲解。 为什么又叫...

Global site tag (gtag.js) - Google Analytics