1第3章8086CPU指令系统内容简介全面掌握8086/8088指令系统的使用,包括指令的功能、寻址方式及其书写格式、对标志位的影响、使用注意事项。掌握汇编语言程序设计所必须的伪指令,并由此构成汇编语言程序的完整结构。掌握变量、常量及伪指令的使用和一些常用的基本程序设计方法。在分支程序设计中,要特别注意每个分支的完整性和分支条件的合理使用;在循环程序设计中,掌握循环程序的基本结构,特别要注意应避免出现死循环;在子程序设计中,着重掌握参数的2内容简介各种传递方式及其实现,对堆栈这种特殊的存储区域进行了详细的描述,切实掌握堆栈的使用。宏指令和字符串操作是汇编语言程序设计中的两个难点,教材中对此也作了详细的介绍,要求掌握正确使用宏指令和字符串操作指令。教材中简要介绍了DOS功能调用的方法和常用的一些DOS功能,要求能熟练使用INT21H的01、02、09、0AH和4CH号等功能。第三章8086CPU指令系统3本教案内容第3章8086CPU指令系统1.汇编语言指令2.8086指令分类3.数据与转移地址的寻址方式4.数据传送类指令5.算术运算类指令6.逻辑运算类指令7.移位类指令8.标志位操作指令9.转移指令10.循环控制指令11.子程序调用返回指令12.中断调用返回指令13.字符串操作指令14.I/O输入输出指令15.其它指令16.宏指令43.1汇编语言指令一.汇编语言与机器语言的相关概念汇编语言与机器语言属于低级语言,它们与高级语言有较大的区别,汇编语言中的语句与机器的型号密切相关。如Intel8086系列CPU、Intel8031系列单片CPU等,若CPU型号不同,其指令系统就不同,当然语句的书写格式也就不同。5在高级语言中,完成某个加法功能,我们可采用语句X=A+B,只要给变量A和B赋一确定值,此加法就可以实现了。在汇编语言中则不同,程序必须指出A、B存放在何处,相加后的结果又存放在何处,然后才能实现这一加法运算。显然,汇编语言在通过程序告诉计算机做什么和如何做时,显得更加具体。正是这种具体,使得该语言与计算机(处理器)紧密相关,从而也要求学习和使用汇编语言的人对处理器的结构有更加深入的了解。3.1汇编语言指令61.机器语言机器(CPU)能直接认识的一种二进制代码语言。CPU能认识的一组二进制代码就是一条指令。3.1汇编语言指令7如:B0H12H05H02H00H;这一组二进制代码,就是告诉CPU将AL12H。就是一条指令代码,或者机器语言代码。;这一组二进制代码,告诉CPU将(AL)+2AX。3.1汇编语言指令82.机器语言程序采用机器语言编写的程序,即二进制代码程序。优点:程序送入计算机后,CPU可以直接执行。缺点:不易书写,不易检查,编写程序十分困难。3.1汇编语言指令93.汇编语言为了克服机器语言不易书写、记忆复杂等缺点,人们采用一组字母、数字和符号来代替一条二进制代码指令,这种表示指令的符号称为助记符,这种用一组符号来代替一条指令编写程序时采用的语言,称为汇编语言。3.1汇编语言指令104.汇编语言程序用汇编语言编写的程序称为汇编语言程序,或者称为汇编语言源程序。这种编程方法称为汇编语言程序设计。汇编语言源程序名必须为文件名.ASM。3.1汇编语言指令11如:B0H12H05H02H00H用MOVAL,12H代替用ADDAX,0002H代替3.1汇编语言指令12优点:要比一串二进制代码清晰多了,书写容易,记忆也方便。缺点:CPU不能直接执行。用汇编语言编写的汇编语言源程序必须经过汇编,将其翻译成机器语言格式,CPU才能执行。3.1汇编语言指令135.汇编把汇编语言源程序翻译成机器语言程序的过程称为汇编。3.1汇编语言指令146.汇编程序能把汇编语言源程序翻译成机器语言程序的系统程序(语言加工程序)。8086宏汇编程序为MASM.EXE。3.1汇编语言指令15如:机器语言程序汇编程序为MASM.EXE源程序MOVAL,12HADDAX,0002H050200B012汇编反汇编在DEBUG.EXE下进行3.1汇编语言指令167.从汇编语言源程序到可执行程序所经过的处理过程用全屏幕编辑软件编辑汇编语言源程序文件名.ASM用汇编程序MASM.EXE对源程序文件名.ASM进行汇编有语法错误吗?在磁盘上形成目标程序文件文件名.OBJ用连接程序LINK.EXE对文件名.OBJ进行连接有错误吗?在磁盘上形成了可执行文件文件名.EXE有没有没3.1汇编语言指令17二.汇编语言程序中语句的种类在汇编语言程序设计中,程序中的语句有三类:指令语句伪指令语句宏指令语句3.1汇编语言指令181.指令语句汇编后能产生机器语言代码,是CPU能执行的语句。3.1汇编语言指令192.伪指令语句汇编后不能产生机器语言代码,是CPU不能执行的语句。它只是告诉汇编程序(MASM.EXE)应如何汇编。3.1汇编语言指令203.宏指令语句它是8086指令系统中没有的指令,是用户自己根据宏指令定义的方法定义的一条能完成某一特定功能的新的指令。3.1汇编语言指令21三.汇编语言中语句的组成汇编语言源程序(文件名.ASM)是由一条条语句组成的。语句则由四部分组成。标识符操作助记符操作数注释其基本格式如下:3.1汇编语言指令22[标识符]操作助记符空格[操作数][;注释]其中,操作助记符指出该条语句的基本操作功能,是必须有的部分。而[]项可有可无,视情况而定。若是指令语句,标识符就是一个标号名,以冒号结尾;若是伪指令语句,标识符就是变量名或者段名等,以空格结尾。3.1汇编语言指令23标识符的第一个字符必须是字母,不能为数字,总字符个数不能超过31个。在给标识符起名时,不能用8086指令系统中的专用符来给标识符起名称,如ADD、MOV等。起名时,尽量起的有点意义。3.1汇编语言指令24四.汇编语言中的常数与表达式在汇编语言程序中,语句中的操作数项既可以是常数或表达式(立即数),也可以是指明操作数所在处的一种说明。如果操作数是常数或表达式,则有以下几种形式。3.1汇编语言指令251.数值常数若为数值常数,则按其基数的不同,可二进制数十进制数八进制数十六进制数有等不同的表达式。3.1汇编语言指令26如:将(AL)12,则有:MOVAL,12D;12为十进制数MOVAL,0CH;0CH为十六进制数MOVAL,00001100B;00001100B为二进制数MOVAL,14Q;14Q为八进制数3.1汇编语言指令272.字符串常数字符串常数是由单引号“′……′”括起来的一串字符或者单个字符。如:MOVDL,'A′;DL41HBUFDB'12Aa′;将'12Aa′字符串定义给;变BUF以下连续的(4个字;节)存储器单元。3.1汇编语言指令283.表达式语句中的操作数项也可以是表达式。表达式由操作数和操作符组成。操作符有:3.1汇编语言指令29算术操作符:+、-、*、/、MOD逻辑操作符:AND、OR、XOR、NOT关系操作符:EQ(相等)、NE(不等)、LT(小于)、GT(大于)、LE(小于或等于)、GE(大于或等于)属性操作符:SEG、OFFSET、TYPE、LENGTH、SIZE属性修改操作符:PTR3.1汇编语言指令30①算术操作符MOVAL,5+2*3等效于MOVAL,11MOVAL,11/2等效于MOVAL,05H;取商MOVAL,11MOD2等效于MOVAL,01H;取余3.1汇编语言指令31②逻辑操作符MOVAL,0CCHAND0F0HMOVAL,0C0HANDAL,0CCHOR0F0HANDAL,0FCH等效于等效于CPU执行时完成的操作汇编程序汇编时完成的操作3.1汇编语言指令32③关系操作符若关系成立,则为真,取值全1;若关系不成立,则为假,取值全0。如:MOVAL,04HLT05H;关系成立为真MOVAL,0FFH等效于3.1汇编语言指令33④属性操作符MOVBX,OFFSETTABLE;BX取变量TABLE单元的偏移地址MOVAX,SEGTABLE;AX取变量TABLE单元的段地址MOVDL,TYPETABLE;DL取变量TABLE的类型SRC均为立即数寻址3.1汇编语言指令34⑤属性修改操作符MOVWORDPTR[BX],02HDS:(BX)00H02H0002H3.1汇编语言指令35⑤属性修改操作符MOVBYTEPTRTABLE,AL(AL)TABLE只是在本条语句中用PTR将TABLE变量临时修改为字节型变量,脱离了本条语句,变量TABLE的类型恢复原样。3.1汇编语言指令36五.标号、变量及伪指令前面已经讲过,在汇编语言程序设计中,为了方便记忆,将直接访问的存储器单元的实际地址符号化,即给要访问存储器单元起一个标识符名,而标识符有标号名、变量名等。3.1汇编语言指令371.标号用以指示某条指令语句的位置(地址)。其定义方法就是在指令语句的操作助记符前加上标号名,以冒号结尾。它可以作为程序转移指令的操作数。3.1汇编语言指令38如:●●●JMPLAB1●●●●LAB1:MOVAX,0●●●标号名3.1汇编语言指令39标号一旦定义,就具有了以下三个属性:段地址标号对应的指令所在段的段地址段内偏移地址标号对应指令所在的段内EA类型NEAR型该标号与转移指令在同一代码段。FAR型该标号与转移指令不在同一代码段。3.1汇编语言指令402.变量用以指示存放数据的存储器单元的符号地址。变量所指明的存储器单元的值,在程序运行期间是可以改变的。3.1汇编语言指令41变量定义伪指令(也称为数据定义伪指令或者称为存储器分配伪指令)变量定义伪指令主要应用在数据段,是用来给变量名所对应的存储器单元分配数据或预留空间。变量定义伪指令有以下五种:3.1汇编语言指令42[变量名]DB表达式;定义字节型变量[变量名]DW表达式;定义字型变量[变量名]DD表达式;定义双字型变量[变量名]DQ表达式;定义长字型变量[变量名]DT表达式;定义一个10字节的变量常用的变量定义伪指令有DB、DW、DD。伪指令左边的变量名可有可无,若有必须以空格结尾。3.1汇编语言指令43变量定义伪指令语句中的表达式有以下几种情况:●1个或多个常数或表达式。当为多个时,其间用逗号分割。●带引号的字符串。●一个问号(?)。(用来将此单元保留,存放结果)●重复方式。其格式为:重复次数DUP(表达式)3.1汇编语言指令44伪指令DW、DD的特殊用法:●变量名1DW标号(或变量名2)±常数这里定义的变量名1为字型地址指针,其内容为〈标号±常数〉或〈变量名2±常数〉的段内偏移地址。例如:AD1DB100DUP(?)AD2DWAD1;指向变量AD1的起始地址AD3DWAD1+10●变量名1DD标号(或变量名2)±常数这里定义的变量名1为双字型地址指针,第一个字存放〈标号±常数〉或〈变量名2±常数〉的段内偏移地址,第二个字存放其段地址。例如:AD4DDAD1;指向变量AD1的起始地址3.1汇编语言指令结果如图所示453.1汇编语言指令5721612157210001AD1(2157H)AD2AD3AD4假设AD1的段地址为0100H,段内偏移地址为2157H46变量定义举例若(DS)=1500H,且在数据段0000H偏移地址开始有以下变量定义。3.1汇编语言指令47DAT1DB12,-12,12HDAT2DB2*3,$+2DAT1OCHOF4H12HO6H1500H:0000H0003H汇编程序对本段汇编后,各变量对应存储器单元的内容如下图。此时,MASM.EXE中的软件位置计数器$=0000HDAT23.1汇编语言指令48DAT1DB12,-12,12HDAT2DB2*3,$+2DAT3DW02H,567AHDAT1OCHOF4H12HO6H1500H:0000H0003HDAT2DAT30005H05H02HO0H7AH56H123.1汇编语言指令49DAT4DD89HDAT489H00H00H00H1500H:0009H000DHDAT5DAT6DAT5DB′THIS′