如果您无法下载资料,请参考说明:
1、部分资料下载需要金币,请确保您的账户上有足够的金币
2、已购买过的文档,再次下载不重复扣费
3、资料包下载后请先用软件解压,在使用对应软件打开
第三章8086的寻址方式和指令系统计算机的指令一般由操作码和操作数组成,操作码指出了指令的功能;而操作数则给出了指令操作的对象。操作数可以以立即数的形式存放在指令中,但在大多数情况下,操作数是以地址的形式存放在指令(指示操作数在哪儿)。用于说明操作数所在地址的方法称为寻址方式。操作数(8位或16的常数)直接包含在指令中,紧跟在操作码后面,与操作码一起放在代码段区域中。操作数im既可是8位的,也可是16位的。操作数的有效地址EA是指令的一部分,它与操作码一起放在代码段区域中。操作数的物理地址为数据段寄存器DS加上16位地址偏移量。操作数在存储单元中。操作数的有效地址EA在指令所指定的寄存器中。可作为间址的寄存器有SI、DI、BX和BP若:1、指令中指定的寄存器为BX、SI或DI,则默认操作数存放在数据段中,段地址由DS提供2、以寄存器BP间接寻址,则默认操作数存放在堆栈段中,段地址由SS提供操作数在存储单元中。操作数的有效地址是以指令指定的寄存器内容加上指令中给定的8位或16位位移量。操作数在存储单元中。操作数的有效地址是一个基址寄存器(BX或BP)和一个变址寄存器(SI或DI)的内容之和,两个寄存器均由指令指定。一般由基址寄存器决定所使用的段寄存器。操作数在存储单元中。操作数的有效地址是基址寄存器(BX或BP)内容加上变址寄存器(SI或DI)的内容、再加上指令中指定的8位或16位位移量。一般由基址寄存器决定所使用的段寄存器。*立即数可以出现在方括号内,表示直接地址;2、段超越:在8086系统中,数据通常在数据段中,但若需要,数据也可存放在代码段,堆栈段以及附加段中,这种情况就是段超越。应用时,需在指令中加以说明。3、其它寻址方式3-28086的指令系统2、堆栈操作指令出栈指令POP目的3、交换指令4、表转换指令XLAT(二)输入输出指令1、输入指令IN2、输出指令OUT(三)地址目标传送指令2、LDS将双字指针送指令指定的寄存器和DS指令3、LES将双字指针送到寄存器和ES指令(四)标志传送指令3、PUSHF标志入栈指令8086指令系统提供了加、减、乘、除四种基本运算指令,可处理无符号或带符号的8位或16位二进制数的算术运算(带符号数是用补码表示)。还提供了各种调整操作指令,故可进行压缩的或非压缩的十进制数的算术运算。绝大部分算术运算指令都影响状态标志位。执行指令ADDAX,CX;AX=5389H,CF=1ADCDX,BX;DX=1128H,CF=04、AAA非压缩BCD码加法调整指令例:求两个多字节无符号数之和。加数在DATA1开始的单元中,被加数在DATA2开始的单元中,字节长度为5,和存放在DATA2中。(二)减法指令例1:设DX=3A49H,CF=1执行指令SBBDX,1850H执行结果DX=21F8H,CF=0比较指令主要用在希望比较两个数之间的大小,而又不破坏原操作数的场合。即两者是否相等,或两个中哪一个大。一般有下列几种情况:6、AAS非压缩BCD码减法调整指令例:在BLOCK开始的内存单元中有100个16位带符号数,请寻找出最大值并送MAX单元。(三)乘法指令功能:对两个无符号数进行除法运算。源操作数可以是字节或字。4、CWD把字转换成双字指令指令执行后,不影响标志位三、逻辑运算和移位指令双操作数指令能对两个操作数按位进行与、或、异或及测试操作。目的操作数可以是寄存器或存储器;源操作数可以是寄存器或存储器,还可以是立即数。4、OR“逻辑或”指令CF3、SHR逻辑右移指令指令执行后对标志位的影响:标志位CF总是为目的操作数最后被移出的那一位的值。标志位OF:只有当计数值=1时才有效,用以表示移位前后符号位是否改变,若改变,OF=1,否则OF=0。即对左移指令(SAL/SHL),若移位后最高有效位与标志位CF不相等,则OF=1,否则OF=0。而对右移指令,若移位后,操作数的最高有效位与次高位不同,则OF=1,否则OF=0。(三)循环移位指令四、字符串操作指令1、MOVS串传送指令(不影响标志位)2、CMPS串比较指令例:在自KA和KB单元开始各有一个由30个字符组成的字符串,检查这两个字符串是否相等,并在GG单元中建立一个标志(相等为00,不等为FFH)3、SCAS串扫描指令例:内存中以BUF0单元开始的区域连续存放着一个长度为80的字符串(ASCII码串),查找字符串中是否有字符‘B’,若有,将关键字的地址送BX,若没有查到,则将BX寄存器清0。4、LODS数据串装入指令(从串中取元素指令)5、STOS数据串存储指令例:在以BLOCK为起始地址的内存缓冲区中,有一个长度为100字节的带符号数,要求把其中的正、负数分开,分别送至同一段的两个缓冲器。存放正数的缓冲区起始地址为