当前位置:高等教育资讯网  >  中国高校课件下载中心  >  大学文库  >  浏览文档

《计算机汇编语言》课程教学资源(教案讲义)第四章 汇编语法及其程序格式

资源类别:文库,文档格式:DOC,文档页数:7,文件大小:94.5KB,团购合买
第四章汇编语法及其程序格式 1.教学目的:掌握微型汇编语言格式和程序设计方法 2.教学要求: ①熟悉汇编语言程序的结构、语句类型和格式。 ②熟悉数据项及表达式,要求能明确区分标号和变量。 ③熟悉各类伪指令,要求掌握常用伪指令格式和应用。 ④熟悉汇编语 DEBUG言上机过程和调试 3.教学重点: ①指令语句格式和伪指令语句格式 ②汇编语言程序格式。
点击下载完整版文档(DOC)

第四章汇编语法及其程序格式 1.教学目的∶掌握微型汇编语言格式和程序设计方法 2.教学要求 ①熟悉汇编语言程序的结构、语句类型和格式。 ②熟悉数据项及表达式,要求能明确区分标号和变量 ③熟悉各类伪指令,要求掌握常用伪指令格式和应用。 ④熟悉汇编语言上机过程和 DEBUG调试 3.教学重点 ①指令语句格式和伪指令语句格式 ②汇编语言程序格式 4.掌握难点 ①伪指令 ②伪指令存储器分配技术 5.教学进程安排:P102~133 6.教学方法 课堂讲授 7.教学内容摘要 4.1汇编语言语句格式 4.1.1语句种类 【例4-1】先给出一个完整的汇编语言源程序,该程序的功能是完成两个字节数据相加。 SEGMENT ;段定义开始(DATA段) BUF1 第1个加数; BUF2 DB 2AH 第2个加数 ;准备用来存放和数的单元 DATA ENDS 段定义结束(DATA段) CODE SEGMENT ;段定义开始(CDE段) ASSUME CS:CODE,DS:DATA:规定DATA、CODE分别为数据段和代码段 START DATA 数据段寄存器DS赋值 ALS BUFI 取第1个加数 ADD AL BUF2:和第2个加数相加 0SUM,AL;存放结果 4CH IN 21H ;返回DOS状态 CODE ENDS ;段定义结束(CDE段) END START:整个源程序结束

第四章 汇编语法及其程序格式 1.教学目的:掌握微型汇编语言格式和程序设计方法 2.教学要求: ① 熟悉汇编语言程序的结构、语句类型和格式。 ② 熟悉数据项及表达式,要求能明确区分标号和变量。 ③ 熟悉各类伪指令,要求掌握常用伪指令格式和应用。 ④ 熟悉汇编语言上机过程和 DEBUG 调试 3.教学重点: ①指令语句格式和伪指令语句格式 ②汇编语言程序格式。 4.掌握难点: ①伪指令 ②伪指令存储器分配技术 5.教学进程安排:P102~133 6.教学方法: 课堂讲授 7.教学内容摘要: 4.1 汇编语言语句格式 4.1.1 语句种类 【例 4-1】先给出一个完整的汇编语言源程序,该程序的功能是完成两个字节数据相加。 DATA SEGMENT ;段定义开始(DATA 段) BUF1 DB 34H ;第 1 个加数; BUF2 DB 2AH ;第 2 个加数 SUM DB ? ;准备用来存放和数的单元 DATA ENDS ;段定义结束(DATA 段) CODE SEGMENT ;段定义开始(CODE 段) ASSUME CS:CODE,DS:DATA ;规定 DATA、CODE 分别为数据段和代码段 START: MOV AX, DATA MOV DS, AX ;给数据段寄存器 DS 赋值 MOV AL, BUF1 ;取第 1 个加数 ADD AL, BUF2 ;和第 2 个加数相加 MOV SUM,AL ;存放结果 MOV AH, 4CH ; INT 21H ;返回 DOS 状态 CODE ENDS ;段定义结束(CODE 段) END START ;整个源程序结束

从上面这个例子可以看出,汇编语言源程序由若干个语句组成语句分为如下2类。 .指令语句 2.伪指令语句 4.1.2语句格式 指令语句和伪指令语句的格式是类似的,格式如下: [名字]操作码操作数[:注释] 1.名字 (1)名字的标识符 (2)名字的定义规则 (3)名字的2种主要形式 ①标号 ②变量 2.操作码 3.操作数 (1)常数 (2)表达式 ①算术运算符 ②逻辑运算符 ③关系运算符 4.注释项 4.2伪指令与伪操作 4.2.1定义符号的伪指令 等值伪指令EQU 格式: 100h 4.2.2定义数据的伪指令 变量]助记符操作数,…,操作数[;注释] 60d 功能:为操作数分配存储单元,并用变量与存储单元建立联系D6 OFFFD 【例4-2】操作数可以是常数,或者是表达式 (根据该表达式可以求得一个常数),如 DATA BYTE DB 10, 4, 10H DATA WORD DW 100, 100H, -5 图4.1例4-2的汇编结果 DATA DW DD 3C, OFFFDH 汇编程序可以在汇编期间在存储器中存入数据 汇编后的内存分布如图4.1所示。 【例4-3】操作数也可以是字符串,如 MESSAGE HELLO

从上面这个例子可以看出,汇编语言源程序由若干个语句组成,语句分为如下 2 类。 1.指令语句 2.伪指令语句 4.1.2 语句格式 指令语句和伪指令语句的格式是类似的,格式如下: [名字] 操作码 操作数 [;注释] 1.名字 ⑴名字的标识符 ⑵名字的定义规则 ⑶名字的 2 种主要形式 ①标号 ②变量 2.操作码 3.操作数 ⑴常数 ⑵表达式 ①算术运算符 ②逻辑运算符 ③关系运算符 4.注释项 4.2 伪指令与伪操作 4.2.1 定义符号的伪指令 1. 等值伪指令 EQU 格式: EQU 2. 等号伪指令 = EMP=7 EMP=EMP+1 3. 解除定义伪指令 PURGE 格式:PURGE 4.2.2 定义数据的伪指令 [变量] 助记符 操作数,…,操作数 [;注释] 功能:为操作数分配存储单元,并用变量与存储单元建立联系。 DB、DW、DD、DQ、DT 【例 4-2】操作数可以是常数,或者是表达式 (根据该表达式可以求得一个常数),如 DATA_BYTE DB 10,4,10H DATA_WORD DW 100,100H,-5 图 4.1 例 4-2 的汇编结果 DATA_DW DD 3C,OFFFDH 汇编程序可以在汇编期间在存储器中存入数据, 汇编后的内存分布如图 4.1 所示。 【例 4-3】操作数也可以是字符串,如: MESSAGE DB ‘HELLO’ 0A 04 10 64 00 00 01 FB FF 3C 00 00 00 FD FF 00 00 DATA_BYT E DATA_WOR D DATA_DW 10d 4 10h 100d 60d 0FFFD h -5 100h

则存储器存储情况如图4.2(1)所示,而DB‘AB 和DW‘AB’的存储情况则分别如图4.2(2)和(3) 所示 【例4-4】操作数?可以保留存储空间,但不存入数据。 如:ABC DEF DW ? 52 经汇编后的存储情况如图43所示。 MESSAGE (1)字符串的存储 (2)DB 'AB' (3DW‘AB 图4.2例4-3的汇编结果 【例4-5】使用DUP实现重复定义 (0,1,2,?) ARRAY2 DB 100 DUP(? 汇编后的存储情况如图44所示。 由图可见,例4-5中的第一个语句和语句 ARRAY1DB0,1,2,?,0,1,2,?是 等价的 ARRAYI 01 52d ARRAY2 02 100个字节 图4.3例4-4的汇编结果 图4.4例4-5的汇编结果 4.2.3定义程序开始和结束的伪指令 TITLE TEXT END [LABEL] 4.2.4指令集选择伪指令 8086 选择8086指令系统 ARRAY 0074 286 选择80286指令系统 选择保护方式下的80286指令系统 4.2.5地址计数器与对准伪操作 地址计数器$

则存储器存储情况如图 4.2⑴所示,而 DB ‘AB’ 和 DW ‘AB’的存储情况则分别如图 4.2⑵和⑶ 所示。 【例 4-4】操作数?可以保留存储空间,但不存入数据。 如:ABC DB 0,?,?,0 DEF DW ?,52,? 经汇编后的存储情况如图 4.3 所示。 图 4.2 例 4-3 的汇编结果 【例 4-5】 使用 DUP 实现重复定义 ARRAY1 DB 2 DUP(0,1,2,?) ARRAY2 DB 100 DUP( ? ) 汇编后的存储情况如图 4.4 所示。 由图可见,例 4-5 中的第一个语句和语句 ARRAY1 DB 0,1,2,?,0,1,2,?是 等价的。 图 4.3 例 4-4 的汇编结果 图 4.4 例 4-5 的汇编结果 4.2.3 定义程序开始和结束的伪指令 NAME MODULE_NAME TITLE TEXT END [LABEL] 4.2.4 指令集选择伪指令 .8086 选择 8086 指令系统 .286 选择 80286 指令系统 .286P 选择保护方式下的 80286 指令系统 4.2.5 地址计数器与对准伪操作 1. 地址计数器$ MESSAGE 48 45 4C 4C 4F 41 42 42 41 H E L L O A B B A ⑴字符串的存储 ⑵DB ‘AB’ ⑶DW ‘AB’ ARRAY 01 00 02 00 7C 00 03 00 04 00 82 00 0074 100 个字节 00 - - 00 - - 34 00 - - ABC DEF 52d 00 01 02 - 00 01 02 - - ┇ - ARRAY1 ARRAY2

JNE $+6 【例4-6】$用法示例 RRAY DW1,2,$+4,3,4,$+4 如汇编时ARAY分配的偏移地址为0074,则汇编后的存储 区将如图4.5所示 注意:ARAY数组中的两个$+4得到的结果是不同的,这是图4.5例4-6的汇编结果 由于$的值是在不断变化的缘故。当在指令中用到$时,它只代表该指令的首地址,而与$本身 所在的字节无关 2.ORG伪操作 ORG伪操作用来设置当前地址计数器的值,其格式为: ORG CONSTANT EXPRESS IO 3.EVEN伪操作 4. ALIGN伪操作 ALI6N伪操作为保证双字类型数组边界从4的倍数开始创造了条件,其格式为: ALIGN BOUNDARY 其中 BOUNDARY必须是2的幂,例如 DATA aliGn 4 ARRAY 100DUP(?) 就可保证ARAY的值为4的倍数。当然,ALGN2和EVEN是等价的。 4.2.6基数控制伪指令 RADIX EXPRESSION 4.2.7过程定义伪指令 可把具有独立功能的程序段定义为过程,供其它程序调用。 过程定义的语法格式为: 过程名> PROC NEAR/FA ENDP 4.3汇编语言源程序结构 4.3.1完整段定义的程序结构 SEGMENT NAME SEGMENT SEGMENT NAME ENDS ASSUME:段名[,:段名,…] ASSUME: NOTHING ENDS

JNE $+6 【例 4-6】$ 用法示例 ARRAY DW 1,2,$+4,3,4,$+4 如汇编时 ARRAY 分配的偏移地址为 0074,则汇编后的存储 区将如图 4.5 所示。 注意:ARRAY 数组中的两个 $+4 得到的结果是不同的,这是 图 4.5 例 4-6 的汇编结果 由于$的值是在不断变化的缘故。当在指令中用到$ 时,它只代表该指令的首地址,而与$本身 所在的字节无关。 2. ORG 伪操作 ORG 伪操作用来设置当前地址计数器的值,其格式为: ORG CONSTANT EXPRESSION 3. EVEN 伪操作 4. ALIGN 伪操作 ALIGN 伪操作为保证双字类型数组边界从 4 的倍数开始创造了条件,其格式为: ALIGN BOUNDARY 其中 BOUNDARY 必须是 2 的幂,例如: .DATA ┇ ALIGN 4 ARRAY DB 100 DUP(?) ┇ 就可保证 ARRAY 的值为 4 的倍数。当然,ALIGN 2 和 EVEN 是等价的。 4.2.6 基数控制伪指令 .RADIX EXPRESSION 4.2.7 过程定义伪指令 可把具有独立功能的程序段定义为过程,供其它程序调用。 过程定义的语法格式为: PROC NEAR/FAR ┇ RET ┇ ENDP 4.3 汇编语言源程序结构 4.3.1 完整段定义的程序结构 SEGMENT_NAME SEGMENT ┇ SEGMENT_NAME ENDS ASSUME :段名[,:段名,…] ASSUME :NOTHING SEGMENT [定位类型][组合类型][使用类型][类别] ┇ ENDS

1.定位类型( ALIGN TYPE 指定段的起始地址必须从小段边界开始,即段起始地址最低位必须为0。这 样,偏移地址可以从0开始。 BYTE 该段可以从任何地址开始。这样,起始偏移地址可能不是0。 该段必须从字的边界开始,即段起始地址必须为偶数。 DWORD该段必须从双字边界开始,即段起始地址的最低位必须为4的倍数。 PAGE该段必须从负的边界开始,即段起始地址的最低两个十六进制数位必须为0(该 地址能被256整除)。 定位类型的默认项是PARA,即若未指定定位类型时,则汇编程序默认为PARA 2.组合类型( COMBINE TYPE) 组合类型的默认项是 PRIVATE 3.使用类型( USE TYPE) USE16使用16位寻址方式 USE32使用32位寻址方式。 使用类型的默认项是USE16。 4.类别名( CLASS′) 在引号中给出连接时组成段组的类型名。类别说明并不能把相同类别的段合并起来,但在 连接后形成的装入模块中,可以把它们的位置靠在一起。 4.3.2简化段定义的程序结构 较新版本的汇编程序(MASM5.0与MASM6.0)除支持“完整的段定义伪操作”中所讨论的 SEGMENT伪操作外,还提供了一种新的较简单的段定义方法。 1. MODEL伪操作 MODEL伪操作的格式如下: MODEL MEMORY MODEL [, MODEL OPTIONS 2.简化的段定义伪操作 3.与简化段定义有关的预定义符号 4.用 MODEL定义存储模型时的段默认属性 4.33段组定义的程序结构 其格式如下: GRPNAME GROUP SEGNAME, SEGNAME.] 其中 GRPNAME为段组名, SEGNAME则为段名。 4.4汇编语言程序的上机过程 在计算机上运行汇编语言程序的步骤是 1.用编辑程序建立ASM源文件; 2.用MASM程序把ASM文件转汇编成OBJ文件; 3.用LINK程序把OBJ文件转连接成EXE文件; 4.用DS命令直接键入文件名就可执行该程序

1. 定位类型(ALIGN_TYPE) PARA 指定段的起始地址必须从小段边界开始,即段起始地址最低位必须为 0。这 样,偏移地址可以从 0 开始。 BYTE 该段可以从任何地址开始。这样,起始偏移地址可能不是 0。 WORD 该段必须从字的边界开始,即段起始地址必须为偶数。 DWORD 该段必须从双字边界开始,即段起始地址的最低位必须为 4 的倍数。 PAGE 该段必须从负的边界开始,即段起始地址的最低两个十六进制数位必须为 0(该 地址能被 256 整除)。 定位类型的默认项是 PARA,即若未指定定位类型时,则汇编程序默认为 PARA。 2. 组合类型(COMBINE_TYPE) 组合类型的默认项是 PRIVATE。 3. 使用类型(USE_TYPE) USE16 使用 16 位寻址方式。 USE32 使用 32 位寻址方式。 使用类型的默认项是 USE16。 4. 类别名(‘CLASS’) 在引号中给出连接时组成段组的类型名。类别说明并不能把相同类别的段合并起来,但在 连接后形成的装入模块中,可以把它们的位置靠在一起。 4.3.2 简化段定义的程序结构 较新版本的汇编程序(MASM5.0 与 MASM6.0)除支持“完整的段定义伪操作”中所讨论的 SEGMENT 伪操作外,还提供了一种新的较简单的段定义方法。 1.MODEL 伪操作 MODEL 伪操作的格式如下: .MODEL MEMORY_MODEL [, MODEL OPTIONS ] 2.简化的段定义伪操作 3.与简化段定义有关的预定义符号 4.用 MODEL 定义存储模型时的段默认属性 4.3.3 段组定义的程序结构 其格式如下: GRPNAME GROUP SEGNAME[,SEGNAME…] 其中 GRPNAME 为段组名,SEGNAME 则为段名。 4.4 汇编语言程序的上机过程 在计算机上运行汇编语言程序的步骤是: 1.用编辑程序建立 ASM 源文件; 2.用 MASM 程序把 ASM 文件转汇编成 OBJ 文件; 3.用 LINK 程序把 OBJ 文件转连接成 EXE 文件; 4.用 DOS 命令直接键入文件名就可执行该程序

文件 出错 EXMPOBJ EXMPEXE)出 EXMP.ASM 汇编程序 (EXMPLST) 连接程序 (EXMP MAP (EXMPCRF LINK (EXMPLIB WORD TASM H错 EDIT 说明:□]操作使用的工具○操作得到的文件 DEBUG 图4.7汇编语言程序的建立及汇编过程 4.4.1建立汇编语言的工作环境 为运行汇编语言程序至少要在磁盘上提供以下文件: 1.编辑程序,如EDIT.EXE 2.汇编程序,如MASM.EXE 3.连接程序,如LINK.EXE 4.调试程序,如DEBUG.COM 4.4.2汇编语言源程序上机过程 1.建立汇编源程序ASM文件 2.汇编产生OBJ文件 3.链接产生EXE文件 4.程序的调试和执行 5.生成COM文件 4.5动态调试程序DEUG 4.5.1 DEBUG的启动与退出 1. DEBUG的启动 DEBUG[] 2.G命令(执行) 格式:G[=[<字节串]

编辑程序 汇编程序 连接程序 文件 EXMP.ASM ASM LINK MASM TASM EDLINE WPS WORD EDIT 文件 EXMP.OBJ (EXMP.LST) (EXMP.CRF) 文件 EXMP.EXE (EXMP.MAP) (EXMP.LIB) DEBUG 出错 出错 出错 出错 说明: 操作使用的工具 操作得到的文件 图 4.7 汇编语言程序的建立及汇编过程 4.4.1 建立汇编语言的工作环境 为运行汇编语言程序至少要在磁盘上提供以下文件: 1.编辑程序,如 EDIT.EXE 2.汇编程序,如 MASM.EXE 3.连接程序,如 LINK.EXE 4.调试程序,如 DEBUG.COM 4.4.2 汇编语言源程序上机过程 1.建立汇编源程序 ASM 文件 2.汇编产生 OBJ 文件 3. 链接产生 EXE 文件 4. 程序的调试和执行 5. 生成 COM 文件 4.5 动态调试程序 DEBUG 4.5.1 DEBUG 的启动与退出 1.DEBUG 的启动 DEBUG[][] 2.退出 DEBUG 格式 -Q↙ 4.5.2 汇编、执行、跟踪与反汇编 1. A 命令(汇编) 格式:A [] 2. G 命令(执行) 格式:G[=][...] 3. T 命令(跟踪执行) 格式:T[=] 4. U 命令(反汇编) 格式:U[] 4.5.3 显示、修改内存和寄存器命令 1.D 命令(显示内存) 格式:D[]或 D[] 2. E 命令(将内容写入内存) 格式:E[[]]

3.R命令(修改寄存器) (显示所有寄存器和标志) R寄存器显示指定寄存器) (显示所有标志) 4.5.4磁盘文件操作 1.N命令(命名) 格式:N文件名>.] 2.W命令(写盘 格式:W[[[相对扇区号><扇区数》]] 4.5.5查找、比较、填充和移动内存命令 1.M命令(移动内存) 格式:M<源地址范围》<目标地址〉 2.C命令(比较) 格式:C<源地址范围》<目标地址〉 3.S命令(查找) 格式:S<地址范围》要查找的字节或字符串〉 4.F命令(填充) 格式:F<地址范围》<要填充的字节或字节串〉 4.5.6其他命令 H命令(十六进制运算) 格式:H值1值2 2.I命令(读端口信息) 格式为:I端口地址 3.0命令(输出到端口) 格式:0<端口地址入字节内容〉 8.参考资料:《IBM-PC汇编语言程序设计》沈美明 9.作业:P133习题4 10.总结:该部分为汇编编程基础知识,需熟记和掌握

3.R 命令(修改寄存器) 格式: R (显示所有寄存器和标志) R 寄存器 (显示指定寄存器) RF (显示所有标志) 4.5.4 磁盘文件操作 1.N 命令(命名) 格式:N[...] 2.W 命令(写盘) 格式:W[[]] 3.L 命令(读盘) 格式:L[[]] 4.5.5 查找、比较、填充和移动内存命令 1. M 命令(移动内存) 格式:M 2. C 命令(比较) 格式:C 3. S 命令(查找) 格式:S 4. F 命令(填充) 格式:F 4.5.6 其他命令 1. H 命令(十六进制运算) 格式: H 值 1 值 2 2. I 命令(读端口信息) 格式为:I 端口地址 3. O 命令(输出到端口) 格式:O 8.参考资料:《IBM-PC 汇编语言程序设计》 沈美明 9.作业:P133 习题 4 10.总结:该部分为汇编编程基础知识,需熟记和掌握

点击下载完整版文档(DOC)VIP每日下载上限内不扣除下载券和下载次数;
按次数下载不扣除下载券;
24小时内重复下载只扣除一次;
顺序:VIP每日次数-->可用次数-->下载券;
已到末页,全文结束
相关文档

关于我们|帮助中心|下载说明|相关软件|意见反馈|联系我们

Copyright © 2008-现在 cucdc.com 高等教育资讯网 版权所有