如果您无法下载资料,请参考说明:
1、部分资料下载需要金币,请确保您的账户上有足够的金币
2、已购买过的文档,再次下载不重复扣费
3、资料包下载后请先用软件解压,在使用对应软件打开
(1)若把1K字节的数据块从偏移地址为1000H开始的单元传送到偏移地址为1400H开始的缓冲区。用一般传送指令两种方法实现。要得到内存中某个小单元的内容,必须先知道这个单元对应的偏移地址,偏移地址外面加[]就表示这个单元的内容。再参见循环指令。(2)在ASD开始的存储器单元存放10个无符号的字节数,找出其中的最小数,存入原数据之后参见LEA地址传送指令比较指令,例2.28控制传送指令3.地址传送指令8086/8088CPU提供了三条把地址写入寄存器的指令:(1)有效地址送寄存器指令指令格式:LEA寄存器,源操作数功能:某寄存器←源操作数的偏移地址操作说明:将源操作数SRC(必须是一个存储器类型操作数,因为只有存储器单元才有偏移地址)的偏移地址(16位)装入到16位目标寄存器REG中。【例2.15】设DS=3000H,BX=2000H,SI=1000H,[34000H]=56H,[34001H]=12H,执行指令LEAAX,[BX+SI+1000H]执行的结果是:AX=BX+SI+1000H=4000H。而MOVAX,[BX+SI+1000H]指令是将偏移地址为BX+SI+1000H的内存单元的内容送到AX中,结果是AX=1256H。除了LEA寄存器,[]这种形式,更多的是LEA寄存器,变量的形式变量是指在程序的运行过程中随时可以发生变化的量,变量是程序中数据的临时存放场所,你能够把程序中准备使用的每一段数据都赋给一个任意、简短、易于记忆的名字,这就是变量名。如FOXDB1,2,3,4,5表示一个名为FOX的变量中包含了1,2,3,4,5这5个字节数,占用了5个内存的字节单元,如果要得到其中某个单元的内容,就要取得该单元对应的偏移地址,比如要得到4单元的内容5,首先要取得0单元的偏移地址0单元偏移地址+4=4单元偏移地址[4单元偏移地址]=4单元的内容LEABX,FOX把变量FOX的偏移地址给BX寄存器默认FOX的首单元偏移地址送BX[BX+4]=?LEA指令的功能也可用MOV指令来实现,下面两条指令是等效的:LEABX,BUFFERMOVBX,OFFSETBUFFER指令中的OFFSET称为取偏移地址操作符。上述两条指令均可完成将变量(或标号)BUFFER的偏移地址送BX寄存器的功能。但是应该注意的是MOVREG,OFFSETSRC后面的源操作数不可以为[EA],只能是一个变量(或标号)。而LEA寄存器,源操作数后面的源操作数可以是[EA]。指令MOVDI,OFFSET[BX][SI]是对是错?(5)比较指令指令格式:CMP目的操作数,源操作数功能:目的操作数-源操作数操作说明:CMP指令将目的操作数减去源操作数,但结果不送回目的操作数。即只做减法运算,不保留差的值,运算结果的性质反映在状态标志位上。这是比较指令CMP与减法指令SUB的区别所在。CMP指令中目的操作数和源操作数的类型与SUB指令相同。可以进行字节比较,也可以进行字比较。【例2.26】CMPAL,0AHCMPAX,AREAlCMP[BX+5],SICMP指令常常与条件转移指令结合起来使用,完成各种条件判断和相应的程序转移。比较指令的执行结果将影响状态标志位。根据标志寄存器内容可判断两数大小。例如:执行CMP目的操作数,源操作数后:①若ZF=1,则目的操作数=源操作数利用JZ/JNZ指令②当两数为无符号数时,作无符号数比较:若CF=1,则目的操作数<源操作数若CF=0,则目的操作数≥源操作数利用JC/JNC指令③两个带符号数比较:若OF与SF同号,则目的操作数≥源操作数若OF与SF异号,则目的操作数<源操作数利用JGE等指令A和B均为带符号数,两个带符号数比较,可能出现4种情况。第一种情况:A>0,B>0,两正数比较,如无溢出,若结果的符号标志SF=0,则A>=B;反之,A<B。第二种情况:A<0,B<0,两负数相减,如无溢出,仍然是SF=0,则A>=B;反之,SF=1,则A<B。第三种情况:A>0,B<0,两异号数比较,结果必然是A>B,如无溢出,OF=0,SF=0,有溢出时,OF=1,SF=1例如,A=+50,B=-63,A-B=113=01110001<+127,不溢出机器中的结果为[+50]补00110010+[+63]补0011111101110001=113SF=0,OF=0如A=+127,B=-63,A-B=127-(-63)=+190>+127,溢出,OF=1,SF=1机器中的结果为[+127]补01111111+[+63]补0011111110111110=190SF=1,OF=1第四种情况:A<0,B>