第1章汇编语言基础1.1英特尔80x86处理器1.2个人计算机系统1.3汇编语言程序格式第1章汇编语言基础了解软硬件开发环境熟悉通用寄存器和存储器组织掌握汇编语言的语句格式、程序框架和开发方法第1章汇编语言基础3Intel80861.1英特尔80x86处理器8038680486奔腾奔腾II奔腾4802868086奔腾III酷睿多核系列4004IA-32处理器16位80x86处理器奔腾多核系列Intel64处理器第1章汇编语言基础41.1.116位80x86处理器•16位结构处理器•8086/8088指令系统提供16位基本指令集•80186/80188增加若干条实用指令•8086的工作方式是实方式(RealMode)•80286增加保护方式(ProtectedMode)•80286引入了系统指令为操作系统等核心程序提供处理器控制功能指令系统、指令集(InstructionSet)第1章汇编语言基础51.1.2IA-32处理器•80386引入英特尔32位指令集结构ISA兼容原16位80286指令系统全面升级为32位提供虚拟8086工作方式(Virtual8086Mode)•80486集成浮点处理单元支持浮点指令•Pentium系列陆续增加若干整数指令、完善浮点指令增加一系列多媒体指令(SIMD指令)IA-32(IntelArchitecture-32)第1章汇编语言基础61.1.3Intel64处理器•引入64位英特尔指令集结构兼容32位指令系统新增64位工作方式•继续丰富多媒体指令•处理器集成多核(Multi-core)技术处理器进入多核时代Manycore第1章汇编语言基础71.2个人计算机系统•硬件(Hardware):物理设备•软件(Software):程序和文档运算器控制器寄存器组主存储器总线输入输出接口电路外部设备软件微处理器微型计算机微型计算机系统第1章汇编语言基础81.2.1硬件组成I/O接口主存储器系统总线CPU寄存器控制器运算器辅助存储器输入设备输出设备汇编语言程序员将硬件抽象为:寄存器、存储器地址和输入输出地址第1章汇编语言基础91.2.2寄存器(Register)•处理器内部的高速存储单元•用于暂时存放程序执行过程中的代码和数据•透明寄存器对应用人员不可见、不能编程直接控制•可编程(Programmable)寄存器具有引用名称、供编程使用通用寄存器(General-PurposeRegister)具有多种用途数量较多、使用频度较高专用寄存器各自只用于特定目的第1章汇编语言基础10IA-32常用寄存器8个32位通用寄存器6个16位段寄存器1个32位标志寄存器1个32位指令指针第1章汇编语言基础111.通用寄存器•处理器最常使用的整数通用寄存器•可用于保存整数数据、地址等•8个32位通用寄存器EAX,EBX,ECX,EDXESI,EDI,EBP,ESP•8个16位通用寄存器AX,BX,CX,DXSI,DI,BP,SP•8个8位通用寄存器AH,BH,CH,DHAL,BL,CL,DL31871615AHAL0AXEAX既是一个整体又可独立使用第1章汇编语言基础12通用寄存器的名称EAXAccumulator累加器EBXBase基址寄存器ECXCounter计数器EDXData数据寄存器ESISourceIndex源变址寄存器EDIDestinationIndex目的变址寄存器EBPBasePointer基址指针ESPStackPointer堆栈指针第1章汇编语言基础132.标志寄存器•标志(Flag)反映指令执行结果或控制指令执行形式用一个或多个二进制位表示一种标志用0和1的不同组合表达标志的不同状态•8086支持16位标志寄存器FLAGS•IA-32处理器形成32位EFLAGS标志寄存器状态标志:记录指令执行结果的辅助信息控制标志:方向标志DF,仅用于串操作指令系统标志:控制操作系统或核心管理程序的操作方式示意图第1章汇编语言基础15处理器最基本的标志:状态标志•用来记录指令执行结果的辅助信息•加减运算和逻辑运算指令主要设置它们•其他有些指令的执行也会相应地设置它们•处理器主要使用其中5个构成各种条件,分支指令判断这些条件实现程序分支8086的标志OF111512DF10IF9TF8SF7ZF605AF403PF211CF0第1章汇编语言基础163.指令指针寄存器EIP•保存将要执行的指令在主存的存储器地址•EIP是专用寄存器顺序执行时自动增量(加上该指令的字节数),指向下一条指令分支、调用等操作时执行控制转移指令修改,引起程序转移到指定的指令执行出现中断或异常时被处理器赋值而相应改变311615IP0EIP第1章汇编语言基础174.段寄存器•段(Segment)是用于安排相关代码或数据的一个主存区域•段寄存器表明某个段在主存中的位置•6个16位段寄存器:CSDSSSESFSGS•应用程序主要涉及3类段代码段(CodeSegment)存放程序中指令代码数据段(DataSegment)存放当前运行程序所用数据堆栈段(StackSegment)指明程序使用的堆栈区域主存空间指令段数据段堆栈段程序第1章汇编语言基础181.2.3存储器组织•主存储器容量很大,被划分成许多存储单元•每个存储单元被编排一个号码即存储单元地址称为存储器地址(MemoryAddress)•每个存储单元以字节为基本存储单位即字节编址(ByteAddressable)一个字节(Byte)等于8个二进制位(Bit)二进制位是计算机存储信息的最小单位16位(2个字节)构成一个字(Word)32位(4个字节)构成一个双字(DoubleWord)示意图第1章汇编语言基础201.存储模型•物理存储器以字节为基本存储单位•每个存储单元被分配一个唯一的地址•这个地址就是物理地址•物理地址空间从0开始顺序编排,直到处理器支持的最大存储单元8086处理器支持1MB存储器:00000H~FFFFFHIA-32处理器支持4GB存储器:00000000H~FFFFFFFFH•操作系统利用存储管理单元进行存储管理,程序并不直接寻址物理存储器•IA-32处理器提供3种存储模型,用于程序访问存储器示意图第1章汇编语言基础22IA-32处理器的存储模型(1)平展存储模型(FlatMemoryModel)存储器是一个连续的地址空间:线性地址空间IA-32处理器支持4GB容量线性地址空间(2)段式存储模型(SegmentedMemoryModel)存储器由一组独立的地址空间:段(Segment)每个段都可以达到4GB容量在处理器内部,所有的段都被映射到线性地址空间(3)实地址存储模型(Real-addressMemoryModel)8086处理器的存储模型段式存储模型的特例线性地址空间最大为1MB容量,段最大为64KB第1章汇编语言基础232.工作方式(1)保护方式(ProtectedMode)IA-32处理器固有的工作状态具有强大的段页式存储管理和特权与保护能力使用全部32条地址总线,可寻址4GB物理存储器使用平展或段式存储模型利用虚拟8086方式支持实地址8086软件(2)实地址方式(Real-addressMode)可以进行32位处理的快速8086只能寻址1MB物理存储器空间,每个段不超过64KB可以使用32位寄存器、32位操作数和32位寻址方式只能支持实地址存储模型(3)系统管理方式(SystemManagementMode)实现供节能和系统安全管理第1章汇编语言基础243.逻辑地址(LogicalAddress)•在处理器内部、程序员编程时采用的地址•逻辑地址=段基地址∶偏移地址段基地址=在主存中的起始地址偏移地址=距离段基地址的位移量•某个存储单元可以有多个逻辑地址,但只有一个唯一的物理地址逻辑地址线性地址物理地址编程使用处理器转换地址总线输出示意图第1章汇编语言基础26基本段的逻辑地址•代码段(CodeSegment)段基地址:代码段寄存器CS指示偏移地址:指令指针寄存器EIP保存•数据段(DataSegment)段基地址:数据段寄存器DS指示有时也用附加段寄存器ES,段寄存器FS和GS指示偏移地址:各种存储器寻址方式计算出来•堆栈段(StackSegment)段基地址:堆栈段寄存器SS指示偏移地址:堆栈指针寄存器ESP保存主存空间指令段数据段堆栈段程序第1章汇编语言基础274.段选择器•16位段寄存器保存16位段选择器•段选择器指向64位段描述符(Descriptor)•段描述符包括段基地址平展存储模型:指向地址0位置段式存储模型:指向线性地址空间不同的段实地址存储模型:保存段基地址的高16位段选择器段基地址数据或指令段寄存器段描述符主存空间第1章汇编语言基础28平展模型•平展存储模型是分段存储模型的一种特例•所有的段都有相同的段基地址(基地址为0),都重合于同一个线性地址空间•IA-32微处理器上运行的应用程序,广泛采用平展存储模型。第1章汇编语言基础29•分页机制•不采用分页管理机制,线性地址就是对应的物理地址空间•采用了分页管理机制,则要将线性空间地址映射到物理地址•当微处理器既采用段式存储管理,又采用页式存储管理就是段页式存储管理方式第1章汇编语言基础30•分页线性地址空间页物理地址物理地址空间线性地址页目录页表偏移量入口页目录页表入口段1段2段3页+第1章汇编语言基础31存储器模型与工作模式保护模式工作模式实模式虚拟8086模式平展模型存储器模型实地址模型分段模型段页模型第1章汇编语言基础325.Win32的虚拟地址分配应用程序起始地址第1章汇编语言基础331.2.4程序设计语言•机器语言(MachineLanguage)底层的计算机语言,对应机器指令形成目标(代码)程序•汇编语言(AssemblyLanguage)将机器指令用助记符号代替而形成的一种语言本质上是机器语言需要汇编程序“汇编”(翻译)•高级语言(HighLevelLanguage)面向问题的程序设计语言需要“编译”或“解释”后执行指令是处理器的母语moveax,100addeax,256第1章汇编语言基础35汇编语言和高级语言的比较•汇编语言与处理器密切相关,可移植性较差高级语言与具体计算机无关,便于移植•汇编语言功能有限、涉及硬件细节,编写繁琐困难高级语言功能强大,语法自然,容易掌握和应用•汇编语言的优势:直接、有效地控制硬件,容易产生运行速度快、指令序列短小的高效率目标程序高级语言不易直接控制计算机的各种操作,编译程序产生的目标程序往往比较庞大混合编程、取长补短学习汇编语言的意义第1章汇编语言基础36汇编语言的主要应用场合•程序要具有较快的执行时间,或者只能占用较小的存储容量•程序与计算机硬件密切相关,程序要直接、有效地控制硬件•大型软件需要提高性能、优化处理的部分•没有合适的高级语言、或只能采用汇编语言的时候•分析具体系统尤其是该系统的低层软件、加密解密软件、分析和防治计算机病毒等等第1章汇编语言基础371.2.5软件系统•Windows操作系统平台•MASM6.15汇编程序硬件BIOS应用程序*.ASM,*.OBJ*.LST,*.EXE操作系统编辑程序,汇编程序连接程序,调试程序第1章汇编语言基础381.操作系统(OperatingSystem)•操作系统管理着系统的软硬件资源为用户提供使用机器的交互界面为程序员使用资源提供可供调用的驱动程序为其他程序构建稳定的运行平台•32位控制台环境%SystemRoot%\system32\cmd.exe•16位模拟DOS环境%SystemRoot%\system32\command.com32位控制台环境和16位模拟DOS环境两种基本功能和界面一致,但本质不同第1章汇编语言基础392.汇编程序(Assembler)•将汇编语言源程序转换为机器代码•微软宏汇编