PC汇编语言程序设计 本科 教学课件 ppt 作者 王闵 第1-7章_ 第4章

上传人:E**** 文档编号:89361146 上传时间:2019-05-24 格式:PPT 页数:175 大小:1.02MB
返回 下载 相关 举报
PC汇编语言程序设计 本科 教学课件 ppt 作者 王闵 第1-7章_ 第4章_第1页
第1页 / 共175页
PC汇编语言程序设计 本科 教学课件 ppt 作者 王闵 第1-7章_ 第4章_第2页
第2页 / 共175页
PC汇编语言程序设计 本科 教学课件 ppt 作者 王闵 第1-7章_ 第4章_第3页
第3页 / 共175页
PC汇编语言程序设计 本科 教学课件 ppt 作者 王闵 第1-7章_ 第4章_第4页
第4页 / 共175页
PC汇编语言程序设计 本科 教学课件 ppt 作者 王闵 第1-7章_ 第4章_第5页
第5页 / 共175页
点击查看更多>>
资源描述

《PC汇编语言程序设计 本科 教学课件 ppt 作者 王闵 第1-7章_ 第4章》由会员分享,可在线阅读,更多相关《PC汇编语言程序设计 本科 教学课件 ppt 作者 王闵 第1-7章_ 第4章(175页珍藏版)》请在金锄头文库上搜索。

1、第四章 指令分类与简单的程序段设计,4.1 传送类指令 4.2 算术运算类指令 4.3 逻辑运算类指令 4.4 移位类指令 4.5 程序控制类指令 4.6 串处理指令 4.7 处理机控制指令 习题四,4.1 传送类指令,4.1.1 数据传送指令 数据传送指令有: MOV(Move) 传送指令 PUSH(Push onto the stack) 进栈指令 POP(Pop from the stack) 出栈指令 XCHG(Exchange) 交换指令 XLAT(Translate) 换码指令,(1) MOV 传送指令。 汇编格式: MOV DST, SRC 执行的操作:(DST)(SRC) 其中

2、,DST表示目的操作数, SRC表示源操作数。 MOV指令传送的数据可以是字或字节,但SRC与DST的宽度必须一致, 即同为字节或同为字。MOV指令的传送方向有着严格规定,如图4.1所示,从寄存器到寄存器,立即数到寄存器, 立即数到存储单元,存储单元到寄存器, 寄存器到存储单元, 寄存器或存储单元到除CS外的段寄存器(注意,立即数不能直接送段寄存器), 段寄存器到寄存器或存储单元。但是MOV指令的目的操作数不允许用立即数,也不允许用CS寄存器,而且不允许用MOV指令在两个存储单元之间直接传送,也不允许在两个段寄存器之间直接传送。 MOV指令不影响标志位。,图 4.1 MOV指令的传送方向,由图

3、4.1可知,段基址不能直接传送到段寄存器, 必须通过寄存器分两次传送,例如: MOV AX, DATASEG ; 设DATASEG为某数据段段名 MOV DS, AX ; 数据段段基值送入DS 存储单元之间也不能直接传送。 若ADDR为某16位数据的段内偏移地址,要把该数据复制到与它相邻的下一个字单元, 则必须通过通用寄存器分两次传送,例如: MOV AX, ADDR ; 源操作数为直接地址 MOV ADDR+2, AX ; 寄存器送直接地址,或者可用下列指令完成: MOV BX, OFFSET ADDR; 段内偏移地址送入BX MOV AX, BX ; 寄存器间接寻址 MOV 2BX, AX

4、 其中,第一条指令把ADDR的偏移地址(而不是内容!)送到BX寄存器。OFFSET为属性操作符, 意为把其后符号的段内偏移地址(不是内容)作为源操作数。,若要实现两个存储单元之间的数据交换, 可用下述指令实现: MOV AX, X1; X1为一个存储单元地址, 直接地址 MOV BX, Y1; Y1为另一个存储单元地址 MOV X1, BX MOV Y1, AX,(2) PUSH 进栈指令。 汇编格式: PUSH SRC 执行的操作:(SP)(SP)-2 (将SP的内容减2, 指向新的栈顶) ((SP)+1和(SP))(SRC) 将SRC的内容压入新的 栈顶,低8位存入(SP)单元, 高8位存

5、入(SP)+ 1 单元),(3) POP 出栈指令。 汇编格式: POP DST 执行的操作:(DST)(SP)+1和(SP) (将栈顶的内容存入DST的单元,即(SP)中内容存入DST的低8位,(SP)+1中内容存入DST的高8位) (SP) (SP)+2 (将SP的内容加2, 指向新的栈顶) ,PUSH,POP是两条堆栈操作指令。堆栈是以“后进先出”方式工作的一个存储区,位于堆栈段中(必须由段寄存器SS指定)。 它只有一个出入口“栈顶”, 由堆栈指针寄存器SP指示。SP的内容在任何时候都指向当前的栈顶。 堆栈是由高地址向低地址生长的,即进栈操作应使SP内容减小,出栈操作应使SP内容增加。P

6、USH和POP指令都必须根据当前SP的内容来确定进栈或出栈的存储单元,而且必须及时修改指针,以保证SP指向当前的栈顶。 堆栈的存取必须以字为单位(PC机不允许字节堆栈),所以PUSH和POP指令只能作字操作。它们可以使用除立即数以外的其他寻址方式。PUSH指令中的SRC和POP指令中的DST也可以指定段寄存器作为操作数,但POP指令不允许用CS寄存器。 这两条堆栈指令不影响标志位。,例如,设SS内容为4000H,SP内容为1126H, AX内容为0714H, 下列两条指令执行情况如图4.2所示。,图 4.2 PUSH, POP指令执行情况,PUSH AX POP BX 实现两个存储单元X1与Y

7、1之间的数据的互换又可用下述堆栈操作程序段实现: PUSH X1 PUSH Y1 POP X1 POP Y1,堆栈在子程序调用和中断调用中起着重要的作用,如果子程序要使用某些寄存器,就可以先将这些寄存器的内容保存在堆栈中, 待子程序(或中断服务程序)执行完毕后再将寄存器原来的内容恢复。需要注意的是,由于堆栈“后进先出”的特点, PUSH与POP指令操作对象的先后次序必须相反。 例如:,若仅用MOV指令达到相同的目的, 则需要用下列指令序列: MOV DX, AX MOV AX, BX MOV BX, DX 实现两个存储单元X1与Y1之间的数据互换, 可使用下列指令序列: XCHG AX, X1

8、 XCHG AX, Y1 XCHG AX, X1,(5) XLAT 换码指令。 汇编格式: XLAT OPR 或 XLAT 执行的操作: (AL)(BX)+(AL),程序中经常需要把一种代码转换为另一种代码, 例如把字符的扫描码转换成ASCII码,或者把数字09转换成7段数码管所需要的相应字形代码等,XLAT就是为这种用途所设置的指令。在使用这条指令以前,应先建立一个字节表格, 将表格的首地址提前存入BX寄存器中,将需要转换的代码(应该是相对于表格首地址的位移量)也提前存放在AL寄存器中,这时表格的内容则是所要换取的代码,该指令执行后就可在AL中得到转换后的代码。该指令可用以上两种格式中的任一

9、种。 使用XLAT OPR时,OPR只是为提高程序的可读性而设置的(OPR为表格的首地址),在指令执行时只使用预先已存入BX中的表格首地址, 而并不用汇编格式中指定的值。该指令不影响标志位。,例如,在数据区中TABEL开始的存储区顺序存放着AZ的ASCII码,下列程序段将把字母从0开始的存放顺序号变为对应字母的ASCII码值。 TABEL DB A B C D E Z MOV BX, OFFSET TABEL MOV AL, 4 ; 从0开始第四个字母为“E” XLAT 其中,DB伪指令表示其后存放的数据均为字节,XLAT执行完毕后,AL中的内容为字母E的ASCII码。 必须注意,由于AL寄存

10、器只有8位,所以表格的长度不能超过256。,4.1.2 地址传送指令 地址传送指令有: LEA(Load Effective Address) 有效地址送寄存器指令 LDS(Load DS with Pointer) 指针送寄存器和DS指令 LES(Load ES with Pointer) 指针送寄存器和ES指令 这一组指令具有把地址送到指定寄存器的功能。,LEA BX, XYZ,例如,要将字数组ARRY的第三个元素与第七个元素对换, 可用下列程序段实现: LEA BX, ARRY XCHG AX, 4BX XCHG AX, 12BX XCHG AX, 4BX 由于内存单元的物理地址是由16

11、位的段基址和16位的段内偏移地址组成的,因而,一个存储单元的地址指针应包括段基址和段内偏移地址,共4个字节32位,下面两条指令的作用是同时将段基址和段内偏移地址装入指令中指定的段寄存器和指定的寄存器。指令中的SRC指明地址指针在内存中的存放处。其中, SRC的低16位存放段内偏移地址,SRC的高16位(SRC+2单元)存放段基址。,(2) LDS 指针送寄存器和DS指令。 汇编格式: LDS REG, SRC 执行的操作: (REG)(SRC), (DS)(SRC+2) 该指令把源操作数SRC指定的4个相继字节的地址指针中的段内偏移地址(低字),送到由指令指定的寄存器REG, 将段基址(高字)

12、送到DS寄存器中。该指令中的REG常特指定为SI寄存器。 例如,指令LDS SI,BX的功能相当于下述三条指令: MOV SI, BX MOV AX, 2BX MOV DS, AX,(3) LES 指针送寄存器和ES指令。 汇编格式: LES REG, SRC 执行的操作: (REG)(SRC), (ES)(SRC+2) 该指令把源操作数SRC指定的4个相继字节的地址指针中的段内偏移地址(低字),送到由指令指定的寄存器REG中, 将段基址(高字)送到ES寄存器中。该指令中的REG常特指定为DI寄存器。,例如, 指令LES DI, ABC 的功能相当于下述三条指令: MOV DI, ABC MO

13、V AX, ABC+2 MOV ES, AX 以上两条指令指定的寄存器不能使用段寄存器, 且源操作数SRC为任何一种存储器寻址方式。指令执行不影响标志位。 这两条指令常用于处理不在当前数据段和附加段的字符串数据。由于源串隐含使用DS:SI,目的串隐含使用ES:DI, 只要设置好待处理的字符串所在的段基址和段内偏移地址, 使用指令LDS SI, SRC和指令LES DI, SRC, 就可以立刻使SI指向源串,使DI指向目的串。,4.1.3 标志寄存器传送指令 标志寄存器传送指令有: LAHF(Load AH from Flag) 标志寄存器送AH寄存器指令 SAHF(Store AH into

14、Flag) AH寄存器送标志寄存器指令 PUSHF(Push the Flag) 标志寄存器进栈指令 POPF(Pop the Flag) 标志寄存器出栈指令 这四条指令的操作数均采用隐含表示(PSW、 AH、 堆栈), 在指令形式上是无操作数指令。四条指令对标志位均无影响。,PSW的低字节包含,,高字节包含,(1) LAHF 标志寄存器送AH指令。 汇编格式: LAHF 执行的操作:(AH)(PSW的低字节) (2) SAHF AH送标志寄存器指令。 汇编格式: SAHF 执行的操作: (PSW的低字节)(AH),PC 的指令系统中设有专门的几条指令,可对PSW中的CF,DF,IF直接进行置

15、“1”、 清“0”等操作。其他标志位则不能直接用指令进行修改。 若要进行修改(如对SF清“0”), 则可用下列程序段: LAHF AND AH, 7FH; 将AH第7位清“0” SAHF ; SF位被清“0”,(3) PUSHF 标志寄存器进栈指令。 汇编格式: PUSHF 执行的操作:(SP)(SP)-2, (SP)+1和(SP))(PSW),(4) POPF 标志寄存器出栈指令。 汇编格式: POPF 执行的操作:(PSW)(SP)+1,(SP),(SP)(SP)+2 这四条指令中的LAHF和PUSHF不影响标志位, SAHF和POPF则由装入的值来确定标志位的值。 传送类指令中还包括输入/输出专用指令。 在PC机里,所有IO端口与CPU之间的通信都由IN和OUT指令实现,由IN完成从I/O端口到CPU的信息传送,由OUT完成从CPU到I/O端口的信息传送。 IN(Input) 输入指令和OUT(0utput) 输出指令也属传送类指令。,4.2 算术运算类指令,4.2.1 加减法类指令 加减法类指令有: ADD(Add) 加法指令 ADC(Add with Carry) 带进位加法指令 INC(Increment) 加1指令 SUB(Subtract) 减法指令 SBB(Subtract with Borrow)带借位减法指令 DEC(Decreme

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号