第3章汇编语言程序设计 3.1概述 ● 指令:计算机完成某种操作的命令 程序:完成某种功能的指令序列 软件:各种程序总称 机器代码,汇编语言程序,汇编程序 汇编语言程序建立步骤: ● (1)用编辑程序建立.ASM源文件 ● (2)用LINK程序把.ASM文件转换为OBJ文件 (3)用LINK程序把.OBJ文件转换为.EXE文件 用EXE2BIN程序把.EXE文件转换为.COM文 件 (4)在DOS下直接键入.EXE文件或.COM文件 的立件名特就可云行程应
COMPUTER SCIENCE AND TECHNOLOGY COMPUTER SCIENCE AND TECHNOLOGY 第3章 汇编语言程序设计 3.1 概述 • 指令:计算机完成某种操作的命令 • 程序:完成某种功能的指令序列 • 软件:各种程序总称 • 机器代码,汇编语言程序,汇编程序 • 汇编语言程序建立步骤: • (1)用编辑程序建立.ASM源文件 • (2)用LINK程序把.ASM文件转换为OBJ文件 • (3)用LINK程序把.OBJ文件转换为.EXE文件, 或用EXE2BIN程序把.EXE文件转换为.COM文 件 • (4)在DOS下直接键入.EXE文件或.COM文件 的文件名就可运行该程序
3.2语句格式 上 语句格式:【名字]操作符操作数1,操作数2;【注释] 1. 名字 一种符号地址 组成:A~Z,a~z,0~9,专用符号?、、@、、$ 。 限制:①第一个字符不能为数字 ②“”必须为第一个字符 ③前31个字符有效 ④不能为关键字 类型:标号:指令符号地址 变量:数据符号地址 2.操作符 。 组成:CPU指令,伪指令,宏指令 3.操作数 。 指定参与操作的数据,或数据所在单元地址 4.注释 说明程序、指令功能,增加程序可读性 Ji Lin University China COMPUTER SCIENCE AND TECHNOLOG型
COMPUTER SCIENCE AND TECHNOLOGY COMPUTER SCIENCE AND TECHNOLOGY 3.2 语句格式 • 语句格式:[名字] 操作符 操作数1,操作数2 ;[注释] 1.名字 • 一种符号地址 • 组成:A~Z,a~z,0~9,专用符号?、.、@、_、$ • 限制:①第一个字符不能为数字 ②“.”必须为第一个字符 ③前31个字符有效 ④不能为关键字 • 类型: 标号:指令符号地址 变量:数据符号地址 2.操作符 • 组成:CPU指令,伪指令,宏指令 3.操作数 • 指定参与操作的数据,或数据所在单元地址 4.注释 • 说明程序、指令功能,增加程序可读性
3.3 伪指令 功能:指示汇编程序完成规定的操作,如选择处 理器,定义数据,分配存储器等。 i Lin University China CpTE型CIENCE AND T厘CHNDOLOGY
COMPUTER SCIENCE AND TECHNOLOGY COMPUTER SCIENCE AND TECHNOLOGY 3.3 伪指令 • 功能:指示汇编程序完成规定的操作,如选择处 理器,定义数据,分配存储器等
程序开始与结束 上 1. 程序开始:可以用name,title给程序起名。 格式:NAME module name 汇编程序以模块名作为模块的名字,若未使用NAME,则可用 TTLE给程序指定标题 格式:TITLE text 文本在每一页上打印出来,若没有NAME,则text的前6个字符为 模块名,text最多为60个字符。 若未使用NAME、TITLE,则源文件名为模块名。 2. 程序结束:表示原程序结束,不可缺,源程序的最后一条语句。 格式:END [label] 标号指示程序开始执行的起始地址,多个模块连接,主程序用标 号,其他程序不用,主程序缺省值为代码段第一条指令。 3. MASM6.0定义的入口点、出口点 入口点:.STARUP;产生设置DS、SS、SP代码,此时,END不 用标号。 出口点:EXT 返回操作系统,常用值为0。 。 例: .STARUP .EXIT 0 END Ji Lin University China COMPUTER SCIENCE AND TECHNOLOGY
COMPUTER SCIENCE AND TECHNOLOGY COMPUTER SCIENCE AND TECHNOLOGY 一、程序开始与结束 1.程序开始:可以用name,title给程序起名。 • 格式:NAME module_name • 汇编程序以模块名作为模块的名字,若未使用NAME,则可用 TITLE给程序指定标题 • 格式:TITLE text • 文本在每一页上打印出来,若没有NAME,则text的前6个字符为 模块名,text最多为60个字符。 • 若未使用NAME、TITLE,则源文件名为模块名。 2.程序结束:表示原程序结束,不可缺,源程序的最后一条语句。 • 格式:END [label] • 标号指示程序开始执行的起始地址,多个模块连接,主程序用标 号,其他程序不用,主程序缺省值为代码段第一条指令。 3.MASM 6.0 定义的入口点、出口点 • 入口点:.STARUP ;产生设置DS、SS、SP代码,此时,END不 用标号。 • 出口点: .EXIT ;返回操作系统,常用值为0。 • 例: .STARUP … .EXIT 0 END
二、 处理器选择 功能:选择对应的指令集,也即对应的汇编执行语句集 放在程序最前面 缺省值为.8086 此类指令主要有: .8086选择8086指令系统 ● .286选择80286指令系统 ● .286P选择保护方式下80286指令系统 ● .386选择80386指令系统 .386P选择保护方式下80386指令系统 .486选择80486指令系统 ● .486P选择保护方式下80486指令系统 ● .586选择Pentium指令系统 .586P 选择保护方式下Pentium指令系统 Ji Lin University China COMPUTEP SCIENCE AND TECHNOLOGY
COMPUTER SCIENCE AND TECHNOLOGY COMPUTER SCIENCE AND TECHNOLOGY 二、处理器选择 • 功能:选择对应的指令集,也即对应的汇编执行语句集 • 放在程序最前面 • 缺省值为.8086 • 此类指令主要有: • .8086 选择8086指令系统 • .286 选择80286指令系统 • .286P 选择保护方式下80286指令系统 • .386 选择80386指令系统 • .386P 选择保护方式下80386指令系统 • .486 选择80486指令系统 • .486P 选择保护方式下80486指令系统 • .586 选择Pentium指令系统 • .586P 选择保护方式下Pentium指令系统
三、段定义 上 段定义:确定代码组织与数据存储的方式 2种:完整的段定义和简化的段定义 (MASM5.0以上) 完整的段定义包括: (1)segment.和end段定义 (2)ASSUME段分配 (3) GROUP段组定义 Ji Lin University China COMPUTER SCIENCE AND TECHNOLOGY
COMPUTER SCIENCE AND TECHNOLOGY COMPUTER SCIENCE AND TECHNOLOGY 三、段定义 • 段定义:确定代码组织与数据存储的方式 • 2 种 : 完整的段定义和 简 化 的 段 定 义 (MASM 5.0以上) • 完整的段定义包括: (1)segment和end段定义 (2)ASSUME段分配 (3)GROUP 段组定义
CHINA segment7和end段定义 (1) ● 格式: 段名 segment[定位类型][组合类型] [字长类型][类别'] s●● 段名 end 功能:定义段名、段属性。 一般情况下,选项可以不用,用默认值,但若需 连接本程序和其他程序,就要使用这些说明。 段名是段的标识符,指明段的基址,由程序员指 定。 Ji Lin University China COMPUTEP CIRNCE AND里COGY
COMPUTER SCIENCE AND TECHNOLOGY COMPUTER SCIENCE AND TECHNOLOGY segment和end段定义 (1) • 格式: 段名 segment [定位类型][组合类型] [字长类型][‘类别’] … … 段名 end • 功能:定义段名、段属性。 • 一般情况下,选项可以不用,用默认值,但若需 连接本程序和其他程序,就要使用这些说明。 • 段名是段的标识符,指明段的基址,由程序员指 定
segment7和end段定义(2) 上 ①定位类型 ● 定位类型:指定段起始边界,5种 ● BYTE:任意位置 ● WORD:偶地址,地址低1位为0 DWORD:4的倍数地址,地址低2位为0 PARA:16的倍数地址,地址低4位为0 PAGE:256的倍数地址,地址低8位为0,一页 的起点,默认值。 Ji Lin University China COMPUTER SCIENCE AND TECHNOLOGY
COMPUTER SCIENCE AND TECHNOLOGY COMPUTER SCIENCE AND TECHNOLOGY segment和end段定义 (2) ①定位类型 • 定位类型:指定段起始边界,5种 • BYTE: 任意位置 • WORD: 偶地址,地址低1位为0 • DWORD:4的倍数地址,地址低2位为0 • PARA: 16的倍数地址,地址低4位为0 • PAGE: 256的倍数地址,地址低8位为0,一页 的起点,默认值
segment和end段定义 (3) ②组合类型 组合类型:表示本段与其它段之间,具有相同段名的各段的组合 关系,为连接程序提供信息,属于连接类型,6种。 PUBLIC:本段连接时将与有相同段名.public类型的其它段连接在 一起,连接次序由连接命令指定(共用一个段),即同名段连接 在一起,有共同段地址。 STACK:用于说明堆栈段,把不同程序段中的具有SARCK类型的 同名段组合而形成一个堆栈段,其长度为各原有段的总和: LINK自动将新段的段地址送SS,长度送SP,若未定义SARCK类 型,需在程序中用指令设置SS、SP。 2MPN:本段连接时,使具有COMMON类型的同名段具奉 ● 同一个起始地址,所以会产生覆盖,新段的长度是最 COMMON段的长度,新段的内容取决于依次覆盖的最后内容。 MEMORY:表示该段应定位在所有段的最下面(即地址最大的区 域),如果模块中不止一个MEMORY段,以第一个遇到的作为 MEMORY段,其它段作为COMMON段处理,而LINK程序在 处理MEMORY时与PUBLICI同样对待。 PRIVATE:独立段,与其它段逻辑上没有关系,不与同名段合并, 默认值。 AT表达式指定本段起始地址为“表达式”,偏移量为0,不能 用于代码段,Lin University China
COMPUTER SCIENCE AND TECHNOLOGY COMPUTER SCIENCE AND TECHNOLOGY segment和end段定义 (3) ②组合类型 • 组合类型:表示本段与其它段之间,具有相同段名的各段的组合 关系,为连接程序提供信息,属于连接类型,6种。 • PUBLIC:本段连接时将与有相同段名.public类型的其它段连接在 一起,连接次序由连接命令指定(共用一个段),即同名段连接 在一起,有共同段地址。 • STACK:用于说明堆栈段,把不同程序段中的具有SARCK类型的 同名段组合而形成一个堆栈段,其长度为各原有段的总和, LINK自动将新段的段地址送SS,长度送SP,若未定义SARCK类 型,需在程序中用指令设置SS、SP。 • COMMON:本段连接时,使具有COMMON类型的同名段具有 同 一 个起 始地 址 , 所 以会 产生 覆盖 , 新 段的 长 度是 最 长 COMMON段的长度,新段的内容取决于依次覆盖的最后内容。 • MEMORY:表示该段应定位在所有段的最下面(即地址最大的区 域),如果模块中不止一个MEMORY段,以第一个遇到的作为 MEMORY段,其它段作为COMMON段处理,而LINK程序在 处理MEMORY时与PUBLIC同样对待。 • PRIVATE:独立段,与其它段逻辑上没有关系,不与同名段合并, 默认值。 • AT 表达式:指定本段起始地址为“表达式”,偏移量为0,不能 用于代码段
segment和end段定义(4) ③字长类型 字长类型:386以后,说明使用16位寻址方式 还是32位寻址方式。 .USE16:16位寻址方式,段长≤64KB,16位段 地址,16位偏移量,默认值。 .USE32:32位寻址方式,段长≤4GB,16位段 地址,32位偏移量。 ④类别 类别:引号括起的字符串,连接时,'类别”相 同的分段(他们可能不同名)均放在连续的存储空 间中,但他们仍然是不同的分段(连续空间)。 Ji Lin University China COMPUTER SCIENCE AND TECHNOLOGY
COMPUTER SCIENCE AND TECHNOLOGY COMPUTER SCIENCE AND TECHNOLOGY segment和end段定义 (4) ③字长类型 • 字长类型: 386以后,说明使用16位寻址方式, 还是32位寻址方式。 • .USE16: 16位寻址方式,段长≤64KB,16位段 地址,16位偏移量,默认值。 • .USE32: 32位寻址方式,段长≤4GB,16位段 地址,32位偏移量。 ④类别 • 类别:引号括起的字符串,连接时,’类别’相 同的分段(他们可能不同名)均放在连续的存储空 间中,但他们仍然是不同的分段(连续空间)