




已阅读5页,还剩67页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第4讲 4 3汇编语言程序的开发 本节从汇编语言程序的语句格式出发 给出第一个示范性的汇编语言源程序 并演示汇编语言程序的上机过程 编辑汇编连接调试即汇编语言程序的开发方法 4 3 1汇编语言程序的语句格式 硬指令 经过汇编后生成目标代码 并在程序执行时才处理的语句 伪指令 Directive 不生成目标代码 在程序执行前由汇编程序处理的说明性语句 伪指令与具体的处理器类型无关 但与汇编程序的版本有关 汇编语言程序的指令格式 执行性语句 由硬指令构成的语句 它通常对应一条机器指令 出现在程序的代码段中 标号 硬指令助记符操作数 操作数 注释 说明性语句 由伪指令构成的语句 它通常指示汇编程序如何汇编源程序 名字 伪指令助记符参数 参数 注释 MOVCX 0 传送指令 具有2个操作数DELAY NOP 空操作指令 没有操作数 带有标号LOOPDELAY 循环指令 标号DELAY说明转移位置BUFFERDB1 2 3 4 5 6 7 数据定义伪指令 在主存中开辟7个连续的字节单元 初值依次为1 7 BUFFER表示首地址 汇编语言语句实例 标号 名字与标识符 标号是反映硬指令逻辑地址的标识符 后跟一个冒号分隔名字是反映伪指令逻辑地址和属性的标识符 后跟空格或制表符分隔 没有一个冒号标识符 Identifier 一般最多由26个字母 数字及规定的特殊符号 如 组成 不能以数字开头 一个程序中 每个标识符的定义是唯一的 还不能是汇编语言采用的保留字 保留字 保留字 ReservedWord 是汇编程序已经利用的标识符 主要有 硬指令助记符 例如 MOV ADD伪指令助记符 例如 DB EQU操作符 例如 OFFSET PTR寄存器名 例如 AX CS预定义符号 例如 data 汇编语言大小写不敏感 助记符 硬指令助记符可以是任何一条处理器指令 也可以是一条宏指令伪指令助记符将在本章学习 操作数与参数 处理器指令的操作数可以是立即数 寄存器和存储单元 伪指令的参数可以是常数 变量名 表达式等 可以有多个 参数之间用逗号分隔 注释 语句中由分号 开始的部分为注释内容 用以增加源程序的可读性必要时 一个语句行也可以由分号开始作为阶段性注释汇编程序在翻译源程序时将跳过该部分 不对它们做任何处理 4 3 2汇编语言的程序格式 完整的汇编语言源程序由段组成一个汇编语言源程序可以包含若干个代码段 数据段 附加段或堆栈段 需独立运行的程序必须包含一个代码段 所有的可执行性语句必须位于某一个代码段内 汇编语言源程序 完整段定义格式 Hello Everybody lt301b asm 文件名 stacksegmentstack 定义堆栈段dw512dup 堆栈段有512字 1024字节 空间stackends 堆栈段结束datasegment 定义数据段stringdb Hello Everybody 0dh 0ah dataendscodesegment code 定义代码段assumecs code ds data ss stackstart movax data 建立DS段地址movds ax 例b 完整段定义格式 movdx offsetstringmovah 9int21hmovax 4c00hint21h 利用功能调用返回DOScodeends 代码段结束endstart 汇编结束 同时指明程序起始点 例b 完整段定义格式 4 3 3汇编语言的上机过程 1 程序运行步骤及生成的文件 otherfiles obj 2 汇编程序的开发过程 1 1 源程序的编辑用编辑程序形成汇编语言源程序EDIT 扩展名必须是 asm 2 源程序的汇编用汇编程序对源程序进行汇编MASM6 x版本MASM5 x版本 汇编程序的开发过程 2 3 目标文件的连接将一个或多个目标文件与库文件合并成一个可执行文件 exe com LINK 4 运行可执行文件 若有错误可用DEBUG对可执行文件进行调试 建立 运行汇编语言程序 C EDITMYFILE ASMC MASMMYFILE ASMMicrosoft R MacroAssemblerVersion5 10Copyright C MicrosoftCorp1981 1988 Allrightsreserved Objectfilename MYFILE OBJ Sourcelisting NUL LST MYFILE LSTCross reference NUL CRF 47962 413345Bytessymbolspacefree0WarningErrors0SevereErrorsC LINKMYFILE OBJMicrosoft R OverlayLinkerVersion3 64Copyright C MicrosoftCorp1983 1988 Allrightsreserved RunFile MYFILE EXE ListFile NUL MAP Libraries LIB LINK warningL4021 nostacksegmentC MYFILE 示例 3 汇编程序功能 汇编程序的主要功能 检查源程序 给出出错信息 产生目标文件 obj 和列表文件 lst 展开宏指令 4 汇编程序输出文件介绍 列表文件 列出源程序和机器语言程序清单 并给出符号表 浏览列表文件 5 连接程序输出文件介绍 连接映像文件 给出每个段在存储器中的分配情况 后缀 MAP 浏览映象文件 参考6 ML EXE的用法 ML EXE可以自动调用LINK程序 实现汇编和连接自动地依次进行 其一般格式如下 常用参数选项如下 参数大小写敏感 c 小写 只汇编 不连接 Fl文件名 创建一个汇编列表文件 lst Fr文件名 创建一个可在PWB下浏览的 SBR文件 Fo文件名 生成指定的 OBJ文件 不用缺省名 Fe文件名 生成指定的 EXE文件 不用缺省名 Fm文件名 创建一个连接映象文件 MAP Sg在列表文件中 列出由汇编程序产生的指令 参考 要生成列表文件和连接映象文件 可以输入如下形式的命令 ML Fl Fm Sglt301a asm注释 注意大小写 参数 Sg将 startup exit等伪指令转换成硬指令 4 4伪指令 段定义变量定义常量定义地址计数器和定位伪指令运算符和表达式 stacksegmentstack stackendsdatasegment 在数据段定义数据dataendscodesegment code assumecs code ds data ss stackstart movax datamovds ax 在代码段填入指令序列movax 4c00hint21h 子程序代码codeendsendstart 一 完整段定义格式 完整段定义伪指令 段名segment定位组合段字 类别 语句序列段名ends 完整段定义由SEGMENT和ENDS这一对伪指令实现 SEGMENT伪指令定义一个逻辑段的开始 ENDS伪指令表示一个段的结束段名自定义 4个选项可选可不选 有可选项时各项顺序不能错 可选项之间用空格隔开 指定段寄存器伪指令 ASSUME段寄存器 段名 段寄存器名 段名 告诉汇编程序 在运行期间通过哪个段寄存器才能找到所要的指令和数据 ASSUME伪指令并不为段寄存器设定初值连接程序LINK将正确设置CS IP 指向程序的起始地址 将START所在段的段地址送CS寄存器 将START所在段内的偏移地址送IP寄存器 段寄存器的赋值 ds es的赋值 movax data 数据段名 movds ax 段名不能直接送段寄存器 需要通用寄存器过渡 汇编程序的结束 MOVAX 4C00H 或MOVAH 4CHINT21H 汇编程序结束伪指令 END 标号 指示汇编程序MASM到此结束汇编过程源程序的最后必须有一条END语句可选的标号用于指定程序开始执行点 连接程序将据此设置CS IP值 完整段定义格式模板 数据段名SEGMENT 数据段可有可无 也可多个 用伪指令定义的数据空间 数据段名ENDS代码段名SEGMENT 代码段最少有一个ASSUME 定义寻址关系 起始标号 MOVAX 数据段名MOVDS AX 初始化DS 代码段名ENDSEND起始标号 二 变量定义及存储器分配伪操作 格式 功能 变量申请固定长度的存储空间 并将相应存储单元初始化 变量名 伪指令助记符初值表 变量定义dbdw 变量名 变量名用户自定义的标识符 表示初值表首个数据的偏移地址 称为符号地址 如省略变量名 汇编程序只为初值表分配空间 无符号地址 变量名伪指令助记符初值表 伪指令助记符 助记符一个操作数占用空间变量DB1个字节字节变量DW2个字节 1个字 字变量DD4个字节 双字 双字变量 变量名伪指令助记符初值表 初值表 初值表是由逗号分割开的参数 可以是常数 字符串 问号 DUP等 变量名伪指令助记符初值表 1 操作数是常数 代表数据 DATABDB18H 1 30 每个数占用一个字节单元DATAWDW18H 2A45H 每个数占用一个字单元DATADDD18H 2F3A124BH 每个数占用一个双字单元在内存中的存储情况如图所示 说明 1 操作数可以用各种进制形式书写 如果是负数以补码形式存入内存单元中 2 同样一个数 如18H 由于数据定义助记符的不同 所占用的内存空间是不一样的 3 数据的高字节存放在高地址单元 低字节存放在低地址单元 2 操作数是字符串 操作数为字符串时 内存中存放的是各字符的ASCII码 例下面3个定义语句是等价的 STR1DB ABCD STR1DB A B C D STR1DB41H 42H 43H 44H例下面2个定义语句是等价的STR2DB AB STR2DW BA 当定义的字符串中字符多于2个时 只能使用DB定义 不能使用DW STR3DW ABCD 3 操作数是 操作数是 此时只分配单元 不定义初值BUF1DB5 6 7 BUF2DW56H 78H 345FH 4 操作数用复制操作符DUP 表示操作数重复若干次BUF1DB2DUP 2 3 4 等价于BUF1DB2 3 4 2 3 4BUF2DW1 2 3DUP 6 等价于BUF2DW1 2 6 6 6 重复次数DUP 被重复数据列表 5 变量的类型属性 必须注意指令中类型属性要一致 举例 OPER1DB1 2OPER2DW1234H 5678HMOVAL OPER2 可以采用PTR属性操作符来指定类型属性MOVAL BYTEPTROPER2 MOVAL 34H 三 常量的定义 赋值伪操作 1 表达式赋值伪指令EQU格式 符号名EQU表达式功能 给表达式赋予一个名字 也可以说使EQU两边的项等效 可以互相代换 例 给出如下符号定义X1EQU25 常数X2EQUX1 12 表达式X3EQU SI 2 存储单元 注释 1 程序中使用符号常数 而不使用具体数值 可大大提高程序的易读性 而且使程序易于修改 使用汇编语言编写程序 通常应遵循这一原则 2 EQU右边的项允许出现符号 但该符号必须是已经定义或即将定义的 四 地址计数器与对准伪操作 地址计数器 用在伪操作的参数字段 表示地址计数器的当前值每进入一个新段 地址计数器清零 每分配一个单元 地址计数器自动加1 指向下一个待分配的单元 ARRAYDW1 2 4 3 4 4 ARRAY 007E 0078 0074 举例 DATASEGMENTD01DB1 2 3 D01偏移地址为0 0003HEVEN ALIGN2 为0004HD02DW5 D02偏移地址为04H 0006HALIGN4 最接近6的 可被4整除的数是8 0008HD03DD6 D03的偏移地址为08H 000CHORG 10H 000CH 0010H 001CH 001CHD04DB abc D04的偏移地址为001CH 001FHLENEQU D04 LEN 3 2 定位伪指令ORG ORG参数用来设置地址计数器的值 使下一个字节的地址成为参数表达式的值 使地址计数器指向参数表达的偏移地址 SEG1SEGMENTORG10VAR1DW1234HORG20VAR2DW5678HORG 8VAR3DW1357HSEG1ENDS则VAR1的偏移地址为OAH 五 运算符和表达式 1 算术操作符 和mod2 逻辑与移位操作符3 关系操作符4 数值回送操作符也称分解操作符5 属性操作符 算术运算 分解操作符TYPE LENGTH SIZE OFFSET SEG属性操作符PTR 段操作符 1 算术操作符 和mod MOD运算为求余运算 为整除运算 算术操作符用于地址表达式时 必须注意结果有意义 举例 数据定义如下 ARRAYDW1 2 3 4 5 6 7ARYENDDW MOVCX ARYEND ARRAY 2 ADDAX BLOCK 2 符号地址 常数有意义MOVAX BX 1 寄存器间接寻址MOVAX BX 1 2 逻辑与移位操作符 逻辑操作符有AND OR XOR NOT 只能用于数字表达式举例 ANDAX 1 3 关系操作符 EQ NE LT LE GT GE 计算结果为逻辑值 真0FFFFH假0000H X Y 若 128 真 汇编结果 MOVFID 1若 128 假 汇编结果 MOVFID 0 MOVFID OFFSETY OFFSETX LE128 两个操作数必须都是数字或是同一段内的两个存储器地址 4 数值回送操作符也称分解操作符 SIZE变量功能 LENGTH TYPE OFFSET SEG变量 标号功能 回送变量或标号的偏址 段址 TYPE变量 标号 常数DBDWDDDFDQDTNEARFAR常数1246810 1 20 LENGTH变量功能 回送由DUP定义的变量的个数 其它情况回送1 应用举例 ARRAYDW100DUP TABLEDB ABCD ADDSI TYPEARRAY ADDSI 2ADDSI TYPETABLE ADDSI 1MOVCX LENGTHARRAY MOVCX 100MOVCX LENGTHTABLE MOVCX 1MOVCX SIZEARRAY MOVCX 200MOVCX SIZETABLE MOVCX 1MOVSI OFFSETDAB1 LEASI DAB1 MOVAX SEGDAB1 DAB1的段地址存入AX寄存器中 5 属性操作符 PTR 段操作符 PTR给表达式 一般是变量或标号 强行指定类型 对于变量 可以指定的类型是 BYTE 字节 WORD 字 DWORD 双字 等 对于标号 可以指定的类型是 NEAR 段内引用型 FAR 段间引用型 举例 例对于指令MOV BX 5MOVBYTEPTR BX 5 字节传送MOVWORDPTR BX 5 字传送 段操作符 段操作符MOVES BX AL 6 操作符的优先级 1 LENGTHSIZEWIDTHMASK2PTROFFSETSEGTPYETHIS 3HIGELOW4 MODSHLSHR5 6EQNEGTLTGELE7NOT8AND9ORXOR10SHORT 六 系统功能调用 为了方便用户使用 在基本输入输出子程序DOS的服务程序里 已将各种与设备有关的子程序编写好了 用户只需按照一定的要求调用这些中断服务就可实现各种功能 DOS系统功能调用的步骤 1 设置入口参数 有部分功能调用是不需要入口参数的 但大部分功能调用需要入口参数 在调用前应按要求准备好入口参数 2 功能号送 寄存器 3 用INT21H指令执行功能调用 一 键盘输入 DOS的21H号中断提供键盘输入功能有 1 1 单字符输入 实现该功能的有INT21H的1号功能 1号功能 等待从键盘输入一个字符 并在显示器上回显输入 AH 1返回 AL 字符的ASCII码说明 如果读到的字符是CTRL C或CTRL BREAK 则结束程序 举例 GET KEY MOVAH 1INT21HCMPAL Y JEYESCMPAL N JENOJNEGET KEY如果按下其他键程序就等待 在交互程序中常常需要用户进行选择 程序显示出一串信息 要求回答 Y 或 N 2 输入字符串 0A号功能调用功能 从键盘输入一个字符串入口参数 DS DX 缓冲区首地址出口参数 接受到的输入字符串在缓冲区中 说明 1 缓冲区第一字节为缓冲区最大容量 第二字节存放实际读入的字符数 是由功能A填入的 第三字节开始存放接受的字符串 2 字符串以回车键结束 3 如果输入的字符数
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 物流枢纽建设项目施工方案
- 校园安全教育标题文案
- 校园安全教育公益检查
- 土建工程路面面层施工方案
- 政治英语模拟考试题及答案
- 政府编制考试题库大全及答案
- 郑州旅游学校考试题及答案
- 储能项目技术服务与运维方案
- 五一假期产品活动方案策划
- 正定经济学考试题及答案
- 人才服务合同书
- 2025-2026学年统编版八年级上册道德与法治教学计划含教学进度表
- 2025年工会入职考试试题及答案
- 2025年中国电力投资集团校园招聘笔试题型分析及备考策略
- 旅游服务安全知识培训课件
- 公司章程制定合同协议书范本模板
- 2024人教PEP版三年级英语上册全册教案
- 立体车库应急预案范文
- 体彩专管员专业知识培训课件
- 严重腹部创伤院内救治专家共识(2024)解读
- 房内走廊改造方案(3篇)
评论
0/150
提交评论