汇编语言 基于x86处理器 第二章

Posted seccold

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了汇编语言 基于x86处理器 第二章相关的知识,希望对你有一定的参考价值。

  X86中,所有数据存储的基本单位都是字节,一个字节(byte)有8位。一个字(word)两个字节,双字(doubleword)四个字节,四字(quadword)八个字节。

  执行一条机器指令最少需要1个时钟周期。由于在CPU、系统总线和内存电路之间存在速度差异,因此,需要访问内存的指令常常需要空时钟周期,也被称为等待状态。

 

程序执行周期:

一条机器指令需要经过一系列预先定义好的步骤,这些步骤被称为指令执行周期。

1)CPU从被称为指令队列的内存区域取得指令,之后立即增加指令指针的值。

2)CPU对指令的二进制位模式进行编码。这种位模式可能会表示该指令有操作数(输入值)。

3)如果有操作数,CPU就从寄存器和内存中取得操作数。有时,这步还包括了地址计算(找内存)

4)使用步骤3取得的操作数,CPU执行该指令。同时更新部分状态标志位,如零标志,进位标志和溢出标志。

5)如果目的操作数也是该指令的一部分,则CPU还需要存放其执行结果。

上诉操作简化为:取指令、编码、执行。

 

指令队列:(是打开OD看到那一列吧)

指令指针:EIP寄存器,指令指针增加,代表指向下一条指令

 

在计算机能直接执行的指令包括两部分:他们是操作码(指令)与操作数(数据)

没有操作数的情况:NOP指令

操作数:说明指令要使用的数据。有以下三种类型(三种意义)

立即数:操作数为一固定值,如0x42

寄存器:操作数指向寄存器,如ECX

内存地址:操作数指向内存地址,如[eax]

 

状态标志寄存器:

零标志:ZF; 进位标志:CF; 溢出标志:OF;

 

读取内存:

1)将想要读取的值的地址放到地址总线上。

2)设置处理器RD(读取)引脚(改变RD的值)

3)等待一个时钟周期给存储器芯片进行响应。

4)将数据从数据总线复制到目标操作数。

上诉每步常常只需要一个时钟周期。

 

加载并执行:

1)操作系统(OS)在当前磁盘目录下搜索程序文件名。找不到就去环境变量(Path)中找。再找不到就发出错误信息。

2)被找到后,OS访问该程序文件基本信息(PE文件头)。包括文件大小,以及在磁盘驱动器上的物理位置。

3)OS确定内存中下一个可使用的位置,将程序文件加载到内存。为该程序分配内存块,并将程序大小和位置信息加入表中(描述符表)。另外,OS可能调整程序内指针的值,使得它们包括程序数据地址(帮程序找数据)。

4)OS开始执行程序的第一条机器指令(程序入口)。当程序开始执行后,就成为一个进程。OS为这个进程分配一个标识号(进程PID),用于在执行期间对其进行追踪。

5)进程运行。OS的工作室追踪进程的执行,并响应系统资源的请求。这些资源包括内存、磁盘文件和输入输出设备等。

6)进程结束后,程序就会从内存中移除。

 

GDT全局描述符表:https://www.cnblogs.com/mlzrq/p/10223083.html

IDT 中断描述符表:https://www.cnblogs.com/yuqiao-ray-vision/p/3713506.html

 

 

操作模式:

保护模式

虚拟8086模式

实地址模式

系统管理模式

(用处暂且未明|挖坑)

 

基本执行环境:

地址空间

基本程序执行寄存器:

通用寄存器,段寄存器,指令指针EIPEFLAGS寄存器

 

典型X86计算机组件:

主板:

CPU插座,存储器插槽(SIMMDIMM),BiosCMOS RAMUSB接口,PCI总线接口, 主板芯片组

PCI总线为CPU和其他系统设备(外设,如显卡)提供了连接桥。

内存:

ROM,EPROM,DRAM,SRAM,VRAM,CMOS RAM.

输入输出:

应用程序 -> OS函数 -> BIOS函数 -> 硬件

 

 

 

 

 

 

 

翻译 朗读 复制 正在查询,请稍候…… 重试 朗读 复制 复制 朗读 复制 via 谷歌翻译(国内)

以上是关于汇编语言 基于x86处理器 第二章的主要内容,如果未能解决你的问题,请参考以下文章

《汇编语言 基于x86处理器》第十章结构和宏部分的代码

汇编语言:基于 X86 处理器第三章复习笔记

《汇编语言 基于x86处理器》第十三章高级语言接口部分的代码 part 1

《汇编语言 基于x86处理器》第九章字符串与数组部分的代码

《汇编语言 基于x86处理器》第十一章 MS-DOS 编程部分的代码 part 2

现代32位或64位x86汇编