汇编语言 基于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模式
实地址模式
系统管理模式
(用处暂且未明|挖坑)
基本执行环境:
地址空间
基本程序执行寄存器:
通用寄存器,段寄存器,指令指针EIP,EFLAGS寄存器
典型X86计算机组件:
主板:
CPU插座,存储器插槽(SIMM或DIMM),Bios,CMOS RAM,USB接口,PCI总线接口, 主板芯片组
PCI总线为CPU和其他系统设备(外设,如显卡)提供了连接桥。
内存:
ROM,EPROM,DRAM,SRAM,VRAM,CMOS RAM.
输入输出:
应用程序 -> OS函数 -> BIOS函数 -> 硬件
翻译 朗读 复制 正在查询,请稍候…… 重试 朗读 复制 复制 朗读 复制 via 谷歌翻译(国内) 译
以上是关于汇编语言 基于x86处理器 第二章的主要内容,如果未能解决你的问题,请参考以下文章
《汇编语言 基于x86处理器》第十三章高级语言接口部分的代码 part 1