`
helloyesyes
  • 浏览: 1304064 次
  • 性别: Icon_minigender_2
  • 来自: 武汉
文章分类
社区版块
存档分类
最新评论

Win32汇编学习笔记(二)

阅读更多

二、微处理器

AMDInter兼容,在程序员看来没有区别。

Pentium II III IV都是准64位的处理器。“准”是因为其外部总线64,地址总线32。一次内存总线操作可以存取8字节的数据,但内部寄存器和运算操作仍然是32位。

CPU结构上分成两部分,BIUBus Interface Unit)和EUExecution Unit

程序提供的数据、希望执行的指令通过BIU送到EU里执行,所以在BIU里肯定有个排队问题。排队的指令靠指令指针IP指明,排队的数据放到段寄存器(CSDSESSS)中。指令的物理地址是IP(偏移)和段寄存器CS内容相加的结果。16 16形成20位的物理地址。因为有加法,所以BIU中还有地址加法器。

EU当然是执行和计算结果的了。所以肯定有算术/逻辑运算单元ALU。运算以后还是会有结果数据,BIU送过来的数据也要有地方保存,所以还是需要有寄存器,也就是通用寄存器。

还需要明确一遍的是,IP总是指向下一条待执行的指令。(题外话,缓冲器溢出很重要啊)

详细说说寄存器:

BIU中的段寄存器CSDSESSS,(可以这样想,他们和内存打交道,内存分段,所以叫段寄存器)

CS-代码段,用来找程序的指令序列。

DS-数据段

SS-堆栈段

ES-附加数据段

段寄存器中的数据指明了该段在内存中的起始地址。

比如CS,知道了指令序列的起点,当然还需要知道序列怎么排啊,所以用IP指明偏移。

IP,指令指针,指明某条指令在CS中的位置。程序运行时,IP的内容由CPU自动调整。

进到EU中,首先看到几个数据寄存器(可以这么想,他们和CPU处理的数据打交道,所以叫数据寄存器)

AXBXCXDX

BIU送数据(专业点叫操作数)进到这里面来,EU执行的结果也送这里面来,然后再送出去。

四个寄存器各有专用。

AX,累加,使用频度最高,与外面交换数据,算术和逻辑运算它都参加。

BX,基址寄存器,存放存储器的地址。BIU如果送进来存储器的地址,它当然要参加。

CX,计数器。指令是循环或者串操作的话,它就参加。

DX,数据寄存器,存放外设端口地址,或者双字数据的高16位。

这四个寄存器都是16位,也可以分开用,表示成AHAL。类似等等。

EU中还有堆栈指针寄存器SP,用于存放当前堆栈段中栈顶的偏移。

还有另一个基址寄存器BP。用来保存操作数或者运算结果。或者某存储单元的偏移,多用于对堆栈段中数据的非顺序存取。

变址寄存器SIDISI是源变址寄存器,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:奇偶标志,结果中低81的个数是奇是偶

ZF0标准,结果是0

DF:方向标志,对字符串操作指令有效,为0,则操作自动增址,为1则自动减址。

IF:中断允许

TF:单步标志,CPU进不进单步执行方式。

和内存打交道,需要对存储器分段

存储器越来越大,因此引入分段手段。分段以后,就在物理地址之外出现了逻辑地址。逻辑地址表示成段的开始地址加上偏移。也就是“段首址:偏移”。

如果划分段的标准不同,就会出现同一个物理地址有多个逻辑地址。

和外部设备打交道,需要使用I/O的地址空间

每个外部设备的接口中都有寄存器和端口地址,这是打交道的桥梁。CPU有专门读写I/O的指令,称为I/O指令。I/O地址从0000HFFFFH,不需要分段。

CPU三种工作模式:

实模式、保护模式和虚拟86模式。

计算机启动时运行在实模式下。所有指令工作在特权级0

保护模式是主要模式,提供Windows 32位程序运行。提供多任务、内存分段分页和特权级管理和虚拟内存的使用。

为了保持原DOS 16程序,提供虚拟模式。

Windows下的Pagefile.sys3是虚拟内存的交换文件。

Windows将内存空间分成两部分,用户地址空间和系统地址空间。

用户地址空间中,“堆”是一个很大的内存空间,可以用mallocfree从堆中分配和释放内存空间。

有四个特权级,030最高。

Windows只使用03

CS段的最低两位表示当前运行程序的特权级。0级为0x00083级为0x0023

分享到:
评论

相关推荐

    win32 汇编笔记精华

    **标题:“win32汇编笔记精华”** **概述:** 在计算机科学的世界里,汇编语言是一种低级编程语言,它与机器语言密切相关,直接对应于计算机硬件的指令集。Win32汇编,顾名思义,是应用于Windows 32位操作系统的...

    我的关于汇编语言学习整理笔记

    【汇编语言学习整理笔记】 汇编语言,作为计算机科学的基础,是计算机系统与程序员之间的桥梁,它是一种低级编程语言,直接对应机器指令。在Windows环境下,特别是win32平台,汇编语言的应用主要集中在系统级编程、...

    达内2013年win32编程课堂笔记

    ### 达内2013年Win32编程课堂笔记概览 #### 一、编译与连接过程 在Windows编程环境下,特别是针对Win32应用程序开发时,开发者需要了解编译器和连接器的工作原理。编译过程是将源代码(.c或.cpp文件)转换成汇编...

    一个迷你的com通讯程序,是用win32asm写的 功能全面.zip

    【标题】中的“一个迷你的com通讯程序,是用win32asm写的 功能全面.zip”揭示...总的来说,这款程序是一个深入学习Win32汇编语言和COM通信技术的宝贵资源,对于想要提升底层编程技能的开发者来说,具有很高的学习价值。

    汇编语言教程大全(史上最全).zip

    9. **内核.txt**:这部分可能涉及操作系统内核的汇编编程,比如设备驱动、中断处理、内存管理等,是高级汇编学习者探索的领域。 10. **oop.txt**:虽然汇编语言通常不用于实现面向对象编程,但这个文件可能探讨了...

    wav.zip_wav

    标题中的“wav.zip_wav”表明这是一个包含与WAV...这个压缩包可能包含了一个示例程序或源代码,演示了如何用Win32汇编实现键盘模拟和播放WAV音频,对于学习汇编语言和Windows编程的初学者来说,这样的资源非常有价值。

    驱动学习笔记

    VC++6.0虽然是一款较老的开发工具,但它支持创建Windows驱动程序,特别是早期的Win32驱动。开发者需要了解如何配置项目设置,选择正确的工程模板,并使用特定的编译器选项来构建驱动程序。 在游戏开发领域,驱动...

    双旗的Windows编程学习资料包.rar

    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开发笔记(Namey_Niu).pdf

    ### WinAVR与AvrX开发笔记概览 #### 一、WinAVR简介与安装 **WinAVR**是一款广泛应用于AVR单片机开发的工具包,它集成了GCC编译器、汇编器以及其他必要的开发工具,使得开发者能够在Windows环境下轻松地进行AVR...

    USBGL20200709_USB编程_CH9328_ch9328通信协议_ch9328键盘_USB键盘_源码.zip

    在Windows系统中,通常使用WinUSB、USB HID类驱动或自定义USB设备驱动进行编程。USB编程需要理解USB协议栈、设备类规范以及相关的API调用。 2. **CH9328**:CH9328是一款USB到串行接口控制器,由中芯国际集成电路...

    Shellcoder’s Handbook: Discovering and exploiting Security Holes---中文CHM

    第二部分 多种平台上的破解:Windows, Solaris, and Tru64 第三部分 漏洞发现 第四部分 高级内容 很多人问如何入门如何入门,我却不知道要问的是入什么门。很少把某些好文章耐心从头看完,我这次就深有体会。比如袁...

Global site tag (gtag.js) - Google Analytics