内存单元
无论计算机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 和起始地址,输入要修改的值,按空格键跳到下一个内存单元,回车表示输入完毕
分享到:
相关推荐
【汇编基础】汇编语言是计算机编程的基础之一,它直接与硬件交互,通过一系列指令进行操作。本文将深入探讨汇编中的寄存器和数据传送指令。 **寄存器详解** 1. **通用寄存器**:在x86架构的CPU中,通用寄存器包括8...
汇编基础、计算机寄存器及软件破解.pdf
汇编语言中的寄存器(Registers)是什么?请列举常见的CPU寄存器并简要介绍其功能。 什么是指令集架构(Instruction Set Architecture,ISA)?请说明指令集架构在汇编语言中的作用。 汇编语言中的数据存储方式有...
《汇编语言基础教程课件》是一套全面的教育资源,旨在帮助初学者系统地学习和掌握汇编语言的基础知识。汇编语言是计算机科学的重要组成部分,它是一种低级编程语言,与机器语言直接对应,是程序员与硬件进行交互的...
教程名称:零基础入门学习汇编语言视频课程27讲(小甲鱼主讲)课程目录:【】0201零基础入门学习汇编语言第二章 寄存器(CPU工作原理)01【】0202零基础入门学习汇编语言第二章 寄存器(CPU工作原理)02【】0203零...
一、汇编语言基础 1. 指令集:汇编语言的基础是计算机的指令集架构(ISA),每种处理器都有其独特的指令集。例如,Intel x86和ARM架构都有不同的汇编指令。 2. 寻址模式:汇编语言支持多种寻址方式,如立即寻址、...
以上是关于汇编语言中段寄存器和说明语句的基础知识点。掌握这些内容对于编写汇编语言程序至关重要,因为它们直接关系到程序如何访问和管理内存。在实际编程中,正确使用段寄存器和ASSUME语句能够帮助程序员有效地...
**汇编语言基础知识教程** 汇编语言是一种低级编程语言,它是计算机硬件可以直接理解的语言,与机器码直接对应。在本教程中,我们将深入探讨汇编语言的基础知识,旨在为初学者提供一个易于理解的学习路径。 ### ...
1. **基础知识**:了解汇编语言的基本结构,包括指令集、寄存器、地址模式和操作码等。汇编语言的指令通常由操作码和操作数组成,其中操作码表示要执行的操作,操作数则指定参与运算的数据。 2. **CPU架构**:理解...
在8086汇编语言编程中,理解这些寄存器的作用和用法是基础,它们可以提高程序的效率并实现复杂逻辑。例如,使用AX和BX进行乘法运算,使用CX进行循环计数,利用DI和SI进行字符串处理,以及通过修改FLAGS寄存器的标志...
了解汇编语言的基础知识非常重要,包括寄存器、立即数、操作数、内存单元操作数和间接寻址方式等。只有了解这些基础知识,我们才能更好地编写汇编程序,并且更好地理解Linux下的汇编语言。 在Linux下的汇编语言中,...
总的来说,《IBM大型汇编语言基础》会引导你逐步进入这个充满挑战和机遇的世界,从基础的寄存器使用、EBCDIC码的理解,到数的表示和转换,再到规范的汇编语言书写格式,每一个环节都将为你的编程技能添砖加瓦。...
"32位 80x86 汇编语言基础"的课程可能涵盖了以上所述的基本概念、指令系统、程序设计技巧等内容,并可能提供相关的练习和实例,帮助学习者掌握80x86汇编语言。课件和附件中的"software"可能包括模拟器、汇编器、调试...
《汇编语言基础step by step》是一本针对计算机硬件爱好者和初学者的教程,旨在深入浅出地介绍汇编语言的基础知识。汇编语言是计算机科学中的重要一环,它是低级编程语言的一种,直接对应于机器指令集,每一个汇编...
6. 寄存器操作指令:如MOV,用于在寄存器之间或者寄存器与内存之间移动数据,这是汇编语言中最常见的指令之一。 7. 处理器状态和控制指令:如PUSH和POP用于栈操作,压入和弹出寄存器或内存中的值;TEST指令用于无副...
汇编语言,作为计算机科学的基础,是与机器硬件直接交互的语言。它以其高效、直接控制硬件的特性,在系统编程、设备驱动、嵌入式系统等领域扮演着重要角色。《汇编语言程序设计》这门课程的目标是帮助学生理解和掌握...
汇编语言的基础语法是程序员使用的一系列符号和指令,这些指令在经过汇编器处理后会被转化为机器可以直接执行的二进制代码。这种语言虽然直接与硬件交互,但它并不像机器语言那样难以理解和编写,因为汇编语言使用了...
### 汇编语言基础 汇编语言是由一系列机器指令的助记符组成,每个助记符对应一个或多个二进制编码的机器指令。这种语言相对于高级语言而言,更接近于硬件,能够实现对硬件的直接控制,因此在性能优化和资源管理方面...
标题中的“汇编语言读寄存器内容的源代码”是指使用汇编语言编写的一段程序,该程序能够读取CPU寄存器的值,并将其转换为ASCII码形式存储或输出。描述中提到的环境是WINXP操作系统下,使用MASM5.0汇编器进行编译,...
### 汇编语言基础教学知识点详述 #### 一、预备知识与基本概念 **1.1 机器语言和汇编语言** - **机器语言**:计算机硬件能直接识别和执行的语言,由一系列二进制编码组成。它是计算机硬件层面的语言,与具体的...