113汇编语言格式内容摘要:

23:05 32 ( 2) 组合类型 说明程序连接时的段合并方法 PRIVATE 为私有段,连接时不与其他模块中的同名段合并 PUBLIC 不同模块的同名段连接在一起,形成参与邻接模块所公用的物理段 COMMON 产生一个覆盖段。 与其它具有该类型的同名段拥有同一起始地址,共享相同的存储区。 共享存储区的长度由同名段中最大的段确定 STACK 功能同 PUBLIC,但新形成的段为堆栈段 默认项是 PRIVATE 现代微机原理与接口技术 23:05 33 ( 3) 使用类型 说明使用 16位还是 32位寻址方式 USE16 使用 16位寻址方式 USE32 使用 32位寻址方式 386以下处理器 默认项是 USE16, 386及以上处理器默认项是 USE32 ( 4) ‘类别名’ LINK 程序将‘类别名’相同的段依次序连续存放在 内存中。 如果这些段未选择 PUBLIC、 COMMON组合 类型,则这些段将各自独立 缺省‘类别名’,作空处理。 现代微机原理与接口技术 23:05 34 段定义伪指令示例 D_SEG SEGMENT PARA 39。 DATA39。 NUM1 DB 10 DUP(?) D_SEG ENDS S_SEG SEGMENT PARA 39。 STACK39。 DW 100 DUP(?) S_SEG ENDS E_SEG SEGMENT PARA 39。 DATA39。 STRING DB 39。 HELLO39。 E_SEG ENDS .... 现代微机原理与接口技术 23:05 35 2)指定段寄存器伪指令 格式: ASSUME 段寄存器:段名 [,段寄存器:段名 [...]] 操作: 明确段与段寄存器的关系。 说明: 代码段中必须至少有一个 ASSUME语句 ASSUME可以出现在源程序中的任意地方 仅说明段与段寄存器的对应关系,除了在程序装入时将代码段和堆栈段的段基址赋值给 CS和 SS外,并没有把数据段和附加段的段基址值送入 DS、ES、 GS和 FS寄存器中,需要在程序中显式赋值。 现代微机原理与接口技术 23:05 36 ASSUME语句示例 D_SEG SEGMENT PARA 39。 DATA39。 NUM1 DB 10 DUP(?) D_SEG ENDS S_SEG SEGMENT PARA 39。 STACK39。 DW 100 DUP(?) S_SEG ENDS E_SEG SEGMENT PARA 39。 DATA39。 STRING DB 39。 HELLO39。 E_SEG ENDS C_SEG SEGMENT PARA 39。 CODE39。 ASSUME CS:C_SEG, DS:D_SEG, ES:E_SEG。 SS:S_SEG START: ...... C_SEG ENDS END START 这里明确 D_SEG段为数据段, S_SEG段为堆栈段, E_SEG段为附加段, C_SEG为代码段。 现代微机原理与接口技术 23:05 37 段寄存器的赋值 ( 1)代码段寄存器 CS(及 IP)的赋值 当 连接程序 扫描到程序结束伪指令 END符号地址时 ,系统 自动 将当前代码段基址赋值给 CS,同时把 END后的符号地址送入 IP 系统自动填入 SS示例 S_SEG SEGMENT PARA STACK 39。 STACK39。 DW 200 DUP(?) S_SEG ENDS 系统自动填入 被定义为堆栈的段选择 STACK组合类型,当含有该段的目标程序被装入存储器时 ,系统自动取该段基址送 SS,取段长度送 SP ( 2)堆栈寄存器 SS(及 SP)的填入有以下两种方法 : 现代微机原理与接口技术 23:05 38 用指令填入 被定义为堆栈的段在组合类型位置上缺省 ,在代码段中用 3条 MOV指令完成这个功能 . 用指令填入 SS示例 S_SEG SEGMENT PARA 39。 STACK39。 DW 200 DUP(?) TOP LABLE WORD S_SEG ENDS C_SEG SEGMENT PARA 39。 CODE39。 ASSUME CS:C_SEG,SS:S_SEG,DS:NOTHING,ES:NOTHING START: MOV AX, S_SEG ;填入段基址 MOV SS, AX LEA SP, TOP ;填入栈指针 C_SEG ENDS END START 现代微机原理与接口技术 23:05 39 ( 3)数据段寄存器 DS及附加段寄存器的填入 用 MOV传送指令填入 填入 DS、 ES示例 D_SEG SEGMENT PARA ‘DATA’ ;数据段 X DW ?, 4000H, 100 DUP(?) D_SEG ENDS E_SEG SEGMENT PARA ‘DATA’ ;附加段 STRING DB 39。 EXAMPLE39。 E_SEG ENDS C_SEG SEGMENT PARA 39。 CODE39。 ASSUME CS:C_SEG,DS:D_SEG,ES:E_SEG,SS:S_SEG START: MOV AX, D_SEG MOV DS, AX ;数据段基址 DS MOV AX, E_SEG MOV ES, AX ;附加段基址 ES 现代微机原理与接口技术 23:05 40 3)存储模型与简化段定义伪指令 模式选择伪指令 MODEL 格式: .MODEL 模式选择符 功能:指明简化段所用内存模式  Tiny模式(微模式) :所有数据和代码放入同一物理段内, 可写成 .COM文件形式  Small模式(小模式) :所有数据放在一个 64KB的段, 所有代码放在一个 64KB的段  Medium模式(中模式) :所有数据放在一个 64KB的段, 代码可放在多个段  Compact模式 (压缩模式) :所有代码放在一个 64KB的段, 数据可放在多个段  Large模式(大模式) :代码和数据都可用多个段  Huge:与 Large相同,但数据段大小可超过 64KB  Flat : 允许用户用 32位偏移量 现代微机原理与接口技术 23:05 41 简化的段定义伪指令 数据段定义伪指令 格式: .DATA [名字 ] 功能:定义数据段,若有多个数据段,用名字区别。 只有一个数据段时,段名为 @DATA 栈段定义伪指令 格式: .STACK [名字 ] 功能:定义一个栈段,并形成 SS及 SP的初值, SP的默认值为 1024,隐含段名为 @STACK 代码段定义伪指令 格式: .CODE [名字 ] 功能:定义代码段,若有多个代码段,用名字区别。 只有一个代码段时,段名为 @CODE 现代微机原理与接口技术 23:05 42 简化段定义示例 .MODEL SMALL .STACK 100H .DATA …… .CODE START: MOV AX, @DATA MOV DS, AX …… MOV AX, 4C00H INT 21H END START 现代微机原理与接口技术 23:05 43 (四)程序开始和结束伪指令 1)程序开始伪指令 格式 1: NAME 模块名 操作 1: 用此名作为模块名 如缺省则以模块的源程序文件名为模块名 模块命名伪指令示例 NAME MODE1 …… NAME MODE2 …… TITLE EXAM 格式 2: TITLE 文本 操作 2:没有 NAME时,用其前 6个字符作为模块名 可在列表文件中打印标题 现代微机原理与接口技术 23:05 44 2)源程序结束控制伪指令 格式 1: END 格式 2: END 符号地址 功能:告诉汇编程序,源程序到此结束,并将符号地址 所示单元的段基址和偏移量自动装入 CS和 IP中 源程序结束控制伪指令示例 C_SEG SEGMENT PARA 39。 CODE39。 ASSUME CS:C_SEG, …... START: ...... C_SEG ENDS END START 说明: 源程序从标号 START处开始执行 现代微机原理与接口技术 23:05 45 (五)表达式赋值伪指令( EQU, =) 格式:名字 EQU 表达式 名字 = 表达式 操作:为表达式取一个名字,供以后引用 说明: 表达式可为常数、变量、标号、指令助记符、字符串 在一个源程序中,被 EQU伪指令赋值的符号 不能 再次赋值,而用 =定义的符号名可重复定义 . 赋值语句仅在汇编源程序时,作为替代符号用, 不产生目标代码, 也不占有存储单元 现代微机原理与接口技术 23:05 46 赋值伪指令示例 CONST EQU 100*2 ;定义符号常数 ADDRS EQU [BX+10] ;为地址表达式定义名字 CHAR EQU ‘COMPUTER’ ;为字符串定义名字 COUNT = AX ;给寄存器定义名字 ... MOV BX, CONST ;引用 ADD BX, COUNT SUB ADDRS, 20 ... 等同于 MOV BX, 100*2 ADD BX, AX SUB [BX+10], 20 现代微机原理与接口技术 23:05 47 (六)地址计数器与对准伪指令 1)地址计数器 $ 示例 1 ARRAY DW 1, 2, $+4, 3, 4, $+3 ARRAY 01 0074H 00 02 00 7C 0078H 00 03 00 04 00 81 007EH 00 示例 2 BUFFER DB 1, 2, 3, 4, 5 COUNT EQU $BUFFER 数据定义的结果: COUNT的值即为 BUFFER的长度 示例 3 OUT 21H, A。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。