二、微处理器
AMD和Inter兼容,在程序员看来没有区别。
Pentium II III IV都是准64位的处理器。“准”是因为其外部总线64,地址总线32。一次内存总线操作可以存取8字节的数据,但内部寄存器和运算操作仍然是32位。
CPU结构上分成两部分,BIU(Bus Interface Unit)和EU(Execution Unit)
程序提供的数据、希望执行的指令通过BIU送到EU里执行,所以在BIU里肯定有个排队问题。排队的指令靠指令指针IP指明,排队的数据放到段寄存器(CS、DS、ES、SS)中。指令的物理地址是IP(偏移)和段寄存器CS内容相加的结果。16 + 16形成20位的物理地址。因为有加法,所以BIU中还有地址加法器。
EU当然是执行和计算结果的了。所以肯定有算术/逻辑运算单元ALU。运算以后还是会有结果数据,BIU送过来的数据也要有地方保存,所以还是需要有寄存器,也就是通用寄存器。
还需要明确一遍的是,IP总是指向下一条待执行的指令。(题外话,缓冲器溢出很重要啊)
详细说说寄存器:
BIU中的段寄存器CS、DS、ES、SS,(可以这样想,他们和内存打交道,内存分段,所以叫段寄存器)
CS-代码段,用来找程序的指令序列。
DS-数据段
SS-堆栈段
ES-附加数据段
段寄存器中的数据指明了该段在内存中的起始地址。
比如CS,知道了指令序列的起点,当然还需要知道序列怎么排啊,所以用IP指明偏移。
IP,指令指针,指明某条指令在CS中的位置。程序运行时,IP的内容由CPU自动调整。
进到EU中,首先看到几个数据寄存器(可以这么想,他们和CPU处理的数据打交道,所以叫数据寄存器)
AX、BX、CX、DX
BIU送数据(专业点叫操作数)进到这里面来,EU执行的结果也送这里面来,然后再送出去。
四个寄存器各有专用。
AX,累加,使用频度最高,与外面交换数据,算术和逻辑运算它都参加。
BX,基址寄存器,存放存储器的地址。BIU如果送进来存储器的地址,它当然要参加。
CX,计数器。指令是循环或者串操作的话,它就参加。
DX,数据寄存器,存放外设端口地址,或者双字数据的高16位。
这四个寄存器都是16位,也可以分开用,表示成AH、AL。类似等等。
EU中还有堆栈指针寄存器SP,用于存放当前堆栈段中栈顶的偏移。
还有另一个基址寄存器BP。用来保存操作数或者运算结果。或者某存储单元的偏移,多用于对堆栈段中数据的非顺序存取。
变址寄存器SI,DI。SI是源变址寄存器,DI是目标变址寄存器。用来保存操作数或者运算结果。或者存放某存储单元的偏移地址。如果是数据块操作,则SI是源地址,DI是目标地址。
标志寄存器Flags。很重要的寄存器,表示CPU的状态及运算结果的特征。16位中共9个标志位。
什么是运算结果的特征呢?比如运算出现了溢出、运算结果是0、运算需要进位等等。
CPU状态又是什么呢?比如CPU是否允许中断等等。
具体说说:
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
OF DF IF TF SF ZF AF PF CF
AF:辅助进位,字节的低4位向高4位进位,字的低字节向高字节进位等等。
CF:结果的最高位有进位。
OF:结果溢出
SF:符号标志,和结构的最高位保持相同。1表示结果是负数。
PF:奇偶标志,结果中低8位1的个数是奇是偶
ZF:0标准,结果是0
DF:方向标志,对字符串操作指令有效,为0,则操作自动增址,为1则自动减址。
IF:中断允许
TF:单步标志,CPU进不进单步执行方式。
和内存打交道,需要对存储器分段
存储器越来越大,因此引入分段手段。分段以后,就在物理地址之外出现了逻辑地址。逻辑地址表示成段的开始地址加上偏移。也就是“段首址:偏移”。
如果划分段的标准不同,就会出现同一个物理地址有多个逻辑地址。
和外部设备打交道,需要使用I/O的地址空间
每个外部设备的接口中都有寄存器和端口地址,这是打交道的桥梁。CPU有专门读写I/O的指令,称为I/O指令。I/O地址从0000H~FFFFH,不需要分段。
CPU三种工作模式:
实模式、保护模式和虚拟86模式。
计算机启动时运行在实模式下。所有指令工作在特权级0。
保护模式是主要模式,提供Windows 32位程序运行。提供多任务、内存分段分页和特权级管理和虚拟内存的使用。
为了保持原DOS 16程序,提供虚拟模式。
Windows下的Pagefile.sys3是虚拟内存的交换文件。
Windows将内存空间分成两部分,用户地址空间和系统地址空间。
用户地址空间中,“堆”是一个很大的内存空间,可以用malloc和free从堆中分配和释放内存空间。
有四个特权级,0~3,0最高。
Windows只使用0和3。
CS段的最低两位表示当前运行程序的特权级。0级为0x0008,3级为0x0023
分享到:
相关推荐
**标题:“win32汇编笔记精华”** **概述:** 在计算机科学的世界里,汇编语言是一种低级编程语言,它与机器语言密切相关,直接对应于计算机硬件的指令集。Win32汇编,顾名思义,是应用于Windows 32位操作系统的...
【汇编语言学习整理笔记】 汇编语言,作为计算机科学的基础,是计算机系统与程序员之间的桥梁,它是一种低级编程语言,直接对应机器指令。在Windows环境下,特别是win32平台,汇编语言的应用主要集中在系统级编程、...
### 达内2013年Win32编程课堂笔记概览 #### 一、编译与连接过程 在Windows编程环境下,特别是针对Win32应用程序开发时,开发者需要了解编译器和连接器的工作原理。编译过程是将源代码(.c或.cpp文件)转换成汇编...
【标题】中的“一个迷你的com通讯程序,是用win32asm写的 功能全面.zip”揭示...总的来说,这款程序是一个深入学习Win32汇编语言和COM通信技术的宝贵资源,对于想要提升底层编程技能的开发者来说,具有很高的学习价值。
9. **内核.txt**:这部分可能涉及操作系统内核的汇编编程,比如设备驱动、中断处理、内存管理等,是高级汇编学习者探索的领域。 10. **oop.txt**:虽然汇编语言通常不用于实现面向对象编程,但这个文件可能探讨了...
标题中的“wav.zip_wav”表明这是一个包含与WAV...这个压缩包可能包含了一个示例程序或源代码,演示了如何用Win32汇编实现键盘模拟和播放WAV音频,对于学习汇编语言和Windows编程的初学者来说,这样的资源非常有价值。
VC++6.0虽然是一款较老的开发工具,但它支持创建Windows驱动程序,特别是早期的Win32驱动。开发者需要了解如何配置项目设置,选择正确的工程模板,并使用特定的编译器选项来构建驱动程序。 在游戏开发领域,驱动...
API Hook基本原理和实现.doc Delphi 消息机制学习笔记.doc Delphi编写Ping程序.doc Win32调试API学习心得.doc 簡單的Windows API示例.doc 数字信号处理器.pdf 处理器的结构.doc 汇编语言...
描述中提到“win32汇编编写”表示这款应用是使用Win32 API(应用程序接口)和汇编语言编写的。汇编语言是一种低级编程语言,程序员可以直接控制硬件的功能,因此用汇编编写的程序往往更高效,但编写难度也相对较大。...
[Trial version] Win32调试API学习心得(二).htm [Trial version] win32调试API学习心得(三).htm [Trial version] 用调试函数跟踪API.htm [Trial version] 3.2 利用调试API编写脱壳机 [Trial version] DEF分析与...
以上就是从《国嵌笔记》中提炼出来的知识点,涵盖了嵌入式系统开发的基础和进阶内容,涉及网络服务配置、交叉编译工具链安装、ARM架构编程、Bootloader设计等多个方面,为学习者提供了全面深入的学习资料。
### WinAVR与AvrX开发笔记概览 #### 一、WinAVR简介与安装 **WinAVR**是一款广泛应用于AVR单片机开发的工具包,它集成了GCC编译器、汇编器以及其他必要的开发工具,使得开发者能够在Windows环境下轻松地进行AVR...
在Windows系统中,通常使用WinUSB、USB HID类驱动或自定义USB设备驱动进行编程。USB编程需要理解USB协议栈、设备类规范以及相关的API调用。 2. **CH9328**:CH9328是一款USB到串行接口控制器,由中芯国际集成电路...
第二部分 多种平台上的破解:Windows, Solaris, and Tru64 第三部分 漏洞发现 第四部分 高级内容 很多人问如何入门如何入门,我却不知道要问的是入什么门。很少把某些好文章耐心从头看完,我这次就深有体会。比如袁...