第三章汇编语言与汇编程序 机器语言—计算机能够直接识别并执行的二进制机器指令序列 优点:开销小、运行速度快; 缺点:难以编写和理解,编程效率很低。 汇编语言( Assembly Language)—用助记符号表示机器指令 代码、变量地址,标号等的符号指令序列。 优点:易记、易理解,易编写程序,大大提高了编程效率; 问题:需要将助记符号翻译为机器语言。 汇编语言源程序:用汇编语言编写的程序。 汇编程序:将助记符号翻译为机器语言的语言处理程序,以便 计算机能够识别。 汇编:将助记符号翻译为机器语言的过程。 理解以上几个名词概念 汇编语言、汇编语言源程序、汇编程序、汇编
第三章 汇编语言与汇编程序 机器语言—计算机能够直接识别并执行的二进制机器指令序列 优点:开销小、运行速度快; 缺点:难以编写和理解,编程效率很低。 汇编语言(Assembly Language) —用助记符号表示机器指令 代码、变量地址,标号等的符号指令序列。 优点:易记、易理解,易编写程序,大大提高了编程效率 ; 问题:需要将助记符号翻译为机器语言。 汇编语言源程序:用汇编语言编写的程序。 汇编程序:将助记符号翻译为机器语言的语言处理程序,以便 计算机能够识别。 汇编:将助记符号翻译为机器语言的过程。 理解以上几个名词概念: 汇编语言、汇编语言源程序、汇编程序、汇编
3.1汇编程序功能及上机过程 3.1.1汇编程序功能 汇编程序依赖于硬件,不同机型的系统有自己的汇编程序。 汇编程序的主要功能如下: (1)检测语法错 显示错误信息 (2)源程序文件—二进制目标文件(并输出*LST文件) (3)展开宏指令 一般汇编程序都应具有如下功能: 宏汇编功能 支持地址和数据的符号表示 支持内存管理 支持程序的模块化组织 支持多种类型的数据表示等
3.1 汇编程序功能及上机过程 3.1.1 汇编程序功能 汇编程序的主要功能如下: (1)检测语法错 显示错误信息 (2)源程序文件 二进制目标文件(并输出*.LST文件) (3)展开宏指令 一般汇编程序都应具有如下功能: • 宏汇编功能 • 支持地址和数据的符号表示 • 支持内存管理 • 支持程序的模块化组织 • 支持多种类型的数据表示等 汇编程序依赖于硬件,不同机型的系统有自己的汇编程序
3.1.2上机过程 修改源程序错误 上机过程 编辑程序 如图所示 FLLE. ASM→ 人理EL8T[汇编程字M FLE○B. 否 正确 是 理EMAP)x连接程LK FILE EXE 否 正确? 是 运行 FILE EXE 图31·汇编语言程序调试上机过程
3.1.2 上机过程 上机过程 如图所示
上机操作步骤: (1)汇编源程序(用 ML EXE命令) MLEXE命令行格式如下: ML[参数选项]源程序文件列表[LNK连接参数选项 例1汇编源程序文件 myprg. asm ML /c myprg asm 选项/c—只进行汇编产生二进制目标文件 myprg obj,不 做连接。 例2汇编源程序文件 myprg. asm并产生列表文件、可执行文件。 ML /FI /Sg myprg asm 无/c选项一产生目标文件 myprg obj,并自动连接产生执行文件 myprg. exe /F选项一产生列表文件 myprg Ist Sg选项一在列表文件中给出 myprg. asm中用到的汇编语言高级 语法等伪指令所产生的系统机器指令
上机操作步骤: (1) 汇编源程序 (用 ML.EXE命令) ML.EXE命令行格式如下: ML [/参数选项] 源程序文件列表 [/LINK 连接参数选项] 例1 汇编源程序文件 myprg.asm ML /c myprg.asm 选项/c——只进行汇编产生二进制目标文件myprg.obj ,不 做连接。 例2 汇编源程序文件myprg.asm并产生列表文件、可执行文件。 ML /Fl /Sg myprg.asm 无/c选项—产生目标文件myprg.obj,并自动连接产生执行文件 myprg.exe /Fl选项—产生列表文件myprg.lst /Sg选项—在列表文件中给出myprg.asm中用到的汇编语言高级 语法等伪指令所产生的系统机器指令
(2)连接产生执行文件( LINKEXE) 连接的操作步骤如下 C:> LINK myprg← Microsoft (R)Overlay Linker Version 5.03 Copyright(C)Microsoft Corp1984-1989 Allrightreserved Run File myprg EXE: List File Nul. MaP: Libraries[ lib]: t Definitions File [NUL. DEF (3)执行程序 C: >myprg 3.2汇编语言源程序的结构与书写格式 源程序由段组成,每段有一个段名, segment定义段起点, ends定义段结束点。每段由若千语句行组成,源程序以end结束。 汇编语言源程序是段结构的:代码段、数据段、堆栈段、附加段 例3-3p43
(2) 连接产生执行文件 ( LINK.EXE) 连接的操作步骤如下: C:> LINK myprg Microsoft(R)Overlay Linker Version 5. 03 Copyright(C)Microsoft Corp1984-1989. Allrightreserved. Run File [myprg.EXE]: List File [NUL.MAP]: Libraries [.LIB]: Definitions File [NUL.DEF] (3)执行程序 C:>myprg 3.2 汇编语言源程序的结构与书写格式 汇编语言源程序是段结构的:代码段、数据段、堆栈段、附加段 源程序由段组成,每段有一个段名,segment定义段起点, ends定义段结束点。每段由若干语句行组成,源程序以end结束。 例 3-3 p43
d过ta segment 定义拇段 例3-3 d40d(*) ;定义尔存储区及拇 ;数据段结 字符串传送 extra seginer止 定义附加畏 d(?) ;定义目的存储区 extra ;附加畏结 stack segment para stack stack ;定义畏 100a(0) ;堆栈长为1①0字竹 stack ;地栈畏结烹 gment ;定义代码段 pr 定义主过程开始 assume cs: code, ds: data, es: extra, ss: stack start ;程序执行的起始地址 ;为返面DoSm写的三条语句 s ax, ax ax. data ;用数拇段地址初始化DS段奇存器 nov ds, ax ax, extra ;用附加段地址初始化ES畏奇存器 mo es, ax ea si, stuffer ;尔字符串储区首址送SI寄存器 ;目的字符串存储区首址D礻器 ;设置才问标①DF0) mov ;字符串长度《寄在器 rep move ;传送字符串 ;返回DO main 中 ;±过程结水 ;代码畏结 d start ;乐程序结枣
例 3-3 字符串传送
33汇编语言语句格式与分类 汇编语言语句一般格式为 [标识符/语句标号]指令名[操作数序列][;注释] 标识符用来为变量、段及过程等命名 语句标号—标识符后加’:',提供转移地址 指令名指令可分为三类:机器指令、伪指令和宏指令 机器指令:指令系统中的指令,程序运行时由CPU执行 伪指令:汇编程序执行的操作,规定汇编程序如何按要求 进行汇编及分配内存 宏指令:由一系列指令或伪指令构成,汇编时展开成若千 条机器指令,用于提高编程效率。 (伪指令和宏指令由汇编程序在汇编期间处理) 操作数序列—可以是常量、变量、表达式、寄存器名或 标号等,用逗号隔开。 注释符——“;”后可给出语句注释,提高可读性和可理解性
3.3 汇编语言语句格式与分类 汇编语言语句一般格式为: [标识符/语句标号] 指令名 [操作数序列] [;注释] 标识符——用来为变量、段及过程等命名 语句标号——标识符后加 : ,提供转移地址 指令名——指令可分为三类:机器指令、伪指令和宏指令。 机器指令:指令系统中的指令,程序运行时由CPU执行; 伪指令:汇编程序执行的操作,规定汇编程序如何按要求 进行汇编及分配内存 。 宏指令:由一系列指令或伪指令构成,汇编时展开成若干 条机器指令,用于提高编程效率。 操作数序列——可以是常量、变量、表达式、寄存器名或 标号等,用逗号隔开。 (伪指令和宏指令由汇编程序在汇编期间处理 ) 注释符—— “; ”后可给出语句注释,提高可读性和可理解性
34常量、变量、标号、运算符和表达式 1)常量 00110110B389D4670B407H MOV AL.A 3.475E+5 Input a number' mov 用RADX伪指令改变默认进制,其格式为: RADIX n(n为默认进制的基数) 例如: RADIX16定义十六进制为默认的进制 (2)变量 段起点 变量名:存储单元的符号地址 变量值:存储单元中的数据 偏移量 变量的三种属性: 50 段值(SEG):变量所在段的起始地址 偏移量( OFFSET):段起点距离变量所在存储单 元位置的字节数 类型(TYPE):变量占用的字节数
3.4 常量、变量、标号、运算符和表达式 (1)常量 00110110B 389D 467O B407H 3.475E+5 'Input a number' (2)变量 变量名:存储单元的符号地址 变量值:存储单元中的数据 MOV AL, 'A' mov al, 'a' 变量的三种属性: 段值(SEG):变量所在段的起始地址 偏移量(OFFSET):段起点距离变量所在存储单 元位置的字节数 50 偏 移 量 段起点 类型(TYPE):变量占用的字节数 用.RADIX 伪指令改变默认进制,其格式为: .RADIX n ( n为默认进制的基数) 例如: .RADIX 16 定义十六进制为默认的进制
(3)标号 标号:存放指令的存储单元的符号地址,常用作转移地址。 CMP AX. BX INE NEXT NEXT: MOV AX. 0 标号的三种属性 段值(SEG):标号所在段的起始地址 偏移量( OFFSET):段起点距离标号所指存储单 元位置的字节数 类型(TYPE):NEAR,FAR NEAR:2字节转移地址(偏移地址)短指针(近指针)段内转移 FAR:4字节转移地址(段、偏移地址)长指针(远指针)段间转移
(3)标号 标号:存放指令的存储单元的符号地址,常用作转移地址。 NEAR :2字节转移地址 … CMP AX,BX JNE NEXT … NEXT: MOV AX,0 … 标号的三种属性: 段值(SEG):标号所在段的起始地址 偏移量(OFFSET):段起点距离标号所指存储单 元位置的字节数 类型(TYPE): NEAR , FAR (偏移地址) 短指针(近指针) 段内转移 FAR :4字节转移地址(段、偏移地址)长指针(远指针) 段间转移
(4)运算符和表达式 表达式:由汇编程序在汇编期间计算 写正确表达式的原则:表达式的值必须能够在汇编期间 确定地计算出来。 例如: Mov AX. BX+CNT LEA AX. BUF+3 运算符分四类 1)计算运算符 (1)算术运算符 MOV AL. 19 MOD 7 MOV AL. 5 同一段内两种有意义的地址运算 0两个单元地址相减:差是两个单元之间相距的字节数 ②一个单元地址加减一个常量 产生的新地址是该单元邻近单元的地址
1)计算运算符 (4)运算符和表达式 表达式:由汇编程序在汇编期间计算 写正确表达式的原则:表达式的值必须能够在汇编期间 确定地计算出来。 例如: MOV AX,BX+CNT LEA AX,BUF+3 运算符分四类: (1)算术运算符 MOV AL, 19 MOD 7 MOV AL, 5 同一段内两种有意义的地址运算: 两个单元地址相减: 一个单元地址加减一个常量: 差是两个单元之间相距的字节数 产生的新地址是该单元邻近单元的地址