计算机组成技术 哈工大第六章1.ppt_第1页
计算机组成技术 哈工大第六章1.ppt_第2页
计算机组成技术 哈工大第六章1.ppt_第3页
计算机组成技术 哈工大第六章1.ppt_第4页
计算机组成技术 哈工大第六章1.ppt_第5页
已阅读5页,还剩51页未读 继续免费阅读

下载本文档

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

文档简介

汇编语言程序设计 1 第六章汇编语言及其程序设计 计算机组成技术 2 汇编语言程序设计 第六章汇编语言及其程序设计 6 1汇编语言程序及开发过程6 2PC机的寻址方式6 3指令系统 机器指令 6 3宏汇编语言的语法成分6 4伪指令语句6 5宏指令 由宏汇编程序处理 6 6常用的I O系统功能调用6 7顺序 分支程序设计6 8循环程序设计6 10子程序设计6 11OS系统功能调用与磁盘文件设计 3 汇编语言程序设计 6 1汇编语言程序及开发过程 概念 汇编语言汇编语言源程序汇编程序 4 汇编语言程序设计 上机环境及过程1 环境 必须准备下列软件 操作系统 DOS 或UC DOS 编辑程序 WORDSTAR或SIDEKICK或TRURBO EDIT等之一 宏汇编程序 MASM EXE CREF连接程序 LINK EXE调试程序 DEBUG COM库管理程序 LIB 2 过程 编辑产生 ASM文件 宏汇编MASM产生 OBJ文件 连接LINK产生 EXE 调试DEBUG EXE DOS下运行 EXE 错 错 错 5 汇编语言程序设计 源程序编辑过程 建立汇编源程序可用多种编辑软件 如 WORDSTAR Edit等 之一编辑源程序 6 汇编语言程序设计 汇编源程序在DOS状态下 启动宏汇编程序 MASMA MASM Sourcefilename ASM EXAM Objectfilename EXAM OBJ Sourcelisting NUL LST EXAM Crossreference NUL CRF EXAM A MASMEXAM 不建立 LST CRF文件 输入汇编源程序名询问目标文件名 通常按回车表示与源文件同名询问是否建立列表文件 不要直接按回车 产生 LST文件 汇编后的列表询问是否建立符号对照文件 CRF此时 需CRET文件 汇编若有错 则指出有错的语句符号和错误代码及类型 7 汇编语言程序设计 目标文件的连接在DOS状态下 启动LINK程序 1 A LINK ObjectModules OBJ EXAM RunFile EXAM EXE ListFile NUL MAP EXAM Lisbraries LIB 询问连接文件名 如果有多个文件连接则用 号连接键入 询问是否产生新的文件名 一般按回车 表示与源目标文件同名 询问是否产生地址分配文件 MAP 否则直接按回车 询问是否用到用户自己建立的库文件 8 汇编语言程序设计 目标文件运行在DOS状态下运行 上机题目 在显示器上显示如下一行信息 HOWAREYOU STACKSEGMENTSTACKDB200DUP 0 STACKENDSDATASEGMENTBUFDB HOWAREYOU DATAENDSCODESEGMENTASSUMECS CODE DS DATA SS STACKSTART MOVAX DATAMOVDS AX LEADX BUFMOVAH 9INT21HMOVAH 4CHINT21HCODEENDSENDSTART 9 汇编语言程序设计 第六章汇编语言及其程序设计 6 1汇编语言程序及开发过程6 2PC机的寻址方式6 3指令系统 机器指令 6 3宏汇编语言的语法成分6 4伪指令语句6 5宏指令 由宏汇编程序处理 6 6常用的I O系统功能调用6 7顺序 分支程序设计6 8循环程序设计6 10子程序设计6 11OS系统功能调用与磁盘文件设计 10 汇编语言程序设计 6 2PC机的寻址方式 程序是指令的有序集合 指令的一般形式 操作码 操作数1 操作数2 操作码 指挥计算机执行动作的符号表示 操作数 操作码操作的对象 它可以是对象的本身 对象的地址等 例 MOVAL 5 AL 5操作码目的操作数源操作数注释 不仅要了解操作码表示的动作的语义 重要的是熟悉操作数的地址表示方法 寻址方式 11 汇编语言程序设计 寻址方式 指令中用于说明操作数所在地址的表示方法 寻找超作数的地址 PC机寻址方式的类型 立即寻址方式 直接寻址方式 寄存器寻址方式 寄存器间接寻址方式 寄存器变址寻址方式 基址加变址寻址方式 相对基址变址寻址方式 本质上是直接寻找地址的方式 本质上是间接寻找地址的方式 一 立即寻址方式格式 n n为一常数 立即数 特点 n本身是需要寻找的操作对象 它紧跟指令存于内存代码段中 12 汇编语言程序设计 例 MOVBX 10MOVAH A MOVAX 3064H 内存 MOV64H30H 低高 代码段 CPU AXAHAL 注 立即数只能作双操作数指令的源操作数 不能作目的操作数 立即数不能作单操作数指令的操作数 如 MOV100H AX INC50 立即数送入目的操作数中 注意溢出如 MOVAL 90H 13 汇编语言程序设计 二 直接寻址方式 格式 段寄存器 EA 其中 段寄存器为DS ES SS之一 或含有变量的地址表达式 特点 操作数的地址偏移量EA 或变量地址表达式的EA直接包含在指令中 与操作码一起放在代码段中 操作数对象一般不作特别说明 存放在当前数据段中 其物理地址求法为 DS 0000 EA4 例 MOVAX DS 2000H DS 2000H AX设执行前 DS 3000H4 32000H 2415H则执行后 32000H 字AX即 AX 2415H若MOVAL DS 2000H 则 32000H 字节AL即 AL 15H 14 汇编语言程序设计 MOV000000H 20H 15H32000H24H32001H 代码段 数据段 3000H 内存 例 MOVAX ES 2000H ES 2000H AX段跨越符4MOVSS 1000H BX BX SS 1000H4MOVBUF AXMOV BUF AX DS 15 汇编语言程序设计 四 寄存器间接寻址方式格式 R 其中R为BX BP SI DI之一 不允许是其它寄存器 特点 操作对象在内存中 操作对象的EA在BX BP SI DI之一中 不在内存 即 EA BX BP SI DI 注 1 若选择 BX SI DI 之一 且缺省段跨越符 则对象在当前的数据段中 三 寄存器寻址方式格式 R特点 操作数在R中 例 MOVBX 10 汇编语言程序设计 16 例 MOVAX BX DS BX AX4若执行前 DS 2000H BX 1000H MOVAX BX DSBX 4A0H21000H 50H21001H 数据段 2000H 1000H 50HA0H 内存 AX 2 若缺省段跨越符 且BP作间址寄存器 则对象存放在当前堆栈段中 如 MOVBX BP SS BP BX4 17 汇编语言程序设计 3 若指定段跨越符 则不管BP BX SI DI之一作变址器 都取相应段中数据 如 MOVES BP AX AX ES BP MOVAX ES BX ES BX AX4 注 间址器一定要是BP BX SI DI之一如 MOVCX AX 间接寻址方式表示对象的地址 并不能表示对象的类型 18 汇编语言程序设计 五 寄存器变址寻址方式 格式 X R 其中R为BX BP SI DI之一 X为一整常数或变量地址表达式 特点 操作对象在内存中 EA为R的内容和X之和 即 X在代码段中 EA另一部分在R中 EA X SI X DI X BX X BP 缺省段跨越符的物理地址 DS SI X4 DI X BX X SS BP X4 19 汇编语言程序设计 例 MOVCX 6 BX DS BX 6 CX设执行前 BX 16H DS 2000H 20010H 3789H执行 执行后 CX 3789H 其他寄存器内容不变 DSBXMOVCXOFFHOFAH 89H20010H37H20011H 代码段 数据段 2000H 16H 6 例 MOVDL 4 AX MOVBX ES ABC SI 其中ABC为变量名 它表示变量到所在段段首址的EA 20 汇编语言程序设计 六 基址变址寻址方式 格式 BR IR 其中 BR为基址寄存器 仅为BX和BP之一 IR为变址寄存器 仅为SI和DI之一 特点 操作对象在内存中 操作数的EA BX SI 或 DI BP SI 或 DI 缺省段跨越符 其物理地址 DS BX SI 或DI4 SS BP SI 或DI4 例 MOVAX BX BP MOV SI DI CX MOV BX CX AX 21 汇编语言程序设计 例 MOVAX BX DI MOVAX BX DI 设执行前 DS 2100H BX 158H DI 10A5H 221FDH 1234HEA 158H 10A5H 11FDH 物理地址 DS EA 21000H 11FDH 221FDH4 DSBXDI指令码 4 34H221FDH12H221FEH 2100H 158H 10A5H 数据段 执行后 AX 1234H当MOVAL BX DI 221FDH 字节 34HAL即 AL 34H 22 汇编语言程序设计 七 相对基址变址寻址方式 格式 X BR IR 其中 BR为基址器 仅为BX BP之一 IR为变址器 仅为SI DI之 X为一整常数或已定义的变量名 特点 对象在内存中 操作数的EA BX SI 或 DI X X为变量名 则该变量名到所在段的段首的字节个数 BP SI 或 DI X 23 汇编语言程序设计 例 MOVAX 8 BX SI 执行前 AX 45H BX 30H SI 20H DS 1000H 10058H 99H 指令码8 99H0 代码段 数据段 DSBXSI 10058H10059H执行后 10058H AX AX 99H 1000H 30H 20H 例 MOVDX M BX DI 设M已定义在数据段中MOVSS BX SI 7 CX 物理地址 SS BX SI 74 24 汇编语言程序设计 程序结构举例例 试问如下程序执行到EXIT时 字节单元A B C C 1 C 2的内容各是什么 STACKSEGMENTSTACKDB200DUP 0 STACKENDSDATASEGMENTADB0BDB0CDB30 40 50DATAENDSCODESEGMENTASSUMECS CODE DS DATA SS STACKSTART MOVAX DATAMOVDS AXMOVAL C 1 ADDAL CMOVA ALMOVAL C 1ADDAL C 2MOVB ALADDC 10ADDC 1 20ADDC 2 30EXIT MOVAH 4CHINT21HCODEENDSENDSTART 25 汇编语言程序设计 A 70 B 90 C 40 C 1 60 C 2 80 注意汇编程序结构 由段组成 每一段有段名 每段最大长度64KB 段之间位置无关紧要 代码段是由指令组成 且每条指令占一行 代码段中指令对数据段和堆栈段中的数据操作的 程序总是从主模块段第一条指令开始执行并结束于本模块 数据段或堆栈段集中存放机器操作的数据 26 汇编语言程序设计 第六章汇编语言及其程序设计 6 1汇编语言程序及开发过程6 2PC机的寻址方式6 3指令系统 机器指令 6 3宏汇编语言的语法成分6 4伪指令语句6 5宏指令 由宏汇编程序处理 6 6常用的I O系统功能调用6 7顺序 分支程序设计6 8循环程序设计6 10子程序设计6 11OS系统功能调用与磁盘文件设计 27 汇编语言程序设计 6 3指令系统 机器指令 指令一般格式 标号 操作码OPD OPS 注释内容 其中 标号 指令地址的符号表示 可缺省 为注释的起始符号 OPD为目的操作数 OPS为源操作数 注 OPD与OPS若类型均明确 应要求类型一致 字或字节 OPD不能为立即数 立即数不能作单操作数指令的寻址 操作后 结果OPD OPS中的内容不改变 OPD与OPS不能同为存储器操作数 一个为内存 另一个应为寄存器或立即数 机器指令的一般类型 数据传送指令 算术运算指令 逻辑运算指令 程序控制指令 转移指令 串操作指令 CPU控制指令 标志位处理指令 28 汇编语言程序设计 一 数据传送指令 均不影响标志寄存器中各位 功能 负责把数据 地址或立即数送到寄存器或内存单元中 主要介绍 MOV XCHG LEA 1 传送指令 MOV 格式 MOVOPD OPS功能 OPS OPD 举例 MOVAL BH BH AL 寄存器寄存器MOVCL 4 4CL 立即数寄存器MOV DI CX 寄存器内存单元注 OPD不允许为立即数和CS MOVCS 5 不允许在内存单元之间传送 MOV DI SI 在内存之间传送 类型均不明确或MOVA B其中A B为变量 29 汇编语言程序设计 2 交换指令格式 XCHGOPD OPS功能 OPS OPD 例 XCHGAL AH AL AH 注 OPS或OPD均不能为立即数 3 取EA指令格式 LEAOPD OPS功能 按OPS寻址方式计算EAOPD 30 汇编语言程序设计 例 DATASEGMENTBUFDB ABCD NDW 5 72PDW0DATAENDS LEASI N 4SIMOVAX SI DS SI AX4LEADI 4 SI 4 SI 4 4 8DILEAP BUF P不为16位寄存器 BUF 0 A 1 B 2 C 3 D N 00FBH 10FFH 272 30P 00 10 5的补码 DS DATA 4 31 汇编语言程序设计 注 OPD为除段寄存器外的一个16位通用寄存器 OPS必须使用除立即寻址和寄存器寻址以外的寻址方式 LEABX AX LEABX BUFMOVBX OFFSETBUF 例 采用如下寻址方式将上例中的 BUF 1 AL中 直接寻址 MOVAL BUF 1 寄存器间接寻址 LEASI BUF 1MOVAL SI 变址寻址 LEASI BUFMOVSI 1MOVAL SI 1 MOVAL BUF SI 或 基址变址寻址 LEASI BUFMOVBX 1MOVAL BX SI 32 汇编语言程序设计 二 算术运算指令包括 加 减 乘 除 符号扩展指令 除符号扩展指令外 均影响标志位CF OF ZF SF等 1 加法指令包括 二进制运算指令和BCD码运算指令 指令格式功能加法 ADDOPD OPS OPD OPS OPD加1指令 INCOPD OPD 1OPD OPD不能为立即数带进位加 ADCOPD OPS OPD OPS CF OPD 33 汇编语言程序设计 例 利用ADC指令 实现双精度数或多精度数的相加DATASEGMENTDN1DW4275H 3412H低16位高16位DN2DW12A5H 2F65HDSUMDW0 0DATAENDS MOVAX DN1ADDAX DN2MOVDSUM AXMOVAX DN1 2ADCAX DN2 2MOVDSUM 2 AX DN1 075H 142H 212H 334HDN2 00A5H 112H 265H 32FHDSUM 00 10 20 30 551AH 6377H DATA 34 汇编语言程序设计 2 减法指令 格式功能减1指令DECOPD OPD 1OPD求补指令NEGOPD OPD 1OPD减指令SUBOPD OPS OPD OPS OPD带借位减指令SBBOPD OPS OPD OPS CF OPD比较指令CMPOPD OPS OPD OPS 结果不回送 即 OPD 不变 但 根据减的结果置CF ZF OF SF 例 阅读程序段 指出完成的功能 CMPAX 0JGEEXITNEGAX EXIT AX 0 置ZF SF AX 0 转EXIT 即测试SF 0或ZF 1 若 AX 0 即SF 1 即求 AX 1AX 求 负数 对应正数 正数或0的绝对值等于本身 程序功能 AX 注 OPD均不能为立即数 即单操作数指令均不能为立即数 35 汇编语言程序设计 3 乘法指令 格式功能带符号数乘指令IMULOPS字节乘 AL OPS AX无符号数乘指令MULOPS字乘 AX OPS DX AX OPS 不变 且OPS不能为立即数符号扩展指令 将字节扩展成字CBW将AL中的符号扩展至AH中AHAL70将字扩展成双字CWD将AX中的符号扩展至DX中DXAX150150 注 操作数的隐含情况 符号扩展指令只能对带符号数进行扩展 扩展后 数值不变但类型改变 字或字节相乘是根据OPS的类型来决定 36 汇编语言程序设计 例 MOVAL 3MOVAH 2IMULAH 字节相乘 结果AXIMUL 2 例 要将 AL 带符号数DI中 能用下列指令吗 MOVDI AL 类型不一致错怎么办 方法1 CMPAL 0JGEHMOVAH 0FFHJMPH1H MOVAH 0H1 MOVDI AX 方法2 CBWMOVDI AX AL AX 值不变 37 汇编语言程序设计 4 除法指令 指令格式功能无符号数除指令DIVOPS字节 AX OPS AL 商 AH 余数 带符号数除指令IDIVOPS字 DX AX OPS AX 商 DX 余数 注 OPS不能为立即数 或0 其余类同乘法指令 例 MOVAX 4001HCWDMOVCX 4IDIVCX DX AX CXAX 商 DX 余数 0F000H0FFFFH 38 汇编语言程序设计 包括 求反指令NOT逻辑乘指令AND测试指令TEST逻辑加指令OR按位加指令XOR 影响CF SF OF ZF 指令格式功能求反指令NOTOPD OPD OPD 每位0变1 1变0 逻辑乘指令ANDOPD OPS OPD OPS OPD 与指令 注 对位逻辑乘 同为1为1 其他为0说明 清楚目的操作数中与源操作数中置0的对应位 标志位 OF 0 CF 0 影响SF ZF PF 三 逻辑运算指令和移位指令 位操作指令 对标志寄存器中CF SF OF ZF有影响 1 逻辑运算指令 39 汇编语言程序设计 执行 101010111100110100000000111111110000000011001101 执行后 DX 00CDH 将DX中的后8位分离出来 例 ANDAL 0FH若执行前 AL 35H 即 5 5字符的ASCII码值 执行 0011010100001111分离了AL后4位00000101 执行后 AL 5H 即为5数值的未压缩的BCD码 即 ANDAL 0FHSUBAL 30H 进而例如 ANDDX 0FF00H分离DX内容的高8位ANDAL 0F0H分离AL内容的高4位 也可分离中间位 例 ANDDX 00FFH若执行前 DX 0ABCDH 40 汇编语言程序设计 测试指令TESTOPD OPS OPD OPS 不回送结果 即 OPD 不变 并根据结果置标志位SF ZF PF 用于检测某一位或某几位的条件是否满足 例如 为了测试AL中第七位是否为0 不为0转H 可用 TESTAL 80H AL 第七位是否为0 其它各位可能不为0 但 AL 80H 若第七位为0 则结果为0 JNZH ZF 0 即 AL 0 转H H TESTAH 1JNZH 测试AH最后一位是否为0 即ZF 0 H 41 汇编语言程序设计 例 TESTAX 8080HJEL L 测试AX中第7位和第15位是否同时为0 为0转L 即ZF 1 逻辑加指令 或运算 OROPD OPS OPD OPS OPD 对位逻辑加 同加为0 其它为1 例 ORAL 30H若执行前 AL 05H执行后 AL 35H将AL中未压缩的BCD码转换成相应数字字符的ASCII码 例为 5 即 ORAL 30HADDAL 30H常用于将目的操作数中的某一位或某几位置1 例 ORAX AX自身的逻辑加 不改变操作数的值 但CF 0 不产生进位 42 汇编语言程序设计 按位加指令 XOROPD OPS 异或运算 OPD OPS OPD相同为0 相异为1 用于将目的的操作数与源操作数置1的对应位取反 例 XORAL 0FH执行前 AL 5 000001010000111100001010 执行后 AL 0AH 例 XORAX AX AX 0MOVAX 0 不影响ZF位 自身按位加 结果为0可见 用来测试某一操作数是否与另一确定的操作数相等 例 XORAX 042EH 若 AX 042EH 则结果为0 即ZF 1JZM 测试 AX 与042EH是否相等 则转M M 43 汇编语言程序设计 习题1 写出把首址为BUF的第3个字送到DX中的指令 要求使用下列寻址方式 1 直接寻址 2 寄存器间接寻址 3 变址寻址 4 基址变址寻址2 执行下列两条指令后 BX 设执行前 BX 6D16HMOVCL 7SHRBX CL3 执行下列程序段后 BX MOVCL 3MOVBX 0B7HROLBX 1RORBX CL 44 汇编语言程序设计 MOVBX OFFSETTADDBX EMOVAX BX 5 设 BX 0E3H 变量X中存放的内容为79H 下列指令单独执行后 BX 1 XORBX X 2 ANDBX X 3 ORBX X 4 XORBX 0FFH 5 ANDBX 0 6 TESTBX 01H 4 执行下列指令后 AX寄存器中的内容是什么 TDW10 20 30 40EDW3 45 汇编语言程序设计 2 移位指令 1 算术左移和逻辑左移指令算术左移格式 SALOPD 1左移一次SALOPD CL左移2次以上注 SALAX 4 功能 CF0150逻辑左移格式 SHLOPD 1SHLOPD CL功能 CF070 46 汇编语言程序设计 左移一位或按CL中的内容规定的次数 0 255 左移 每移一次 高位移入CF中 低位补0 注意 在移位一次的情况下 若移出的最高位与CF位不相同 则OF 1 否则OF 0 OF为溢出位 利用移位可实现有符号和无符号数乘2 左移一次可扩2倍 左移n次 则扩大2的n次方倍 如 CF0CFCF 00000011 0 00000110 0 00001100 47 汇编语言程序设计 例 SALAL 1执行前 AL 22H执行 CFAL MOVCL 1SALAL CL 00100010 0 执行后 AL 44H CF 0可见 AL 2 例 MOVCL 3SALSI CL将 SI 扩大2 2 2 8发生溢出时 用乘法指令 例 MOVCL 2SHLSI CL执行前 SI 1450H执行后 SI 5140H CF 0相当于5200d 4d 20800d 48 汇编语言程序设计 2 算术右移指令格式 SAROPD 1或SAROPD CL功能 右移1位或CL中规定的次数 最低位移至CF中 最高位保持不变 CF 150 或 CF 70 例 MOVCL 2SARBH CL执行前 BH 0F4H CF 1执行 11110100 1 CF 执行后 BH 0FAH CF 0 49 汇编语言程序设计 3 逻辑右移指令格式 SHROPD 1或SHROPD CL功能 0 CF 150 或 0 CF 70 用途 1 实现对无符号数除2 每移一次 2 将一个字 字节 中的某一位 几位 移到制定位置 达到分离目的 例 DATASEGMENTADB0BDB0DATAENDS MOVAL 7DHMOVBL AL MOVCL 4SHRBL CLMOVA BLANDAL 0FHMOVB AL 50 汇编语言程序设计 例 将DL中的高四位与低四位对换 MOVBL DLANDDL 0FHANDBL 0F0HMOVCL 4SHRBL CLSHLDL CLORDL BL 取出低四位 分离高四位 高四位右移四位至低四位 低四位左移四位至高四位 合并而成 51 汇编语言程序设计 3 循环移位指令 1 循环左移指令格式 ROLOPD 1或ROLOPD CL 功能 CF 150 CF 70 每移一次将最高位移入CF 同时又移入最低位 例 将DL中的内容低4位与高4位对调 MOVCL 4ROLDL CL执行前 DL 0FAH CF 0执行 0 11111010

温馨提示

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

评论

0/150

提交评论