第1章汇编语言基础.ppt

上传人:少林足球 文档编号:4174640 上传时间:2019-10-25 格式:PPT 页数:68 大小:1,018.04KB
返回 下载 相关 举报
第1章汇编语言基础.ppt_第1页
第1页 / 共68页
第1章汇编语言基础.ppt_第2页
第2页 / 共68页
第1章汇编语言基础.ppt_第3页
第3页 / 共68页
第1章汇编语言基础.ppt_第4页
第4页 / 共68页
第1章汇编语言基础.ppt_第5页
第5页 / 共68页
点击查看更多>>
资源描述

《第1章汇编语言基础.ppt》由会员分享,可在线阅读,更多相关《第1章汇编语言基础.ppt(68页珍藏版)》请在三一文库上搜索。

1、第1章 汇编语言基础,1.1 英特尔80x86处理器 1.2 个人计算机系统 1.3 汇编语言程序格式,第1章 汇编语言基础,了解软硬件开发环境 熟悉通用寄存器和存储器组织 掌握汇编语言的 语句格式、程序框架和开发方法,3,Intel 8086,1.1 英特尔80x86处理器,80386,80486,奔腾,奔腾II,奔腾4,80286,8086,奔腾III,酷睿多核系列,4004,IA-32处理器,16位80x86处理器,奔腾多核系列,Intel 64处理器,4,1.1.1 16位80x86处理器,16位结构处理器 8086/8088指令系统提供16位基本指令集 80186/80188增加若干

2、条实用指令 8086的工作方式是实方式(Real Mode) 80286增加保护方式(Protected Mode) 80286引入了系统指令 为操作系统等核心程序提供处理器控制功能,指令系统、指令集(Instruction Set),5,1.1.2 IA-32处理器,80386引入英特尔32位指令集结构ISA 兼容原16位80286指令系统 全面升级为32位 提供虚拟8086工作方式(Virtual 8086 Mode) 80486集成浮点处理单元支持浮点指令 Pentium系列 陆续增加若干整数指令、完善浮点指令 增加一系列多媒体指令(SIMD指令),IA-32(Intel Archite

3、cture-32),6,1.1.3 Intel 64处理器,引入64位英特尔指令集结构 兼容32位指令系统 新增64位工作方式 继续丰富多媒体指令 处理器集成多核(Multi-core)技术,处理器进入多核时代,Many core,7,1.2 个人计算机系统,硬件(Hardware):物理设备 软件(Software):程序和文档,8,1.2.1 硬件组成,汇编语言程序员将硬件抽象为: 寄存器、存储器地址和输入输出地址,9,1.2.2 寄存器(Register),处理器内部的高速存储单元 用于暂时存放程序执行过程中的代码和数据 透明寄存器 对应用人员不可见、不能编程直接控制 可编程(Progr

4、ammable)寄存器 具有引用名称、供编程使用 通用寄存器(General-Purpose Register) 具有多种用途 数量较多、使用频度较高 专用寄存器 各自只用于特定目的,10,IA-32常用寄存器,8个32位通用寄存器 6个16位段寄存器 1个32位标志寄存器 1个32位指令指针,11,1. 通用寄存器,处理器最常使用的整数通用寄存器 可用于保存整数数据、地址等 8个32位通用寄存器 EAX,EBX,ECX,EDX ESI,EDI,EBP,ESP 8个16位通用寄存器 AX,BX,CX,DX SI,DI,BP,SP 8个8位通用寄存器 AH,BH,CH,DH AL,BL,CL,D

5、L,既是一个整体 又可独立使用,12,通用寄存器的名称,13,2. 标志寄存器,标志(Flag) 反映指令执行结果或控制指令执行形式 用一个或多个二进制位表示一种标志 用0和1的不同组合表达标志的不同状态 8086支持16位标志寄存器FLAGS IA-32处理器形成32位EFLAGS标志寄存器 状态标志:记录指令执行结果的辅助信息 控制标志:方向标志DF,仅用于串操作指令 系统标志:控制操作系统或核心管理程序的操作方式,示意图,14,标志寄存器EFLAGS,返回,15,处理器最基本的标志:状态标志,用来记录指令执行结果的辅助信息 加减运算和逻辑运算指令主要设置它们 其他有些指令的执行也会相应地

6、设置它们 处理器主要使用其中5个构成各种条件,分支指令判断这些条件实现程序分支,16,3. 指令指针寄存器EIP,保存将要执行的指令在主存的存储器地址 EIP是专用寄存器 顺序执行时自动增量(加上该指令的字节数),指向下一条指令 分支、调用等操作时执行控制转移指令修改,引起程序转移到指定的指令执行 出现中断或异常时被处理器赋值而相应改变,17,4. 段寄存器,段(Segment)是用于安排相关代码或数据的一个主存区域 段寄存器表明某个段在主存中的位置 6个16位段寄存器:CS DS SS ES FS GS 应用程序主要涉及3类段 代码段(Code Segment) 存放程序中指令代码 数据段(

7、Data Segment) 存放当前运行程序所用数据 堆栈段(Stack Segment) 指明程序使用的堆栈区域,18,1.2.3 存储器组织,主存储器容量很大,被划分成许多存储单元 每个存储单元被编排一个号码 即存储单元地址 称为存储器地址(Memory Address) 每个存储单元以字节为基本存储单位 即字节编址(Byte Addressable) 一个字节(Byte)等于8个二进制位(Bit) 二进制位是计算机存储信息的最小单位 16位(2个字节)构成一个字(Word) 32位(4个字节)构成一个双字(Double Word),示意图,19,数据的位格式,返回,20,1. 存储模型,

8、物理存储器以字节为基本存储单位 每个存储单元被分配一个唯一的地址 这个地址就是物理地址 物理地址空间从0开始顺序编排,直到处理器支持的最大存储单元 8086处理器支持1MB存储器:00000HFFFFFH IA-32处理器支持4GB存储器:00000000HFFFFFFFFH 操作系统利用存储管理单元进行存储管理,程序并不直接寻址物理存储器 IA-32处理器提供3种存储模型,用于程序访问存储器,示意图,21,存储器地址空间,返回,22,IA-32处理器的存储模型,(1)平展存储模型(Flat Memory Model) 存储器是一个连续的地址空间:线性地址空间 IA-32处理器支持4GB容量线

9、性地址空间 (2)段式存储模型(Segmented Memory Model) 存储器由一组独立的地址空间:段(Segment) 每个段都可以达到4GB容量 在处理器内部,所有的段都被映射到线性地址空间 (3)实地址存储模型(Real-address Memory Model) 8086处理器的存储模型 段式存储模型的特例 线性地址空间最大为1MB容量,段最大为64KB,23,2. 工作方式,(1)保护方式(Protected Mode) IA-32处理器固有的工作状态 具有强大的段页式存储管理和特权与保护能力 使用全部32条地址总线,可寻址4GB物理存储器 使用平展或段式存储模型 利用虚拟8

10、086方式支持实地址8086软件 (2)实地址方式(Real-address Mode) 可以进行32位处理的快速8086 只能寻址1MB物理存储器空间,每个段不超过64KB 可以使用32位寄存器、32位操作数和32位寻址方式 只能支持实地址存储模型 (3)系统管理方式(System Management Mode) 实现供节能和系统安全管理,24,3. 逻辑地址(Logical Address),在处理器内部、程序员编程时采用的地址 逻辑地址段基地址偏移地址 段基地址在主存中的起始地址 偏移地址距离段基地址的位移量 某个存储单元可以有多个逻辑地址,但只有一个唯一的物理地址,示意图,25,逻辑

11、地址与物理地址,返回,26,基本段的逻辑地址,代码段(Code Segment) 段基地址:代码段寄存器CS指示 偏移地址:指令指针寄存器EIP保存 数据段(Data Segment) 段基地址:数据段寄存器DS指示 有时也用附加段寄存器ES,段寄存器FS和GS指示 偏移地址:各种存储器寻址方式计算出来 堆栈段(Stack Segment) 段基地址:堆栈段寄存器SS指示 偏移地址:堆栈指针寄存器ESP保存,27,4. 段选择器,16位段寄存器保存16位段选择器 段选择器指向64位段描述符(Descriptor) 段描述符包括段基地址 平展存储模型:指向地址0位置 段式存储模型:指向线性地址空

12、间不同的段 实地址存储模型:保存段基地址的高16位,28,5. Win32的虚拟地址分配,应用程序起始地址,29,1.2.4 程序设计语言,机器语言(Machine Language) 底层的计算机语言,对应机器指令 形成目标(代码)程序 汇编语言(Assembly Language) 将机器指令用助记符号代替而形成的一种语言 本质上是机器语言 需要汇编程序“汇编”(翻译) 高级语言(High Level Language) 面向问题的程序设计语言 需要“编译”或“解释”后执行,指令是处理器的母语,mov eax,100 add eax,256,30,Instructions: Languag

13、e of the Machine,To command a computers hardware, you must speak its language. The words of a machines language are called instructions, and its vocabulary is called an instruction set. 为了控制计算机硬件,必须使用它的语言。机器语言的单词称为指令,它的词汇表称为指令集。 “Computer Organization & Design - The Hardware/Software Interface ( 2nd

14、 Edition )” by John L. Hennessy and David A. Patterson Morgan Kaufmann Publishers, Inc. 1998,返回,31,汇编语言和高级语言的比较,汇编语言与处理器密切相关,可移植性较差 高级语言与具体计算机无关,便于移植 汇编语言功能有限、涉及硬件细节,编写繁琐困难 高级语言功能强大,语法自然,容易掌握和应用 汇编语言的优势:直接、有效地控制硬件,容易产生运行速度快、指令序列短小的高效率目标程序 高级语言不易直接控制计算机的各种操作,编译程序产生的目标程序往往比较庞大,混合编程、取长补短,32,汇编语言的主要应用场合

15、,程序要具有较快的执行时间,或者只能占用较小的存储容量 程序与计算机硬件密切相关,程序要直接、有效地控制硬件 大型软件需要提高性能、优化处理的部分 没有合适的高级语言、或只能采用汇编语言的时候 分析具体系统尤其是该系统的低层软件、加密解密软件、分析和防治计算机病毒等等,33,1.2.5 软件系统,Windows操作系统平台 MASM 6.15汇编程序,34,1. 操作系统(Operating System),操作系统管理着系统的软硬件资源 为用户提供使用机器的交互界面 为程序员使用资源提供可供调用的驱动程序 为其他程序构建稳定的运行平台 32位控制台环境 %SystemRoot%system3

16、2cmd.exe 16位模拟DOS环境 %SystemRoot%,32位控制台环境和16位模拟DOS环境 两种基本功能和界面一致,但本质不同,35,2. 汇编程序(Assembler),将汇编语言源程序转换为机器代码 微软宏汇编程序MASM MASM 6.11是最后一个独立发行的MASM软件包 MASM 6.15来自Visual C+6.0,支持到Pentium 4的SSE2指令系统 Visual C+.NET 2005提供 支持SSE3指令的MASM 8.0 支持64位指令的ML64.EXE程序,汇编语言程序与汇编程序 是两个不同的概念,36,3. 文件路径,目录(Directory):管理

17、磁盘上文件的文件夹 路径(Path):分区:根目录子目录文件名 绝对路径:文件的完整路径 d:masmprogseg0101.asm 相对路径:相对当前目录的路径 progseg0101.asm binml.exe 转换分区 d: 进入当前目录(Current Directory) cd masm,37,4. 内部命令和外部命令,内部命令:32位控制台或DOS环境本身具有的、直接支持的命令,即驻留主存的命令 使用方法:命令关键字 参数选项 外部命令:与其他可执行文件一样,以文件形式保存在磁盘上的命令 执行方法:路径文件名 参数 路径搜索顺序 先当前目录 后搜索路径 内部命令PATH查看和设置当

18、前的搜索路径,38,5. 进入MASM目录的批处理文件,为便于进入MASM目录,可创建批处理文件 32位Windows控制台:WIN32.BAT 16位DOS环境:DOS16.BAT 为便于访问其中文件,增加搜索路径: set PATH=D:MASM;D:MASMBIN;%PATH%,在Windows资源管理器打开文件夹“D:MASM”, 双击该批处理文件,就可以进入MASM环境,39,具有搜索路径的批处理文件,返回,echo off set PATH=D:MASM;D:MASMBIN;%PATH% %SystemRoot%system32cmd.exe echo on,WIN32.BAT,e

19、cho off set PATH=D:MASM;D:MASMBIN;%PATH% %SystemRoot% echo on,DOS16.BAT,40,1.3 汇编语言程序格式,程序用程序设计语言编写,由指令构成 指令由操作码和操作数(地址码)组成 操作码(Opcode)表明处理器执行的操作 例如数据传送、加法运算、跳转等操作。 操作数(Operand)是参与操作的数据对象 主要以寄存器名或地址形式指明数据的来源 通常的指令都有一个或两个操作数 有些指令无操作数,个别指令有3或4个操作数 多数操作数需要显式指明,有些操作数隐含使用,41,1.3.1 指令的代码格式(Instruction For

20、mat),IA-32处理器采用可变长度指令格式 操作码 可选的指令前缀(用于扩展指令功能) 13字节的主要操作码 操作数 可选的寻址方式域(包括ModR/M和SIB字段) 可选的位移量 可选的立即数,42,使用最多、最基本的数据传送指令,传送指令的助记符:MOV(取自Move) 将数据从一个位置传送到另一个位置 类似高级语言的赋值语句 mov dest,src ;源操作数src:被传送的数据或数据所在的位置 ;目的操作数dest:数据将要传送到的位置,mov eax,ebx ; 机器代码:8B C3 mov eax,ebx ; 机器代码:8B 03 mov eax,ebx+esi*4+80h

21、; 机器代码:8B 84 B3 80 00 00 00,功能演示,43,传送指令MOV的功能演示,返回,源操作数 src,目的操作数 dest,30H,30H,被传送的数据,44,1.3.2 语句格式,源程序由语句组成 一个语句常占一行(MASM有续行符“”) 一个语句不超过132个字符,4个部分 执行性语句:表达处理器指令(硬指令) 标号: 硬指令助记符 操作数,操作数 ;注释 说明性语句:表达伪指令,控制汇编方式 名字 伪指令助记符 参数,参数, ;注释,这是MASM语法,但具有一般性,45,1. 标号与名字,标号:执行性语句中 冒号分隔 表示处理器指令在主存中的逻辑地址 指示分支、循环等

22、程序的目的地址 名字:说明性语句中 空格或制表符分隔 变量名、段名、子程序名等 反映变量、段和子程序等的逻辑地址,标号和名字是用户自定义的标识符,46,标识符(Identifier),最多由31个字母、数字及规定的特殊符号(如 _、$、?、)组成,不能以数字开头 一个源程序中,用户定义的每个标识符必须唯一 不能是汇编程序采用的保留字 保留字(Reserved Word)是编程语言本身需要使用的各种具有特定含义的标识符、也称为关键字 硬指令助记符: MOV 伪指令助记符: BYTE 操作符: OFFSET 寄存器名: EAX,取名原则类似高级语言 但默认不区别大小写字母,47,2. 助记符,助记

23、符是帮助记忆指令功能的符号 硬指令助记符表示处理器指令 伪指令助记符表达一个汇编命令 处理器指令示例:传送指令 MOV 伪指令示例:字节变量定义 助记符:BYTE (或DB) 功能:在主存中占用若干的存储空间,用于保存变量值,该变量以字节为单位存取,msg byte Hello, Assembly !,13,10,0,48,3. 操作数和参数,处理器指令的操作数:表示参与操作的对象 具体的常量 保存在寄存器的数据 保存在存储器中的变量 逗号前常是目的操作数,逗号后常是源操作数 伪指令的参数: 常量、变量名、表达式等 可以有多个,参数之间用逗号分隔,msg byte Hello, Assembl

24、y !,13,10,0,mov eax,offset msg,49,4. 注释和分隔符,语句中分号后的内容是注释 对指令或程序进行说明 汇编程序不对它们做任何处理 注释利于阅读,应养成书写注释的好习惯 语句的4个组成部分要用分隔符分开 标号后的冒号 注释前的分号 操作数间和参数间的逗号 分隔其他部分采用一个或多个空格或制表符 注释使用英文或中文均可,分隔符都是英文标点,良好的语句格式有利于编程,50,1.3.3 源程序框架,;eg0000.asm in Windows Console include io32.inc ;包含32位输入输出文件 .data ;定义数据段 ;数据定义(数据待填)

25、.code ;定义代码段 start: ;程序执行起始位置 ;主程序(指令待填) exit 0 ;程序正常执行结束 ;子程序(指令待填) end start ;汇编结束,51,1. 包含伪指令INCLUDE,将常用的常量定义、过程说明、共享的子程序库等内容进行声明(相当于C和C+语言中,包含头文件的作用) IO32.INC是配合本书的包含文件 前3个语句: .686 ;32位指令 .model flat,stdcall ;选择平展模型,标准调用规范 option casemap:none ;告知MASM区分用户定义标识符的大小写,52,2. 段的简化定义,数据段定义伪指令.DATA创建一个数据

26、段 代码段定义伪指令.CODE创建一个代码段 堆栈段由Windows维护,用户不必设置 程序开始执行的位置 应用一个标号(例如:START) 汇编结束END指令的参数 应用程序执行结束 语句“EXIT 0”将控制权交还操作系统 提供给操作系统一个返回代码 通常用0表示执行正确 源程序汇编结束END语句,执行结束汇编结束,53,例1-1信息显示程序,在数据段给出这个字符串形式的信息: ;数据段 msg byte Hello, Assembly!,13,10,0 ;定义要显示的字符串 在代码段编写显示字符串的程序: ;代码段 mov eax,offset msg ;指定字符串的偏移地址 call

27、dispmsg ;调用I/O子程序显示信息,完整程序,54,汇编语言源程序EG0101.ASM,;eg0101.asm include io32.inc .data ;数据段 msg byte Hello, Assembly!,13,10,0 .code ;代码段 start: ;程序执行起始位置 mov eax,offset msg call dispmsg exit 0 ;程序正常执行结束 end start ;汇编结束,返回,Hello, Assembly !,运行结果,对比,55,信息显示的C语言源程序,#include int main() printf(“Hello, world

28、!n“); exit(0); ,返回,Hello, world !,运行结果,56,3. 输入输出子程序库,汇编程序通常不提供任何函数或程序库 必须利用操作系统的编程资源 本书配套键盘输入和显示器输出的I/O子程序 含IO32.INC和IO32.LIB,需要包含文件声明 源程序文件开始使用包含命令声明 INCLUDE IO32.INC 子程序调用方法 MOV EAX,入口参数 CALL 子程序名,输入子程序,输出子程序,57,常用输出子程序,返回,58,常用输入子程序,返回,59,1.3.4 开发过程,60,1. 开发软件,抽取MASM 6.11和Visual C+ 6.0集成开发环境中有关文

29、件构造基本开发软件包 MASM主目录:I/O库、包含文件及批处理文件 BIN子目录:进行汇编、连接及配套程序文件 WINDBG子目录:调试程序WinDbg.EXE 默认安装到D分区的MASM目录 快速开发方法 进入MASM目录 双击批处理文件WIN32.BAT 生成可执行文件 MAKE32 eg0101,快速开发过程,61,快速开发过程,返回,感性认识因直观而印象深刻,62,2. 源程序的编辑,源程序文件是无格式文件、纯文本类型 以ASM为扩展名,可使用任何文本编辑器 Windows的记事本Notepad 其他程序开发工具中的编辑环境 专注于源程序编写的编辑软件,例如UltraEdit32 本

30、书配套开发软件MASM主目录提供 Notepad2.exe程序,本书源程序文件的命名规则 EG例题,EX习题 前2位数字章号,后2位数字序号,63,3. 源程序的汇编,生成目标模块文件(.OBJ) MASM 6.x的汇编程序是ML.EXE BINML /c /coff eg0101.asm 参数“/c”(小写字母)实现源程序的汇编 参数“/coff”(小写字母)表示生成COFF格式的目标模块文件,温馨提示:将源文件放在MASM目录,温馨提示:ML.EXE的参数区别大小写,64,4. 目标文件的连接,把一个或多个目标文件和库文件合成一个可执行文件(.EXE) 32位连接程序被更名为LINK32.

31、EXE BINLINK32 /subsystem:console eg0101.obj “/subsystem:console”表示生成Windows控制台(Console)环境的可执行文件 “/subsystem:windows”生成Windows图形窗口的可执行文件,温馨提示:使用批处理文件方便操作,温馨提示:汇编程序只指出语法错误,65,5. 可执行文件的运行,进入控制台(或模拟DOS)环境 在命令行提示符下输入文件名(可以省略扩展名)、按下回车键运行 eg0101.exe 运行错误,就需要 静态排错:阅读分析源程序 动态排错:利用调试程序,温馨提示:不要在Windows下双击运行,66

32、,6. 列表文件,列表文件(.LST)含有源程序和目标代码 ML /c /coff /Fl eg0101.asm “/Fl”创建列表文件 (大写F、小写l,不是数字1) 列表文件有两部分内容 第一部分:源程序及其代码 第二部分:各种标识符 错误Error:比较严重的语法错误 警告Warning:不太关键的语法错误,67,7. 调试程序,WinDbg是微软提供的Windows调试程序 WinDbg支持源程序级调试,但需要在汇编、连接过程中加入参数 汇编时用“/Zi” (大写Z、小写i)参数 ML /c /coff /Fl /Zi eg0101.asm 连接时用“/debug”参数 LINK32 /subsystem:console /debug eg0101.obj 双击WinDbg快捷方式打开调试程序,第1章习题:汇编语言基础,1.1 简答题(1、3、6、7、8) 1.2 判断题(1、6、7、8、9) 1.3 填空题(3、4、5、7、10) 1.9、1.13、1.15、1.16,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1