汇编语言04.ppt_第1页
汇编语言04.ppt_第2页
汇编语言04.ppt_第3页
汇编语言04.ppt_第4页
汇编语言04.ppt_第5页
已阅读5页,还剩89页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第4章 汇编语言 教学重点 第4章是程序设计的基础重点讨论汇编语言程序的编写格式定义符号和数据汇编程序的编译 链接和运行难点是各种伪指令 3 第四章主要内容 4 1汇编语句格式4 2汇编语言中数据的表示方法4 3运算符号4 4伪指令4 5汇编语言的上机过程补充内容 4 4 1汇编语句格式 4 1 1字符集4 1 2汇编语句格式 5 Microsoft的宏汇编语言由下列字符组成 1 英文字母 A Z和a z 2 数字字符 0 9 3 算术运算符 4 关系运算符 5 分隔符 空格 TAB 制表符 6 控制符 CR 回车 LF 换行 FF 换页 7 其它字符 下划线 4 1 1字符集 6 DSEGSEGMENT 数据段开始DATAlDB13H 26H 原始数据DATA2DW0 保存结果单元DSEGENDS 数据段结束SSEGSEGMENTSTACK 堆栈段开始SKTOPDB20DUP 0 SSEGENDS 堆栈段结束CSEGSEGMENT 代码段开始ASSUMECS CSEG DS DSEG SS SSEGSTART MOVAX DSEG 初始化数据段基址MOVDS AXMOVAX SSEG 初始化堆栈段基址MOVSS AXMOVSP LENGTHSKTOP 设置堆栈指针MOVAL DATA1 取第一个数据ADDAL DATAl十1 与第二个数据相加MOVBYTEPTRDATA2 AL 保存结果MOVAH 4CHINT21H 返回DOSCSEGENDS 代码段结束ENDSTART 源程序结束 汇编语句最多由四个域组成 标号 操作符操作数 注释 4 1 2汇编语句格式 TYPEDATA1 1TYPEDATA2 2 7 1 标号 1 定义 程序设计人员自己定义的标识符号 用来表示数据 数据在内存中的偏移地址或指令代码在内存中的偏移地址 2 标号的组成规则1 组成标号的字符 A Z a z 0 9 和 下划线 2 标号的最大长度为3l 字符个数 3 标号的第一个字符不能是0 9的数字 4 机器指令语句中标号后面必须以冒号结束 伪指令语句中的标号后面不允许有冒号 标号 操作符操作数 注释 8 1 标号 3 标号的三个属性1 段属性 标号所在的逻辑段即是它的段属性 标号所在逻辑段段基址的高16位值即是它的段属性值 标号的段属性值可用SEG算符得到 2 偏移量属性 标号所标识的单元的偏移地址即是它的偏移量属性值 可用OFFSET算符得到 3 类型属性 标号所标识的单元中存放的数据或指令代码的类型 共有7种 标号的类型属性值可用TYPE算符得到 DBDWDDDQDT 9 1 标号 标号的定义 标号在标号域字段出现 标号的引用 标号在操作数字段出现 注意 标号不能重复定义 一个标号在标号域字段只能出现一次 未定义标号不能引用 保留字不能用作自定义标号使用 10 操作符可以是指令助记符 伪指令助记符 宏指令符号 3 操作数操作数是操作符操作的对象 可以是数据本身 也可以是标号 寄存器名或算术表达式 4 注释注释是对指令功能的说明 目的是使自己或他人在阅读分析程序时方便 2 操作符 标号 操作符操作数 注释 标号 操作符操作数 注释 标号 操作符操作数 注释 11 名字与标识符 补充 标号是反映硬指令位置 逻辑地址 的标识符 后跟一个冒号分隔名字是反映伪指令位置 逻辑地址 和属性的标识符 后跟空格或制表符分隔 没有一个冒号标识符 Identifier 一般最多由31个字母 数字及规定的特殊符号 如 组成 不能以数字开头 默认情况下 汇编程序不区别标识符中的字母大小写一个程序中 每个标识符的定义是唯一的 还不能是汇编语言采用的保留字 12 保留字 补充 保留字 ReservedWord 是汇编程序已经利用的标识符 主要有 硬指令助记符 例如 MOV ADD伪指令助记符 例如 DB EQU操作符 例如 OFFSET PTR寄存器名 例如 AX CS预定义符号 例如 data 汇编语言大小写不敏感 13 分隔符 补充 语句的4个组成部分要用分隔符分开标号后用冒号 注释前用分号操作数之间和参数之间使用逗号分隔其他部分通常采用空格或制表符多个空格和制表符的作用与一个相同MASM和TASM都支持续行符 标号 硬指令助记符操作数 操作数 注释名字伪指令助记符参数 参数 注释 14 MOVCX 0 传送指令 具有2个操作数DELAY NOP 空操作指令 没有操作数 带有标号LOOPDELAY 循环指令 标号DELAY说明转移位置BUFFERDB1 2 3 4 5 6 7 数据定义伪指令 在主存中开辟7个连续的字节单元 初值依次为1 7 BUFFER表示首地址 汇编语言语句实例 15 4 2 1数据在机内的表示4 2 2汇编语言中数据的书写形式 4 2汇编语言中数据的表示方法 16 4 2 1数据在机内的表示 1 数据的符号用0表示正 1表示负 对于定点表示有原码 反码 补码等表示方法 2 数据的定点表示法1 小数点在最低位之后 代表纯整数 16位表示范围为 32768 327672 小数点在最高位和次高位之间 代表纯小数 17 3 浮点数据表示法 S 阶码 尾数 1 0 63 64 79 临时实数 尾数63位 阶码15位 过余量16383 3FFFH 1 fff fff 2n 尾数 阶码 在浮点表示中 分为尾数和阶码两部分 有多种表示方法 现在一般用IEEE的表示方法 18 符号位变化11000010000100101000000000000000用16进制表示为C2128000 转换为二进制为100100 101规格化后为1 00100101 25阶码为101加过余量127后01111111 00000101 10000100尾数 23位 00100101000000000000000符号 阶码 尾数01000010000100101000000000000000用16进制表示为42128000 3 浮点数据表示法 举例 36 625 36 625 思考 0 00101B 1 01X2 3 01111111 00000011 01111100 11 01000000000000000000000 001111100 19 4 数据的表示范围 1 一个字节 8位 无符号整数0 255补码表示的带符号整数 128 1272 二个字节 16位 无符号整数0 65535补码表示的带符号整数 32768 32767 20 4 2 2汇编语言中数据的书写形式 常数 常量 表示一个固定的数值它又分成多种形式 1 十进制常数 2 十六进制常数 3 二进制常数 4 八进制常数 5 字符串常数 6 符号常数 7 数值表达式 21 十进制常数 由0 9数字组成 以字母D或d结尾缺省情况下 后缀D或d可以省略汇编语言大小写不敏感 D和d通用例如 100 255D十进制科学记数法常数 由十进制数 E和指数组成 如0 2467E 5 MASMV6 0支持 22 十六进制常数 由0 9 A F组成 以字母H或h结尾以字母A F开头的十六进制数 前面要用0表达 以避免与其他符号混淆 汇编语言大小写不敏感 H和h通用 例如 64H 0FFh 0B800H 23 二进制常数 由0或1两个数字组成 以字母B或b结尾 汇编语言大小写不敏感 B和b通用 例如 01101100B 24 八进制常数 由0 7数字组成 以字母Q或q结尾汇编语言大小写不敏感 Q和q通用例如 144Q各种进制的数据以后缀字母区分 默认不加后缀字母的是十进制数MASM提供基数控制 RADIX伪指令可以改变默认进制 其格式是 RADIXn 25 字符串常数 用单引号或双引号括起来的单个字符或多个字符 其数值是每个字符对应的ASCII码的值 可以嵌套使用 例如 d 64H AB 4142H Hello Everybody 26 符号常量 利用一个标识符表达的一个数值MASM提供等价机制 用于常量定义符号常量定义伪指令 等价伪指令EQU符号名EQU数值表达式符号名EQU等号伪指令 符号名 数值表达式常数若使用有意义的符号名来表示 可以提高程序的可读性 同时更具有通用性 实例 27 符号定义DosWriteCharequ2CarriageReturn 13CallDOSequint21h符号应用 左边程序段等价右侧的符号形式 movah 2 movah DosWriteCharmovdl 13 movdl CarriageReturnint21h CallDOS 符号常数实例 28 数值表达式 数值表达式一般是指由运算符连接的各种常数所构成的表达式汇编程序在汇编过程中计算表达式 最终得到一个数值程序运行之前 就已经计算出了表达式 所以 程序运行速度没有变慢 但增强程序的可读性 29 4 3运算符号 4 3 1算术运算符4 3 2逻辑运算符4 3 3关系运算符4 3 4分析算符4 3 5组合算符4 3 6字节分离算符4 3 7记录专用算符4 3 8算符的优先级 30 4 3 1算术运算符 七个 MOD SHL SHR 与通常的用法相同 加 和减 运算符还可以用于地址表达式除加 减外 其他运算符的参数必须是整数MOD 取余 两数相除之余数 例10MOD3 1SHL 左移 按二进制左移 例10HSHL2 40HSHR 右移 按二进制右移 例10HSHR2 04H 00010000 00010000 00 00010000 000100 00 31 4 3 2逻辑运算符 AND 与 按位与76HAND23H 22H OR 或 按位或76HOR23H 77H 32 XOR异或 按位异或 76HXOR23H 55H NOT 非 按位取反NOT76H 89H 4 3 2逻辑运算符 33 4 3 3关系运算符 用于比较和测试符号数值EQ NE LT LE GT GE MASM用0FFFFH 补码 1 表示条件为真MASM用0000H表示条件为假movbx PORTLT5 AND20H OR PORTGE5 AND30H 当PORT 5时 汇编结果为movbx 20H 否则 汇编结果为movbx 30H 34 4 3 4分析算符 有5个 SEG OFFSET TYPE SIZE LENGTH 其中 SEG OFFSET TYPE用来将一个标号分解成它的三种属性值 格式如下 SEGOFFSETTYPE SLAB 其中 SLAB为用户自定义的标识符号 SEG算符用于求得该标号的段属性值 OFFSET算符用于求得该标号的偏移量属性值 TYPE算符用于求得该标号的类型属性值 35 4 3 4分析算符 ALPHADB15 23 46BETADW4267H 25HMOVAX SEGALPHAMOVBX SEGBETAMOVCX OFFSETALPHAMOVDX OFFSETBETAMOVSI TYPEALPHAMOVDI TYPEBETA 举例 结果 AX 2000H BX 2000HCX 0001H DX 0004HSI 1 DI 2 36 4 3 4分析算符 SIZE和LENGTH的格式如下 SIZELENGTH SLAB 其中 SLAB为用户自定义的标识符号 此标号必须是数据定义伪指令DB DW DD DQ或DT定义的 而且伪指令后面的数据项必须是DUP分配的内存单元 SIZE运算符用于求得伪指令为标号分配的字节个数 LENGTH运算符则求得与标号类型相联系的数据个数 37 4 3 4分析算符 举例 ALPHADB5dup 0 BETADW1 2 3GAMADD1 2 3 4MOVAX SIZEALPHA AX MOVBX SIZEBETA BX MOVCX SIZEGAMA CX MOVAX LENGTHALPHA AX MOVBX LENGTHBETA BX MOVCX LENGTHGAMA CX SIZESLAB LENGTHSLAB TYPESLAB 5 6 16 5 3 4 38 4 3 5组合算符 有2个 PTR THIS1 PTR用来建立或临时改变标识符号的类型或存储器操作数的存储单元类型 格式如下 NEWTPTREXP其中 NEWT是要建立 或改变 的标号或存储单元的新的类型 可以是BYTE WORD DWORD QWORD TBYTE NEAR或FAR EXP是表达式 可以是用户自定义的标识符号 或用间接寻址 基址寻址 变址寻址或基变址寻址方式表示的存储器操作数的存储单元 2 THIS用来为一个标号建立一个新的类型 格式如下 THISNEWT 39 PTR的应用场合主要有两处 一种情况是当要访问的存储单元的类型不确定时 可以用PTR明确指明要访问的存储单元的类型 如 MOV BX 10H 4 3 5组合算符 MOVBYTEPTR BX 10H BX MOVWORDPTR BX 10H 10H 0 FFFFFH 10H00H 40 PTR组合算符的另一种应用场合是当要引用的标号类型和定义类型不一致时 可以用PTR临时改变标号的类型为我们所需要的类型 如 A1DB10H 20HMOVAX A1MOVAX WORDPTRA1 4 3 5组合算符 41 THIS组合算符建立的标号段与偏移就是下一个可用单元的段和偏移 类型是NEWT如 aBYTEDB10H 20HMOVAL aBYTEMOVAX WORDPTRaBYTE 4 3 5组合算符 aWORDEQUTHISWORD MOVAX aWORD 42 4 3 6字节分离算符 取数值的高半部分或低半部分HIGH LOW从一个字数值或符号常量中得到高 低字节movah HIGH8765h 等价于movah 87h从MASM6 0引入的HIGHWORD LOWWORD取一个符号常量 不能是其他常数 的高字或低字部分dd valueequ0ffff1234h 定义一个符号常量movax LOWWORDdd value 等价于movax 1234h 43 4 3 7记录专用算符 1 MASK2 WIDTH 不讲 44 4 3 8算符的优先级 表达式求值时 各种运算符的优先次序 由高至低 如下 1 括号内的表达式2 LENGTH SIZE WIDTH MASK 3 PTR OFFSET SEG TYPE 4 HIGH LOW 5 MOD SHL SHR 6 十 一 7 EQ NE LT LE GT GE 关系运算符 8 NOT 9 AND 10 OR XOR 优先级别相同时 按出现次序由左至右顺序计算 建议采用圆括号 显式表达 它可以极大地提高程序的可阅读性 45 思考题 下列哪些数据在汇编语言中的表示是正确的 101B138Q135HA3H3B3D 3DH3 34QAL 3HIGHAXBYTEPTRAX2AND3 5 46 4 4伪指令 4 4 1符号定义伪指令4 4 2数据定义伪指令4 4 3段定义伪指令4 4 4其他伪指令 伪指令最常使用 47 4 4 1符号定义伪指令 1 EQU等价伪指令EQU伪指令用来定义一个符号 用该符号代表机器指令助记符 伪指令助记符 寄存器名字 各种运算符号 常数等 格式如下 SNEQUEXP 举例 VALEQU100JIAEQUADDADREQU SI BX 1000H MOVAL VALJIAAL 10MOVADR AL MOVAL 100ADDAL 10MOV SI BX 1000H AL 48 4 4 1符号定义伪指令 2 等号伪指令 伪指令用来定义一个符号 用该符号代表表达式 常数等 格式如下 SN EXP 举例 VAL 100MOVAL VALVAL 200MOVAL VALVAL VAL 10MOVAL VAL MOVAL 100MOVAL 200MOVAL 210 49 3 伪指令与EQU伪指令的差别 伪指令只能代表表达式或常数 不能是指令助记符等 EQU定义的符号不能重复定义 而 定义的可以 4 4 1符号定义伪指令 分析下列各组语句 哪一组是正确的 XEQU100 XEQU100XEQU200X 200 X 100 X 100XEQU200X 200 50 4 4 2数据定义伪指令 数据定义伪指令用来定义一个存储单元的符号名 并初始化该单元或由该单元开始的若干连续单元 初始化单元就是将一个确定的值或不确定的值 在定义语句中用 表示 放入指定的内存单元 数据定义伪指令有五种 DB DW DD DQ和DT 只介绍前三种 DQ 定义4个字 DT 定义10个字节 51 1 定义字节伪指令DB 定义字节伪指令DB用来将一个标号和内存中的一个字节单元相联系 用该标号标识该字节单元的偏移地址 并且用确定或不确定的值初始化该单元或由该单元开始的若干连续单元 格式如下 SN DBEXP 其中 SN为用户自定义的标识符号 EXP为用来初始化所分配的单元的数据 可以是如下三种之一 1 二进制 八进制 十进制 十六进制及ASCII码常数 符号定义伪指令定义的值为常数的标识符号 或者由上述常数构成的表达式 2 nDUP EXP 3 SN DB初值表 52 初值表 补充 初值表是用逗号分隔的参数主要由数值常数 表达式或 DUP组成 表示初值不确定 即未赋初值 DUP 表示重复初值DUP的格式为 重复次数DUP 重复参数 53 1 定义字节伪指令DB FIRSTDB3 18 25H ABC SECONDDB3 15 48 4 36 5 26MOD10THIRDDB 36H 1 36QFOUTHDB5DUP 26 FIVETDB2DUP 2DUP 4 15 7FHSIXTHDB3DUP 03H12H25H41H42H43H2DH0CH1FH06H FIRST SECOND 36HFFH1EH1AH1AH1AH1AH1AH THIRD FOUTH 04H04H0FH04H04H0FH7FH FIVET SIXTH 36Q 011110B 1EH 30 MOVAL FIRST 2MOVAX WORDPTRFIRST 3 25H 41H42H 54 2 定义字伪指令DW 定义字伪指令DW用来将一个标号和内存中的一个字单元相联系 用该标号标识该字单元的偏移地址 并且用确定或不确定的值初始化该单元或由该单元开始的若干连续单元 其中每个数据占用一个字单元 存储时 低字节存入低地址 高字节存入高地址 格式如下 SN DWEXP 其中 SN为用户自定义的标识符号 EXP为用来初始化所分配的单元的数据 可以是如下三种之一 1 二进制 八进制 十进制 十六进制及ASCII码常数 符号定义伪指令定义的值为常数的标识符号 或者由上述常数构成的表达式 2 nDUP EXP 3 55 2 定义字伪指令DW FSTWDW1234H 32768 XY SCDWDW256 16 46H 25TRDWDW 255FUTWDW3DUP 510H 34H12H00H80H59H58H00H10H46H00HE7HFFH FSTW SCDW FFH00H10H05H10H05H10H05H TRDW FUTW MOVAX FSTW 2MOVAL BYTEPTRFSTW 4 FSTW 4 59H 56 3 定义双字伪指令DD 定义双字伪指令DD用来将一个标号和内存中的一个双字单元相联系 用该标号标识该双字单元的偏移地址 并且用确定或不确定的值初始化该单元或由该单元开始的若干连续单元 其中每个数据占用一个双字单元 存储时 低字节存入低地址 高字节存入高地址 格式如下 SN DDEXP 其中 SN为用户自定义的标识符号 EXP为用来初始化所分配的单元的数据 可以是如下三种之一 1 二进制 八进制 十进制 十六进制及ASCII码常数 也可以是浮点数 符号定义伪指令定义的值为常数的标识符号 或者由上述常数构成的表达式 2 nDUP EXP 3 57 3 定义双字伪指令DD DFSTDD1234567H 80000000HDTRDDD2DUP 1023 DFUTDD MN 58 思考题 写出下列数据定义伪指令语句经过汇编后 内存单元的分配情况 DATA1DB46 46 AB DATA2DW46 46 AB DATA1DATA3DD46 46 AB DATA1并分析 1 同一个正数46分别以字节 字 双字存储时 高地址单元的内容有何变化 同一个负数 46分别以字节 字 双字存储时 高地址单元的内容有何变化 由此可以得出何结论 2 ASCII码常数在用字节 字 双字存储时有何不同 3 和 意义是否相同 4 自定义标号DATA1分别用DW和DD定义 所分配的单元的内容是否相同 59 内存单元的分配情况 2EHD2H41H42H3FH 2EH00HD2HFFH42H41H3FH00H XXHXXH DATA1 DATA2 2EH00H00H00HD2HFFHFFHFFH42H41H00H00H3FH00H00H00H DATA3 XXHXXHXXHXXH 内存单元的分配情况 60 对于正数 字节扩展为字 高半部分添00H 字扩展为双字 高半部分添0000H 对于负数 字节扩展为字 高半部分添FFH 字扩展为双字 高半部分添FFFFH 结论 带符号数扩展时 高半部分用符号位填充 61 段名segment 定位 组合 段字 类别 语句序列段名ends 完整段定义由SEGMENT和ENDS这一对伪指令实现 SEGMENT伪指令定义一个逻辑段的开始 ENDS伪指令表示一个段的结束段定义指令后的4个关键字用于确定段的各种属性 堆栈段要采用stack组合类型 代码段应具有 code 类别 其他为可选属性参数如果不指定 则采用默认参数 但如果指定 注意要按照上列次序 4 4 3 段定义伪指令 62 段定位 align 属性 指定逻辑段在主存储器中的边界 可为 BYTE段开始为下一个可用的字节地址 xxxx WORD段开始为下一个可用的偶数地址 xxxx 段地址能被2整除 PARA段开始为下一个可用的节地址 xxx0 段地址能被16整除 PAGE段开始为下一个可用的页地址 xx00 段地址能被256整除 简化段定义伪指令的代码和数据段默认采用WORD定位 堆栈段默认采用PARA定位完整段定义伪指令的默认定位属性是PARA 其低4位已经是0 所以默认情况下数据段的偏移地址从0开始 63 段组合 combine 属性 指定多个逻辑段之间的关系 可为 PRIVATE本段与其他段没有逻辑关系 不与其他段合并 每段都有自己的段地址 这是完整段定义伪指令默认的段组合方式PUBLIC连接程序把本段与所有同名同类型的其他段相邻地连接在一起 然后为所有这些段指定一个共同的段地址 也就是合成一个物理段 这是简化段定义伪指令默认的段组合STACK本段是堆栈的一部分 连接程序将所有STACK段按照与PUBLIC段的同样方式进行合并 这是堆栈段必须具有的段组合 64 段字 use 属性 为支持32位段而设置的属性对于16位x86CPU来说 它默认是16位段 即USE16而对于汇编32位x86CPU指令时 它默认采用32位段 即USE32 但可以使用USE16指定标准的16位段编写运行于实地址方式 8086工作方式 的汇编语言程序 必须采用16位段 65 段类别 class 属性 当连接程序组织段时 将所有的同类别段相邻分配段类别可以是任意名称 但必须位于单引号中大多数MASM程序使用 code data 和 stack 来分别指名代码段 数据段和堆栈段 以保持所有代码和数据的连续 66 4 4 3 段定义伪指令 例 1 段首说明伪指令SEGMENT2 段结束伪指令ENDS dsegsegment 数据段countdw8000h AB maxintequ64hnumberdwmaxintarraydwmaxintdup 0 dsegends ssegsegment stack 堆栈段dw512dup ssegends 67 ASSUME段寄存器 段名 段寄存器名 段名 通知MASM用指定的段寄存器来寻址对应的逻辑段 即建立段寄存器与段的缺省关系 在明确了程序中各段与段寄存器之间的关系后 汇编程序会根据数据所在的逻辑段 在需要时自动插入段超越前缀 这是ASSUME伪指令的主要功能 ASSUME伪指令并不为段寄存器设定初值 连接程序LINK将正确设置CS IP和SS SP 由于数据段通常都需要 所以在样板源程序中 首先为DS赋值 如果使用附加段 还要赋值ES 4 4 3 段定义伪指令ASSUME 68 3 段设定伪指令ASSUME CSEGSEGMENTASSUMECS CSEG DS DSEG SS SSEGMOVAX DSEGMOVDS AXMOVAL DATA1ADDAL DATA2MOVSUM ALHLTCSEGENDS 4 4 3 段定义伪指令 例 dsegsegment 数据段countdw8000h AB maxintequ64hnumberdwmaxintarraydwmaxintdup 0 dsegends ssegsegmentstack 堆栈段dw512dup ssegends 69 4 代码定位伪指令ORG 格式 ORGEXP说明 EXP是一个表达式 其值为16位的无符号二进制数 代表其所在逻辑段内某单元的偏移地址 该条伪指令的作用是告诉汇编程序 在其后的数据或代码将从EXP指定的单元开始连续存储 70 4 代码定位伪指令ORG 例 DSEGSEGMENTDATA1DB10H 20HDATA2DW4567HDSEGENDS 10H20H67H45H 4个字节 0000H0001H0002H0003H 71 4 代码定位伪指令ORG 例 DSEGSEGMENTDATA1DB10H 20HDATA2DW4567HDSEGENDSORG100h 从100h处安排数据或程序 10H20H 67H45H 258个字节 0100H0101H 0000H0001H ORG100H 72 4 代码定位伪指令ORG 例 DSEGSEGMENTDATA1DB10H 20HORG100HDATA2DW4567HDSEGENDSORG100h 从100h处安排数据或程序 ORG 10h ORG 10h 使偏移地址加10h 即跳过16个字节空间 MASM中 符号 表示当前偏移地址值 如果想在DATA1和DATA2之间空出16个单元应该怎么办 73 4 4 4其他伪指令 END源程序结束伪指令 格式如下 END START 其中 START为标识程序入口地址的标号 该条伪指令语句用来告诉汇编程序 源程序的定义到此结束 并且指明程序的入口地址为START标识的语句 74 4 5汇编语言的上机过程 汇编语言的工作环境编辑程序 EDITNOTEBOOK汇编程序 MASM EXETASM EXEML EXE连接程序 LINK EXETLINK EXE调试程序 DEBUG COM EXE 75 2 汇编语言程序的开发过程 源程序 文件名 asm 目标模块 文件名 obj 可执行文件 文件名 exe 错误 76 文本编辑器 Editor 文本编辑器用于编辑无任何格式的文档程序设计时要采用文本编辑器编写源程序常见的文本编辑软件有很多 如MS DOS的EDIT全屏幕编辑器Windows的Notepad计事本程序开发系统中的程序编辑器 例如你熟悉的TurboC编辑器MASM集成开发环境PWB的编辑器大家可以采用微机中任何一个文本编辑器编写汇编语言源程序 77 汇编程序 Assembler 汇编程序将汇编语言源程序翻译 称为 汇编 成机器代码目标模块80 x86CPU的汇编程序主要有微软的宏汇编程序MASM 较著名的还有Borland公司的TASM 无实质差别本课程采用微软的MASM6 11这是MASM的最后一个独立版本可免费升级为MASM6 14 支持奔腾3 也可升级为MASM6 15 支持奔腾4 78 连接程序 Linker 连接程序将汇编后的目标模块转换为可执行程序每个程序开发环境都有连接程序连接程序的文件名通常是 LINK EXE 79 调试程序 Debugger 调试程序进行程序排错 分析等本课程采用DOS的DEBUG程序其他还有TurboDebugger等 80 集成化开发环境 补充 集成开发环境是进行程序设计所用到的各种软件的有机集合 其中 有文本编辑器 有语言翻译程序 有连接程序 还组合有调试程序等 大型的程序设计项目往往要借助这种集成开发环境 也就是软件开发工具 包 有的参考书中介绍有集编辑 汇编 连接和调试为一体的综合开发环境 即MASM的程序员工作平台例如 EditPlus等 81 开发过程1 源程序的编辑 补充 源程序文件要以ASM为扩展名源程序文件的形成 编辑 可以通过任何一个文本编辑器实现 DOS中的全屏幕文本编辑器EDIT其他程序开发工具中的编辑环境MASM程序员工作平台PWB中的编辑环境EDITlt301a asm 82 开发过程2 源程序的汇编 补充 汇编是将源程序翻译成由机器代码组成的目标模块文件的过程 MASM6 x提供的汇编程序是ML EXE ML clt301a asm TURBO提供的汇编程序是TASM 如果源程序中没有语法错误 MASM将自动生成一个目标模块文件 lt301a obj 否则MASM将给出相应的错误信息 这时应根据错误信息 重新编辑修改源程序后 再进行汇编 83 开发过程3 目标模块的连接 补充 连接程序能把一个或多个目标文件和库文件合成一个可执行程序 EXE COM文件 LINKlt301a obj TURBO提供的连接程序是TLINK 如果没有严重错误 LINK将生成一个可执行文件 lt301a exe 否则将提示相应的错误信息这时需要根据错误信息重新修改源程序后再汇编 链接 直到生成可执行文件 汇编和连接过程可以依次自动完成 84 汇编和连接的依次自动实现 补充 ML汇编程序可自动调用LINK连接程序 实现汇编和连接的依次进行MLlt301a asm汇编程序ML EXE可带其他参数 常用ML Fl Sglt301a asm该命令除产生模块文件lt301a obj和可执行文件lt301a exe外 还将生成列表文件lt301a lst列表文件是一种文本文件 含有源程序和目标代码 对我们学习汇编语言程序设计和发现错误很有用 采用 Sg选项 将在列表文件中得到有些伪指令相应的硬指令 85 开发过程4 可执行程序的调试 补充 经汇编 连接生成的可执行程序在操作系统下只要输入文件名就可以运行 lt301a操作系统装载该文件进入主存 并开始运行如果出现运行错误 可以从源程序开始排错 也可以利用

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论