67
第 1 第 第第第第第第 1.1 第第第 80x86 第第第 1.2 第第第第第第1.3 第第第第第第第第

第 1 章 汇编语言基础

  • Upload
    lexiss

  • View
    208

  • Download
    0

Embed Size (px)

DESCRIPTION

1.1 英特尔 80x86 处理器 1.2 个人计算机系统 1.3 汇编语言程序格式. 第 1 章 汇编语言基础. 了解软硬件开发环境 熟悉通用寄存器和存储器组织 掌握汇编语言的 语句格式、程序框架和开发方法. 第 1 章 汇编语言基础. Intel 8086. 1.1 英特尔 80x86 处理器. Intel 64 处理器. 酷睿多核系列. 奔腾多核系列. 奔腾 4. IA-32 处理器. 奔腾 III. 奔腾 II. 奔腾. 80486. 80386. 80286. 8086. 16 位 80x86 处理器. 4004. - PowerPoint PPT Presentation

Citation preview

第 1 章 汇编语言基础1.1 英特尔 80x86处理器

1.2 个人计算机系统

1.3 汇编语言程序格式

第 1 章 汇编语言基础了解软硬件开发环境熟悉通用寄存器和存储器组织掌握汇编语言的语句格式、程序框架和开发方法

3 第 1 章 汇编语言基础

Intel 8086

1.1 英特尔 80x86处理器

8038680486

奔腾奔腾 II

奔腾 4

802868086

奔腾 III

酷睿多核系列

4004

IA-32 处理器

16位 80x86 处理器

奔腾多核系列Intel 64 处理

4 第 1 章 汇编语言基础

1.1.1 16位 80x86处理器

•16 位结构处理器•8086/8088 指令系统提供 16 位基本指令集•80186/80188 增加若干条实用指令 •8086 的 工 作 方 式 是 实 方 式 ( Real Mod

e )•80286 增加保护方式( Protected Mod

e )•80286 引入了系统指令

为操作系统等核心程序提供处理器控制功能指令系统、指令集( Instruction Set )指令系统、指令集( Instruction Set )

5 第 1 章 汇编语言基础

1.1.2 IA-32处理器

•80386 引入英特尔 32 位指令集结构 ISA 兼容原 16位 80286 指令系统 全面升级为 32 位 提 供 虚 拟 8086 工 作 方 式 ( Virtual 8086

Mode )•80486 集成浮点处理单元支持浮点指令•Pentium 系列

陆续增加若干整数指令、完善浮点指令 增加一系列多媒体指令( SIMD 指令)

IA-32( Intel Architecture-32

)IA-32( Intel Architecture-32

6 第 1 章 汇编语言基础

1.1.3 Intel 64处理器

•引入 64 位英特尔指令集结构 兼容 32 位指令系统 新增 64 位工作方式

•继续丰富多媒体指令•处理器集成多核( Multi-core )技术

处理器进入多核时代处理器进入多核时代

Many coreMany core

7 第 1 章 汇编语言基础

1.2 个人计算机系统

•硬件( Hardware ):物理设备•软件( Software ):程序和文档

运算器 控制器寄存器组 主存储器 总线输入输出接口电路

外部设备 软件

微处理器微型计算机

微型计算机系统

8 第 1 章 汇编语言基础

1.2.1 硬件组成

I/O接口

主存储器

系统总线

CPU

寄存器

控制器

运算器 辅助存储器

输入设备

输出设备

汇编语言程序员将硬件抽象为:寄存器、存储器地址和输入输出地址汇编语言程序员将硬件抽象为:寄存器、存储器地址和输入输出地址

9 第 1 章 汇编语言基础

1.2.2 寄存器( Register)

•处理器内部的高速存储单元•用于暂时存放程序执行过程中的代码和数据•透明寄存器

对应用人员不可见、不能编程直接控制•可编程( Programmable )寄存器

具有引用名称、供编程使用 通用寄存器( General-Purpose Register )

具有多种用途 数量较多、使用频度较高

专用寄存器 各自只用于特定目的

10 第 1 章 汇编语言基础

IA-32常用寄存器

8个 32 位通用寄存器6个 16 位段寄存器1个 32 位标志寄存器1个 32 位指令指针

11 第 1 章 汇编语言基础

1. 通用寄存器•处理器最常使用的整数通用寄存器•可用于保存整数数据、地址等 •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,DL

31 8 716 15

AH AL0

AX

EAX

既是一个整体又可独立使用既是一个整体又可独立使用

12 第 1 章 汇编语言基础

通用寄存器的名称

EAX Accumulator 累加器

EBX Base 基址寄存器

ECX Counter 计数器

EDX Data 数据寄存器

ESI Source Index 源变址寄存器

EDI Destination Index 目的变址寄存器

EBP Base Pointer 基址指针

ESP Stack Pointer 堆栈指针

13 第 1 章 汇编语言基础

2. 标志寄存器

•标志( Flag ) 反映指令执行结果或控制指令执行形式 用一个或多个二进制位表示一种标志 用 0 和 1 的不同组合表达标志的不同状态

•8086 支持 16 位标志寄存器 FLAGS

•IA-32 处理器形成 32 位 EFLAGS 标志寄存器 状态标志:记录指令执行结果的辅助信息 控制标志:方向标志 DF ,仅用于串操作指令 系统标志:控制操作系统或核心管理程序的操作方

式 示意图

15 第 1 章 汇编语言基础

处理器最基本的标志:状态标志

•用来记录指令执行结果的辅助信息•加减运算和逻辑运算指令主要设置它们•其他有些指令的执行也会相应地设置它们•处理器主要使用其中 5 个构成各种条件,分

支指令判断这些条件实现程序分支

8086 的标志

OF

1115 12

DF

10

IF

9

TF

8

SF

7

ZF

6

0

5

AF

4

0

3

PF

2

1

1

CF

0

16 第 1 章 汇编语言基础

3. 指令指针寄存器 EIP

•保存将要执行的指令在主存的存储器地址•EIP 是专用寄存器

顺序执行时自动增量(加上该指令的字节数),指向下一条指令

分支、调用等操作时执行控制转移指令修改,引起程序转移到指定的指令执行

出现中断或异常时被处理器赋值而相应改变

31 16 15

IP0

EIP

17 第 1 章 汇编语言基础

4. 段寄存器

•段( Segment )是用于安排相关代码或数据的一个主存区域•段寄存器表明某个段在主存中的位置•6 个 16 位段寄存器: CS DS SS ES FS

GS

•应用程序主要涉及 3 类段 代码段( Code Segment )

存放程序中指令代码 数据段( Data Segment )

存放当前运行程序所用数据 堆栈段( Stack Segment )

指明程序使用的堆栈区域

主存空间

指令段数据段堆栈段 程

18 第 1 章 汇编语言基础

1.2.3 存储器组织

•主存储器容量很大,被划分成许多存储单元•每个存储单元被编排一个号码

即存储单元地址 称为存储器地址( Memory Address )

•每个存储单元以字节为基本存储单位 即字节编址( Byte Addressable ) 一个字节( Byte )等于 8 个二进制位( Bit ) 二进制位是计算机存储信息的最小单位 16 位( 2 个字节)构成一个字( Word ) 32 位 ( 4 个 字 节 ) 构 成 一 个双字 ( Double

Word ) 示意图

20 第 1 章 汇编语言基础

1. 存储模型

•物理存储器以字节为基本存储单位•每个存储单元被分配一个唯一的地址•这个地址就是物理地址•物理地址空间从 0 开始顺序编排,直到处理器支持

的最大存储单元 8086 处理器支持 1MB 存储器: 00000H~ FFFFFH IA-32 处 理 器 支 持 4GB 存 储 器 : 00000000H ~

FFFFFFFFH

•操作系统利用存储管理单元进行存储管理,程序并不直接寻址物理存储器

•IA-32 处理器提供 3 种存储模型,用于程序访问存储器 示意图

22 第 1 章 汇编语言基础

IA-32处理器的存储模型( 1 )平展存储模型( Flat Memory Model )

存储器是一个连续的地址空间:线性地址空间 IA-32 处理器支持 4GB 容量线性地址空间

( 2 )段式存储模型( Segmented Memory Model) 存储器由一组独立的地址空间:段( Segment ) 每个段都可以达到 4GB 容量 在处理器内部,所有的段都被映射到线性地址空间

( 3 ) 实 地 址 存 储模型( Real-address Memory Model ) 8086 处理器的存储模型 段式存储模型的特例 线性地址空间最大为 1MB 容量,段最大为 64KB

23 第 1 章 汇编语言基础

2. 工作方式( 1 )保护方式( Protected Mode )

IA-32 处理器固有的工作状态 具有强大的段页式存储管理和特权与保护能力 使用全部 32 条地址总线,可寻址 4GB 物理存储器 使用平展或段式存储模型 利用虚拟 8086 方式支持实地址 8086 软件

( 2 )实地址方式( Real-address Mode ) 可以进行 32 位处理的快速 8086 只能寻址 1MB 物理存储器空间,每个段不超过 64KB 可以使用 32 位寄存器、 32 位操作数和 32 位寻址方式 只能支持实地址存储模型

( 3 ) 系 统 管 理 方 式 ( System Management Mode ) 实现供节能和系统安全管理

24 第 1 章 汇编语言基础

3. 逻辑地址( Logical Address)

•在处理器内部、程序员编程时采用的地址•逻辑地址=段基地址∶偏移地址

段基地址=在主存中的起始地址 偏移地址=距离段基地址的位移量

•某个存储单元可以有多个逻辑地址,但只有一个唯一的物理地址

逻辑地址逻辑地址 线性地址线性地址 物理地物理地址址

编程使用 处理器转换 地址总线输出

示意图

26 第 1 章 汇编语言基础

基本段的逻辑地址

•代码段( Code Segment ) 段基地址:代码段寄存器 CS 指示 偏移地址:指令指针寄存器 EIP 保存

•数据段(Data Segment ) 段基地址:数据段寄存器 DS 指示

有时也用附加段寄存器 ES ,段寄存器 FS和GS 指示 偏移地址:各种存储器寻址方式计算出来

•堆栈段( Stack Segment ) 段基地址:堆栈段寄存器 SS 指示 偏移地址:堆栈指针寄存器 ESP 保存

主存空间

指令段

数据段堆栈段

程序

27 第 1 章 汇编语言基础

4. 段选择器

•16 位段寄存器保存 16 位段选择器•段选择器指向 64 位段描述符( Descriptor )•段描述符包括段基地址

平展存储模型:指向地址 0 位置 段式存储模型:指向线性地址空间不同的段 实地址存储模型:保存段基地址的高 16 位

段选择器段选择器段基地址段基地址 数据或指令数据或指令

段寄存器 段描述符 主存空间

28 第 1 章 汇编语言基础

平展模型

•平展存储模型是分段存储模型的一种特例 •所有的段都有相同的段基地址(基地

址为 0 ),都重合于同一个线性地址空间 •IA-32微处理器上运行的应用程序,广泛采用平展存储模型。

29 第 1 章 汇编语言基础

•分页机制

•不采用分页管理机制,线性地址就是对应的物理地址空间 •采用了分页管理机制,则要将线性空间地址映射到物理地址 •当微处理器既采用段式存储管理,又采用页式存储管理就是段页式存储管理方式

30 第 1 章 汇编语言基础

•分页

线性地址空间

物理地址

物理地址空间线性地址页目录 页表 偏移量

入口

页目录

页表

入口

段 1

段 2

段 3

+

31 第 1 章 汇编语言基础

存储器模型与工作模式

保护模式

工作模式

实模式

虚拟 8086模式平展模型

存储器模型

实地址模型

分段模型

段页模型

32 第 1 章 汇编语言基础

5. Win32的虚拟地址分配

应用程序起始地址

33 第 1 章 汇编语言基础

1.2.4 程序设计语言

•机器语言( Machine Language ) 底层的计算机语言,对应机器指令 形成目标(代码)程序

•汇编语言( Assembly Language ) 将机器指令用助记符号代替而形成的一种语言 本质上是机器语言 需要汇编程序“汇编” ( 翻译 )

•高级语言( High Level Language ) 面向问题的程序设计语言 需要“编译”或“解释”后执行

指令是处理器的母指令是处理器的母语语

指令是处理器的母指令是处理器的母语语

mov eax,100

add eax,256

mov eax,100

add eax,256

35 第 1 章 汇编语言基础

汇编语言和高级语言的比较

•汇编语言与处理器密切相关,可移植性较差 高级语言与具体计算机无关,便于移植

•汇编语言功能有限、涉及硬件细节,编写繁琐困难 高级语言功能强大,语法自然,容易掌握和应用

•汇编语言的优势:直接、有效地控制硬件,容易产生运行速度快、指令序列短小的高效率目标程序 高级语言不易直接控制计算机的各种操作,编译程

序产生的目标程序往往比较庞大

混合编程、取长补短混合编程、取长补短混合编程、取长补短混合编程、取长补短 学习汇编语言的意义

36 第 1 章 汇编语言基础

汇编语言的主要应用场合

•程序要具有较快的执行时间,或者只能占用较小的存储容量•程序与计算机硬件密切相关,程序要直接、有效地控制硬件•大型软件需要提高性能、优化处理的部分•没有合适的高级语言、或只能采用汇编语言的

时候•分析具体系统尤其是该系统的低层软件、加密解密软件、分析和防治计算机病毒等等

37 第 1 章 汇编语言基础

1.2.5 软件系统

•Windows 操作系统平台•MASM 6.15 汇编程序

硬件

BIOS

应用程序

*.ASM, *.OBJ*.LST, *.EXE

操作系统

编辑程序,汇编程序连接程序,调试程序

38 第 1 章 汇编语言基础

1. 操作系统( Operating System)

•操作系统管理着系统的软硬件资源 为用户提供使用机器的交互界面 为程序员使用资源提供可供调用的驱动程序 为其他程序构建稳定的运行平台

•32 位控制台环境%SystemRoot%\system32\cmd.exe

•16 位模拟 DOS环境%SystemRoot%\system32\

command.com32 位控制台环境和 16 位模拟 DOS 环

境两种基本功能和界面一致,但本质不同

32 位控制台环境和 16 位模拟 DOS 环境

两种基本功能和界面一致,但本质不同

39 第 1 章 汇编语言基础

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 程序汇编语言程序与汇编程序是两个不同的概念

汇编语言程序与汇编程序是两个不同的概念

40 第 1 章 汇编语言基础

3. 文件路径

•目录(Directory ):管理磁盘上文件的文件夹•路径( Path ):分区 :\根目录 \ 子目录 \文件名

绝对路径:文件的完整路径d:\masm\progs\eg0101.asm 相对路径:相对当前目录的路径progs\eg0101.asm..\bin\ml.exe

•转换分区d:

•进入当前目录( Current Directory )cd \masm

41 第 1 章 汇编语言基础

4. 内部命令和外部命令

•内部命令: 32 位控制台或 DOS环境本身具有的、直接支持的命令,即驻留主存的命令 使用方法:命令关键字 参数选项

•外部命令:与其他可执行文件一样 , 以文件形式保存在磁盘上的命令 执行方法:路径 \文件名 参数

•路径搜索顺序 先当前目录 后搜索路径 内部命令 PATH查看和设置当前的搜索路径

你所执行的命令不是内部或外部命令,也不是可运行的程序或批处理文件

你所执行的命令不是内部或外部命令,也不是可运行的程序或批处理文件

42 第 1 章 汇编语言基础

5. 进入 MASM目录的批处理文件

•为便于进入 MASM 目录,可创建批处理文件 32 位Windows 控制台: WIN32.BAT

16位DOS环境: DOS16.BAT

•为便于访问其中文件,增加搜索路径:@set PATH=D:\MASM;D:\MASM\

BIN;%PATH%在Windows “资源管理器打开文件夹 D:\

MASM”,双击该批处理文件,就可以进入MASM环境

在Windows “资源管理器打开文件夹 D:\

MASM”,双击该批处理文件,就可以进入MASM环境

44 第 1 章 汇编语言基础

1.3 汇编语言程序格式

•程序用程序设计语言编写,由指令构成•指令由操作码和操作数(地址码)组成•操作码( Opcode )表明处理器执行的操作

例如数据传送、加法运算、跳转等操作。•操作数( Operand )是参与操作的数据对象 主要以寄存器名或地址形式指明数据的来源 通常的指令都有一个或两个操作数 有些指令无操作数,个别指令有 3 或 4 个操作数 多数操作数需要显式指明,有些操作数隐含使用

45 第 1 章 汇编语言基础

1.3.1 指令的代码格式( Instruction Format)

•IA-32 处理器采用可变长度指令格式•操作码

可选的指令前缀(用于扩展指令功能) 1 ~ 3 字节的主要操作码

•操作数 可选的寻址 方 式 域 (包括 ModR/M 和 SIB 字

段) 可选的位移量 可选的立即数

46 第 1 章 汇编语言基础

使用最多、最基本的数据传送指令

•传送指令的助记符: MOV (取自 Move ) 将数据从一个位置传送到另一个位置 类似高级语言的赋值语句mov dest,src; 源操作数 src :被传送的数据或数据所在的位置; 目的操作数 dest :数据将要传送到的位置

mov eax,ebx ; 机器代码: 8B C3

mov eax,[ebx] ; 机器代码: 8B 03

mov eax,[ebx+esi*4+80h]

; 机器代码: 8B 84 B3 80 00 00 00

mov eax,ebx ; 机器代码: 8B C3

mov eax,[ebx] ; 机器代码: 8B 03

mov eax,[ebx+esi*4+80h]

; 机器代码: 8B 84 B3 80 00 00 00

功能演示

48 第 1 章 汇编语言基础

1.3.2 语句格式

•源程序由语句组成•一 个 语句常占一 行 ( MASM 有 续 行符

“ \” )•一个语句不超过 132 个字符, 4 个部分•执行性语句:表达处理器指令(硬指令)

标号 : 硬指令助记符 操作数 ,操作数 ; 注释

•说明性语句:表达伪指令,控制汇编方式名字 伪指令助记符 参数 , 参数 ,…… ;注释

这是 MASM 语法,但具有一般性这是 MASM 语法,但具有一般性

49 第 1 章 汇编语言基础

1. 标号与名字

•标号:执行性语句中 冒号分隔 表示处理器指令在主存中的逻辑地址 指示分支、循环等程序的目的地址

•名字:说明性语句中 空格或制表符分隔 变量名、段名、子程序名等 反映变量、段和子程序等的逻辑地址

标号和名字是用户自定义的标识符标号和名字是用户自定义的标识符

50 第 1 章 汇编语言基础

标识符( Identifier)

•最多由 31 个字母、数字及规定的特殊符号(如 _、$ 、 ? 、@)组成,不能以数字开头

•一个源程序中,用户定义的每个标识符必须唯一•不能是汇编程序采用的保留字•保留字( Reserved Word )是编程语言本身需要

使用的各种具有特定含义的标识符、也称为关键字 硬指令助记符: MOV 伪指令助记符: BYTE 操作符: OFFSET 寄存器名: EAX

取名原则类似高级语言但默认不区别大小写字母取名原则类似高级语言但默认不区别大小写字母

51 第 1 章 汇编语言基础

2. 助记符

•助记符是帮助记忆指令功能的符号 硬指令助记符表示处理器指令 伪指令助记符表达一个汇编命令

•处理器指令示例:传送指令 MOV

•伪指令示例:字节变量定义 助记符: BYTE (或 DB ) 功能:在主存中占用若干的存储空间,用于保存变

量值,该变量以字节为单位存取

msg byte 'Hello, Assembly !',13,10,0msg byte 'Hello, Assembly !',13,10,0

52 第 1 章 汇编语言基础

3. 操作数和参数

•处理器指令的操作数:表示参与操作的对象 具体的常量 保存在寄存器的数据 保存在存储器中的变量 逗号前常是目的操作数,逗号后常是源操作数

•伪指令的参数: 常量、变量名、表达式等 可以有多个,参数之间用逗号分隔

msg byte 'Hello, Assembly !',13,10,0msg byte 'Hello, Assembly !',13,10,0

mov eax,offset msgmov eax,offset msg

53 第 1 章 汇编语言基础

4. 注释和分隔符

•语句中分号后的内容是注释 对指令或程序进行说明 汇编程序不对它们做任何处理 注释利于阅读,应养成书写注释的好习惯

•语句的 4 个组成部分要用分隔符分开 标号后的冒号 注释前的分号 操作数间和参数间的逗号 分隔其他部分采用一个或多个空格或制表符 注释使用英文或中文均可

分隔符都是英文标点分隔符都是英文标点

良好的语句格式有利于编程良好的语句格式有利于编程

54 第 1 章 汇编语言基础

1.3.3 源程序框架;eg0000.asm in Windows Console

include io32.inc ; 包含 32 位输入输出文件

.data ; 定义数据段…… ; 数据定义(数据待填).code ; 定义代码段

start: ; 程序执行起始位置…… ; 主程序(指令待填)exit 0(或 ret) ; 程序正常执行结束…… ; 子程序(指令待填)end start ; 汇编结束

55 第 1 章 汇编语言基础

1. 包含伪指令 INCLUDE

•将常用的常量定义、过程说明、共享的子程序库等内容进行声明(相当于 C 和 C++ 语言中,包含头文件的作用)•IO32.INC 是配合本书的包含文件•前 3 个语句:

.686 ;32 位指令

.model flat,stdcall; 选择平展模型,标准调用规范

option casemap:none; 告知MASM 区分用户定义标识符的

大小写

56 第 1 章 汇编语言基础

2. 段的简化定义

•数据段定义伪指令 .DATA创建一个数据段•代码段定义伪指令 .CODE创建一个代码段•堆栈段由Windows维护,用户不必设置•程序开始执行的位置

应用一个标号(例如: START ) 汇编结束 END 指令的参数

•应用程序执行结束 语句“ EXIT 0” 将控制权交还操作系统 提供给操作系统一个返回代码 通常用 0 表示执行正确

•源程序汇编结束 END 语句执行结束≠汇编结束执行结束≠汇编结束

57 第 1 章 汇编语言基础

〔例 1-1〕信息显示程序

•在数据段给出这个字符串形式的信息:; 数据段

msg byte 'Hello, Assembly!',13,10,0; 定义要显示的字符串

•在代码段编写显示字符串的程序:; 代码段mov eax,offset msg; 指定字符串的偏移地址call dispmsg; 调用 I/O子程序显示信息 完整程序

60 第 1 章 汇编语言基础

3. 输入输出子程序库

•汇编程序通常不提供任何函数或程序库•必须利用操作系统的编程资源•本书配套键盘输入和显示器输出的 I/O子程序•含 IO32.INC和 IO32.LIB ,需要包含文件声明•源程序文件开始使用包含命令声明

INCLUDE IO32.INC

•子程序调用方法MOV EAX, 入口参数CALL 子程序名

子程序名 DISPMSG

入口参数 EAX=字符串地址功能说明 显示 字符串 (以 0 结

尾)输入子程序输出子程序

63 第 1 章 汇编语言基础

1.3.4 开发过程

64 第 1 章 汇编语言基础

1. 开发软件•抽取MASM 6.11和 Visual C++ 6.0 集成开发环境中有关文件构造基本开发软件包 MASM 主目录: I/O库、包含文件及批处理文件 BIN子目录:进行汇编、连接及配套程序文件 WINDBG子目录:调试程序 WinDbg.EXE

•默认安装到 D 分区的 MASM 目录•快速开发方法

① 进入 MASM 目录双击批处理文件 WIN32.BAT② 生成可执行文件MAKE32 eg0101

快速开发过程

66 第 1 章 汇编语言基础

2. 源程序的编辑

•源程序文件是无格式文件、纯文本类型•以 ASM 为扩展名,可使用任何文本编辑器

Windows 的记事本 Notepad 其他程序开发工具中的编辑环境 专 注 于 源 程 序 编 写 的 编 辑 软 件 , 例 如

UltraEdit32

•本书配套开发软件 MASM 主目录提供 Notepad2.exe 程序

本书源程序文件的命名规则• EG=例题, EX=习题• 前 2 位数字=章号,后 2位数字=序号

本书源程序文件的命名规则• EG=例题, EX=习题• 前 2 位数字=章号,后 2位数字=序号

67 第 1 章 汇编语言基础

3. 源程序的汇编

•生成目标模块文件( .OBJ )•MASM 6.x 的汇编程序是 ML.EXE

BIN\ML /c /coff eg0101.asm 参数“ /c” (小写字母)实现源程序的汇编 参数“ /coff” (小写字母)表示生成 COFF 格

式的目标模块文件

温馨提示:将源文件放在 MASM 目录温馨提示:将源文件放在 MASM 目录

温馨提示: ML.EXE 的参数区别大小写温馨提示: ML.EXE 的参数区别大小写

68 第 1 章 汇编语言基础

4. 目标文件的连接

•把一个或多个目标文件和库文件合成一个可执行文件( .EXE )•32 位连接程序被更名为 LINK32.EXE

BIN\LINK32 /subsystem:console eg0201.obj “ /subsystem:console” 表 示 生 成

Windows 控制台( Console )环境的可执行文件

“ /subsystem:windows” 生成 Windows图形窗口的可执行文件温馨提示:使用批处理文件方便操作温馨提示:使用批处理文件方便操作

温馨提示:汇编程序只指出语法错误温馨提示:汇编程序只指出语法错误

69 第 1 章 汇编语言基础

5. 可执行文件的运行

•进入控制台(或模拟 DOS )环境•在命令行提示符下输入文件名(可以省略扩展

名)、按下回车键运行eg0201.exe

•运行错误,就需要 静态排错:阅读分析源程序 动态排错:利用调试程序

温馨提示:不要在 Windows 下双击运行温馨提示:不要在 Windows 下双击运行

70 第 1 章 汇编语言基础

6. 列表文件

•列表文件( .LST )含有源程序和目标代码ML /c /coff /Fl eg0201.asm “ /Fl”创建列表文件(大写 F 、小写 l,不是数字 1 )

•列表文件有两部分内容 第一部分:源程序及其代码 第二部分:各种标识符

•错误 Error :比较严重的语法错误•警告Warning :不太关键的语法错误

71 第 1 章 汇编语言基础

7. 调试程序

•WinDbg 是微软提供的 Windows 调试程序 •WinDbg 支持源程序级调试,但需要在汇编、连接过程中加入参数 汇编时用“ /Zi” (大写 Z 、小写 i)参数ML /c /coff /Fl /Zi eg0101.asm 连接时用“ /debug”参数LINK32 /subsystem:console /debug eg0101.obj

•双击WinDbg快捷方式打开调试程序源程序 可执行文件目标模块

文本编辑器 汇编程序 连接程序 调试程序

72 第 1 章 汇编语言基础

汇编语言集成开发环境 (2)

•运行作者组织的“开发工具 .EXE” 可以生成一个汇编语言集成开发环境 MASM615—LINK16.EXE, LIB16.EXE MASM32 调试工具— WINDBG, DEBUG 作者编写的输入输出文件

IO16.LIB, LIB32.LIB, IO.INC, IO16.INC, IO32.INC

73 第 1 章 汇编语言基础

安装方法

•双击“ m32v10r.EXE” 安装 masm32 masm32 只能安装在根目录

•再双击“ Exmasm32” 安装其他软件 安装目录为 masm32 所在目录 , 默认为 C:\masm32

74 第 1 章 汇编语言基础

MASM615

•MASM615 是微软提供的汇编开发软件包,以 DOS操作系统为平台,可以用来开发实模式下的程序和系统程序,但是无法开发保护模式下的 32 位应用程序

•WINDOWS XP/2000 环境下可在模拟 DOS窗口下使用

•在教材配套的开发环境中使用了 MASM615 中的链接器

75 第 1 章 汇编语言基础

MASM32

•免费软件开发包 MASM32是 WINDOWS窗口应用程序,可以非常方便地开发 32 位应用程序。 编辑器 MASM 6.14 汇编程序 32 位增量式链接程序 Win32 的包含文件、库文件

•MASM32 是配套开发环境的主体•为了使用方便,建议在桌面建立masm32 的启

动图标

76 第 1 章 汇编语言基础

链接软件

•MASM614 中的链接软件是段式可执行程序链接 器 ( Segmented Executable Linker ),用于生成 16位 DOS 程序,不能链接生成 32位Windows 应用程序;

•MASM32 中的连接器 LINK.EXE是 32 位增量式链接器( incremental linker )用于链接生成 32 位应用程序

77 第 1 章 汇编语言基础

编写源程序

•双击桌面上的 ,启动 MASM32 编辑窗口,书写源程序。

•输入完毕之后,选择菜单 File/Save, 弹出保存对话框,保存文件。

•汇编源程序的扩展名是 ASM

•在DOS模拟窗口中对源程序进行汇编和连接

78 第 1 章 汇编语言基础

32位应用程序的汇编连接

第 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