版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、8086CPU的指令系统与汇编语言程序设计,第四章, 指令的基本概念和指令所包含的 基本内容。 8086指令的格式及编码方式。 8086指令的寻址方式及寻址过程。 8086指令系统的分类、功能及操 作过程,每条指令的格式及用法。, 汇编语言程序的格式, 汇编语言程序的上机过程, 伪指令语句, 汇编语言程序设计的基本方法, 了解汇编语言程序的基本格式,及其上机过程。, 熟练掌握数据定义伪指令、段定义伪指令、符号定义伪指令、过程定义伪指令。, 熟练掌握汇编语言程序设计的一般步骤以及顺序程序、分支程序、循环程序、子程序设计的方法。,4.1 8086CPU的指令格式与寻址方式,4.1.1 指令的基本概
2、念,指令通常以二进制代码的形式提供给计算机,这种指令称为机器指令。,指令:指示计算机执行什么操作的命令。,指令系统 (Instruction System):,程序 (Program):,完成某个特定任务而编制的一系列指令的有序集合。,程序的执行一般是按指令的先后次序一条一条执行,但遇到转移类指令时则可能改变指令的执行次序。,计算机所能执行的全部指令。,4.1.2 指令包含的基本内容及格式,1. 做什么操作,由指令的操作码字段规定。,2. 操作数的来源,操作数来自于什么地方。由指令的操作数字段规定。,操作数的来源可以是:,3. 操作结果的去向,操作的结果将存放在何处。,4. 下一条指令的位置,
3、指示下一条指令是顺序执行还是转移执行。,指令的表示方法,1. 二进制代码表示机器语言指令,2. 助记符表示汇编语言指令,例:10001000 11011000,例:MOV AL,BL,MOV表示“传送”助记符,BL(寄存器)表示结果存放的位置,AL(寄存器)表示数据的来源。,助记符表示的指令便于书写、理解和记忆,但最终必须将助记符指令“翻译”成机器指令才能被识别和执行。这个过程叫“汇编”。,4.1.3 8086 CPU的寻址方式,地址:数据和指令存放的位置。,数据存放的位置可以是寄存器、存储器或I/O端口,指令存放的位置只能是存储器中的代码段。,寻址方式:寻找指令地址和操作数地址的方式。,寻址
4、过程:形成指令地址和操作数地址的过程。,1. 立即数寻址,操作数作为立即数就在指令中给出。,例:MOV AX,1234H,操作:把立即数1234H送寄存器AX中。,机器码:B8 34 12 (低字节在地址小的单元),AH,AL,AX,.,B8,34,12,.,代码段 (存储器中),操作码(B8),操作数(1234H)立即数,一条指令,指令执行后,AX=1234H (原有的内容被新的内容替换)。,MOV AX,1234H,2. 寄存器寻址,操作数在某个寄存器中。,例:INC BL,操作:使BL中内容加1后送回,即BL=00H,则执行后BL=01H,若BL=FFH,则执行后BL=00H,01,关于
5、存储器寻址的说明,*操作数在存储器中的一个或几个单元中。,*在以下几种寻址方式中,要找到操作数,关键是必须找到该操作数所在单元的地址。,*由于8086对存储器采用分段的组织结构,内存单元的地址由段起始地址 (基地址) 和该单元与段起始地址之间的距离 (即偏移量,以字节数计) 两部分共同决定。,段起始地址: 某个段寄存器的内容(又称段基值)乘以16得到。,段内偏移量 (亦称为:有效地址EA) : 该单元与段起始地址之间的距离(字节数)。,待寻址的内存单元,(CS, DS, ES, SS)16 段基地址,内存单元物理地址,8086规定,在执行某种操作时,采用的段寄存器有一个预先的约定。 故指令中一
6、般只需给出EA的寻址信息,CPU将能够根据该次操作的性质自动选用段寄存器,并将其与EA一起形成物理地址。 因此,存储器寻址的实质就是如何形成有效地址EA。,3. 直接寻址,指令中以偏移量方式直接给出操作数的有效地址。即,EA=指令中给出的偏移量,例:MOV AX,1234H,机器码:A1 34 12,操作:把偏移量1234H作为EA,在数据段中找到相应的字单元,再将字单元的内容送AX。,本例执行完后,AX=3050H,EA=1234H,设DS=3000H,DS16,=30000H,= 3000H16,MOV AX, 1234H,b. 段基值乘以16,相当于段基值(二进制表示)左移4位,或段基值
7、(十六进制表示)在末尾添一个0H。,注:,4.寄存器 间接寻址,以间接的方式得到有效地址EA,有几个专用的寄存器可用于间接寻址:BX,BP,SI,DI。,a. 基址寻址方式,以BX作为基址寻址寄存器,操作数在数据段中。,以BP作为基址寻址寄存器,操作数在堆栈段中。,EA=BX或BP的内容,例:MOV AX,BX,机器码:8B 04,操作:以BX的内容作为有效地址EA,在数据段中找到对应的字单元,再将该字单元的内容送AX中。,EA=BX,设DS=2000H,BX=1000H,本例执行后 AX=50A0H,这种寻址方式的优点就在于可以随时修改BX寄存器的内容,而指向不同的存储单元。故BX又称为基址
8、指针寄存器。,b. 变址寻址方式,以SI,DI寄存器作为间接寻址寄存器,操作数在数据段中。,EA=SI或DI内容,例:ADD AX,SI,EA=SI,操作:以EA作为有效地址,在数据段中找到某个操作数,再将该操作数与AX的内容相加,结果存放在AX中。,5.寄存器相对寻址,操作数的有效地址EA由两部分合成,一部分置于某个基址或变址寄存器中,另一部分为指令中指定的8位或16位位移量。操作数所在的默认段与寄存器间接寻址类似。 例: MOV AX,4000H DI 或 MOV AX,DI + 4000H 设DI=1000H,则有效地址为: EA=1000H+4000H=5000H。 若DS=3000H
9、,则物理地址为: 30000H + 5000H = 35000H。,6. 基址变址寻址,既有基址寄存器(BX或BP),又有变址寄存器参与的(SI或DI)寻址,操作数在基址寄存器所规定的段中。,EA=(BX或BP)+(SI或DI),例: MOV AX,BXDI 或 MOV AX,BX+DI 设BX=6000H,DI=1000H,则:EA=6000H+1000H=7000H,默认段为DS。 若DS=2000H,则源操作数所对应的物理地址为:20000H+7000H=27000H。,7.相对基址变址寻址,有效地址由三部分组成, 即:EA=基址寄存器内容+变址寄存器内容+8位或16位位移量。 操作数所
10、对应的默认段与基址变址寻址方式相同。 例: MOV AX,BX+SI+0080H; 则:EA=BX+SI+0080H,操作数在数据段,例:MOV AX,0260H BX SI,EA=BX+SI+0260H,操作数在数据段中,MOV AX,INF BP+DI,EA=BP+DI+位移量INF,操作数在堆栈段中,* 以上两种基址+变址的格式都是合法的。,课堂练习与思考:,1.请指出下列每条指令源操作数的寻址方式。,(1) MOV AX, BX (2) MOV CH, 3AH (3) MOV BX, 2000H (4) MOV DX, BX (5) MOV CX, BP+2 (6) MOV AX, 3
11、BX DI (7) MOV AL, ES:SI (8) MOV BX, DS:BP,;寄存器寻址,操作数在BX中 ;立即数寻址,操作数为3AH ;直接寻址,EA=2000H,数在数据段 ;间接寻址,EA=BX,数在数据段 ;寄存器相对寻址,EA=BP+2,数在堆栈段 ;相对基址变址寻址,EA=BX+DI+3,数在数据段 ;含段超越的变址寻址,EA=SI,数在附加段 ;含段超越的基址寻址,EA=BP,数在数据段,课堂练习与思考:,2. MOV AX,BX+SI+0080H, 即:将BX与SI中的内容与0080H相加作有效地址。 3.设BX=0123H DI=1000H DS=3200H,默认DS
12、作为操作数对应的段寄存器(假定没使用段前缀),试指出下列指令的寻址方式,并写出其操作数的有效地址和物理地址。 (1)MOV AX,1A38H (2)MOV AX,BX (3)MOV AX,BX+1A38H (4)MOV AX,BX+DI (5)MOV AX,BX+DI+1A38H,课堂练习与思考:,解: (1)直接寻址 有效地址=1A38H, 物理地址=32000H+1A38H=33A38H (2)寄存器间接寻址 有效地址=0123H, 物理地址=32000H+0123H=32123H (3)寄存器相对寻址 有效地址=0123H+1A38H=1B5BH, 物理地址=32000H+1B5B=33
13、B5BH (4) 基址变址寻址 有效地址=0123H+1000H=1123H, 物理地址=32000H+1123H=33123H (5)相对基址变址寻址 有效地址=0123H+1000H+1A38H=2B5BH, 物理地址=32000H+2B5BH=34B5BH,4.2 8086指令系统,8086指令按功能分为六大类。,mem 存储器操作数 data 立即数 opr 表示操作数 存储单元的内容 acc 累加器操作数(AX或AL) reg 寄存器 src 源操作数 segreg 段寄存器 dist 目的操作数 S_ins 串操作指令 disp 8位或16位位移量 count 移位次数,可以是1或
14、CL port 输入输出端口,可用数字或表达式表示,本节中要用到的一些符号所表示的含义:,4.2.1 数据传送类指令,数据传送指令能够完成下列操作数的传送任务。,立即数,存储器,段寄存器CS,DS,ES,SS,通用寄存器组AX,BX,CX,DXBP,SP,SI,DI,(CS不能作目的寄存器),1. 通用数据传送指令 MOV,指令形式: MOV dist, src,功能:将源操作数s复制到目标操作数d,源保持不变,目标被源代替。,注: d, s不能同时为存储器,错误指令:MOV BX,SI , d不能为立即数,错误指令:MOV 1234H,AX , d, s必须同时为字节型或字型,错误指令:MO
15、V AX,BL ,指令后的分号“;”以后为注释部分,对指令的执行没有任何影响,主要是便于阅读或解释指令的功能。,例:MOV AX,0 ; AX0,AX清0,;执行后,AX=0,MOV SI,BP ; SIBP,BP内容送SI,;执行后,SI=BP,BP不变,MOV AL,BUFFERS ;BUFFERS内存单元内容送入AL,这里,BUFFERS代表符号地址,从该地址单元中取出内容送AL寄存器。,相当于直接寻址方式。,MOV AX,DATA SI+BX,EA=SI+BX+DATA,在数据段中寻找字单元,取出该字单元的内容送入AX。,设DS=3000H,SI=200H,BX=1000H,DATA的
16、偏移量为100H,则:,EA=SI+BX+DATA=200H+1000H+100H=1300H,物理地址=DS16+EA=30000H+1300H=31300H,即从31300H和31301H两单元中取出内容送AX。,MOV AX,DATA SI+BX,2.交换指令: XCHG d, s ;交换源和目标操作数,注:d=通用寄存器,s=通用寄存器或存储器,例:XCHG AX,SI+400H,3. 堆栈操作指令:PUSH、POP PUSH s ; SP2 SP; 源操作数压入堆栈保存,POP d ; SP所指堆栈的内容送目的地; SP+2 SP,例:PUSH BX;把BX内容压入堆栈,设 SS=2
17、000H,SP=0040H,BX=2340H,则执行后,2340H被保存到堆栈,同时SP=003EH,BX内容不变,注:s和d只能为16位寄存器或存储单元,POP CS ,(1) 标志入栈指令:PUSHF,功能:把16位的标志寄存器压入堆栈保存,且:SP2SP。,4. 标志寄存器传送指令,(2)标志出栈指令:POPF 功能:将当前SP所指内容(2字节)弹出至标志寄存器,且:SP+2SP。,(3)读取标志寄存器指令: LAHF,功能:将标志寄存器低8位装入AH寄存器,(4)设置标志指令:SAHF,功能:把AH的内容送入标志寄存器的低8位。,5. 地址传送指令,在程序设计中,对于任一个存储器操作数
18、,都是由逻辑地址(包括:段地址和偏移地址)确定了它们在存储器中的位置。 目标地址传送指令用于获得存储器操作数的段地址或偏移地址。,(1) 取有效地址指令: LEA d, s,例:LEA BX,COUNTER; 取COUNTER地址偏移量BX,(2) 地址指针装到指定的寄存器和DS的指令: LDS d, s,功能:装入地址指针,段地址DS,偏移地址d,这条指令往往改变了段寄存器DS的内容,使得DS指向了另外一个数据段。,例:LDS SI,BASE,设执行前,DS=1000H,SI=0000H,BASE偏移地址为0004H,10004H10007H单元内容依次为00H,30H,00H,20H;,则
19、执行后:DS=2000H,SI=3000H,00,30,00,20,0004H,SI=3000H,原DS所指向的数据段,新DS所指向的数据段,1000H1610000HDS,BASE,30,00,2000,SI,DS,2000H1620000HDS,(3) 地址指针装到指定的寄存器和ES的指令:LES d, s,功能:装入地址指针,段地址 ES,偏移地址d,即:BX寄存器含有表格的起始地址, AL中的值是作进入表格中的偏移量, 查出表格中的内容送入AL中。,(1)换码指令XLAT(查表转换) 功能: (BX+AL)AL,6.累加器专用传送指令,例:设表首的偏移地址为2000H,要查找表内第4号
20、单元 (从0号算起)的内容并送回AL,则程序段如下:,MOV BX,2000HMOV AL,04HXLAT,设表中内容如下页图所示, 则执行后,AL=09H,09,(2)输入/输出(I/O)指令,功能:从指定端口输入数据至累加器acc (AL或AX) ,port=0255,IN acc, port,IN acc, DX,功能:从DX指示的端口输入数据至累加器,OUT port, acc,功能:将累加器的数据输出至指定端口。,OUT DX,acc,功能:将累加器的数据输出到DX所指示的端口。,注: 16位端口地址必须送入DX中。, 若采用AX,则表示16位数据传送(输入/输出),4.2.2 算术
21、运算类指令,算术运算指令的操作数可以是无符号数,也可以是有符号数。,算术运算指令一般影响标志位,而数据传送指令一般不影响标志位。,1. 加法指令,(1) ADD d, s,功能:将s与d相加,结果在d中。根据操作结果设置标志位。,例:ADD BX+106BH,1234H,设DS=2000H,BX=1200H, 则:EA=1200H+106BH=226BH,物理地址:2000H16+226BH=2226BH,又设原来(2226BH)=90H,(2226CH)=30H,则指令执行后有:3090H+1234H=42C4H,即:,(2226BH)=C4H,(2226CH)=42H 标志位:CF=0,Z
22、F=0,SF=0, AF=0,PF=0 注: 42C4H=0100,0010,1100,0100B,(2) ADC d, s,功能:将s与d再与进位CF相加,结果留在d中,ADC指令主要用于多字节相加。,注:若是立即数,且最高位为数码AF,则必须在前面添加一个0,以避免混淆。,(3) INC d,功能:将d加1后送回d。,注:INC指令不影响进位标志CF。,该指令经常用于修改地址指针寄存器 (BX, BP, SI, DI),使之指向下一个单元。,2. 减法指令,(1) SUB d, s,功能:d-sd,同时影响标志位。,(2) SBB d, s,功能:d-s-CFd,同时影响标志位。,(3)
23、DEC d,功能:d-1d,该指令与INC相反操作,也不影响进位标志CF。,(4)求补指令:NEG d,功能:对d进行求补运算后送回 (按位求反再加1)。,例:MOV AL,7FH,NEG AL ;将AL中的各位求反后再在最 低位加1,即: AL +1AL; 亦即:0-ALAL 计算结果:AL=AL+1=7FH+1=80H+1=81H 或者:AL=0-AL=0-7FH=81H,(5) 比较指令 CMP d, s,功能:作一次减法运算d-s,但不回送结果,只根据结果设置标志位。,比较指令往往用于判断两数是否相等,或两数大小关系。若相等,则零标志ZF=1。,3. 乘法指令,乘法指令在指令中只出现一
24、个操作数s (乘数),另一个操作数固定在累加器(AX或AL)中。,(1) MUL s,功能:无符号数乘法指令,a. 8位乘法,被乘数=AL,乘数=s,积(16位)=AH:AL中,即在AX中,AH为高8位,AL为低8位。,b. 16位乘法,被乘数=AX,乘数=s,积(32位)=DX:AX,DX为高16位,AX为低16位。,例:MUL BX,若执行前 AX=0012H,BX=0066H,则执行后 DX=0000H,AX=072CH,(2) IMUL s,功能:有符号数乘法指令,8086规定,有符号数一般采用补码表示。故有符号数作乘法运算时,必须先把它们转变为原码数相乘,积也为原码数,再将原码数转变
25、为补码数。这个工作由CPU自动完成。,例:MOV AL,88H; 88H为 120的补码,MOV BL,2,IMUL BL,结果:AX=FF10H ;FF10H为240的补码,若直接用MUL BL指令,则AX=0110H,4. 除法指令,(1) DIV s,功能:无符号数相除,a. 字节除,被除数=AX,除数=s (s0),结果:商=AL,余数=AH,b. 字除,被除数=DX:AX,除数= s (s0),结果:商=AX,余数=DX,注:如果除数太小,使得商超出了一个字节或字所能表示的范围,则会出现“被0除”的错误(即产生一个“除法出错内部中断”请求)。,例:MOV AX,800HMOV BL,
26、2DIV BL,结果错误( “被0除” ),(2) IDIV s,功能:带符号数除法,采用的固定寄存器与DIV相同。,(3)字节扩展为字指令 :CBW,CBW:字节除法的符号扩展指令,功能:若AL为正数(D7=0) 则 AH=00H,AL为负数(D7=1) 则 AH=FFH,CWD:字除法的符号扩展指令,功能:若AX为正数(D15=0) 则 DX=0000H,AX为负数(D15=1) 则 DX=FFFFH,CBW和CWD一般用于带符号数除法指令之前。,(4)字扩展为双字指令CWD,5. 十进制调整指令,运算器按二进制规律进行运算,如果参与运算的是BCD码数,则需要对结果进行调整。, AAA:加
27、法的非压缩型BCD码调整指令,功能:对未组合型BCD码加法的结果进行校正(调整)。,校正(调整)方法:,若AL中低4位数值 9 或 AF = 1,则:,a. AL+6 AL,且 AL 高4位清0,b. AH+1 AH,否则不作调整。,(1)加法的BCD码调整, DAA:压缩型BCD码加法调整指令,功能:对组合型BCD码加法的结果进行校正(调整)。,DAA同时对AL中低4位和高4位进行调整。,(2)减法的BCD码调整 AAS:非压缩型BCD码减法的调整指令 指令功能:把AL的减法结果调整为非压缩型BCD码数。调整后的结果低位在AL中,高位在AH中。,调整的原则是:若AF=1,则执行操作: AL-
28、6AL,且将AL的高4位清0; AH-1AH;1CF。 否则,不做调整。, DAS:压缩型BCD码减法的调整指令,指令功能:把AL中的减法结果调整为缩压型BCD码数,调整后的结果在AL中。 调整原则如下:若AL中低4位大于9或AF=1,则AL-06HAL,并使AF置1; 若AL中高4位大于9或CF=1,则AL-60HAL,并使CF置1。,最后结果 AL = 00110110B(代表36),CF=0,(3)乘法的BCD码调整,AAM:乘法的非压缩型BCD码调整 指令功能:把AX的乘法结果调整为非压缩型BCD码数。调整后的结果低位(个位)在AL中,高位(十位)在AH中。 调整过程:把AL的内容除以
29、0AH,商放AH中,余数放AL中。,00001000, 00001001,AL= 01001000,AH = 00000000,最后结果 AH = 00000111B (代表7),对上述结果进行调整:AL/00001010BAH (商),AL%00001010B AL(余数),AL = 00000010B (代表2),AH,AL中表示未组合型BCD码72。 AAM的操作实质是: 将AL中不大于99的二进制数转换成非压缩型BCD码,(4)除法的BCD码调整,AAD:除法的非压缩型BCD码调整 指令功能:对AX中的两位非压缩型BCD码数进行调整。 调整原则:AH0AH+ALAL,0AH; 显然AA
30、D的操作实质是将AX中的非压缩型BCD码(十进制数)转换为二进制。 与其它5条调整指令不同的是,AAD指令须放在相应的除法指令之前。,例:MOV AX, 00000111 00000010B (代表72),AAD,调整后: AH = 00000000;,AAD指令相当于: 将两个未组合型BCD码数转换为一个二进制数。,4.2.3 逻辑运算和移位类指令,逻辑指令在底层软件中提供了对二进制位的控制。可以对位进行置位、清0或取反。常用于控制系统的I/O设备。,1. 逻辑运算类指令,(1) AND d, s,功能:s 和 d 按位相 “与”,结果在 d 中。,AND指令通常用于使某些位清0,而另一些位
31、保持不变。,例:AND BX, 0F0FH,若BX=5555H,则执行后 BX=0505H,(2) OR d, s,功能:s 和 d 按位相 “或”,结果送 d 。,OR 操作经常用于将某些位置位,其它位不变。,(3) XOR d, s,功能:s 和 d 按位相 “异或”,结果送 d 。,XOR 操作经常用于将某些位取反,其它位不变。,(4) NOT d,功能:将 d 按位求反后送回。 即:dd,(5)测试指令 TEST d, s,功能:s 和 d 按位相 “与”,但不送结果,只根据结果设置标志位。,TEST 指令通常用于测试某些位是为0还是为1 例:TEST AL,09H ;AL09H,即测
32、试AL的 D3、D0位 ;若此两位均为0,则ZF=1, ;否则ZF=0,2. 移位指令,(1) 算术移位,a. 算术左移,CF,0,1,1,0,1,0,1,0,1,左移 1 次: SAL d, 1,左移多次: SAL d, CL ;CL中的值为移位次数,例:MOV BL, 10001001B,SAL BL, 1,结果: CF = 1,BL = 00010010B,注:移位多次时,移位次数必须预先置入CL中。,右移 1 次: SAR d, 1,右移多次: SAR d, CL,b. 算术右移,(2) 逻辑移位,a. 逻辑左移 SHL与SAL完全相同。,(3) 循环左移,不带进位循环左移 ROL d
33、, 1ROL d, CL,b. 带进位循环左移 RCL d, 1RCL d, CL,(4) 循环右移,a. 不带进位循环右移 ROR d, 1ROR d, CL,b. 带进位循环右移 RCR d, 1RCR d, CL,例:设32位数在DX:AX中,实现32位数整个左移1次。,SALAX,1,RCLDX,1,4.2.4 串操作指令,(1) 串的概念,串是连续存放在内存中的字节块或字块。每个串有一个起始地址和长度。,(2) 方向标志,方向标志DF选择串操作期间寄存器 DI ,SI 的自增(DF=0)或自减(DF=1)操作。,(3) 串所在的段,规定:(1) 源串在数据段,用SI作地址指针,(2)
34、 目的串在附加段,用DI作地址指针,如果源串与目的串实质上在一个段中,则要令ES = DS。,表4.1 串操作指令的隐含参数,1.串传送指令,MOVS d,s,或写成 MOVSB (字节串传送) MOVSW (字串传送),2. 读串 LODS s,LODSB (字节串),LODSW (字串),功能:DS:SI AL或AX 同时自动修改SI,3. 存储串 STOS d,STOSB (字节串),STOSW (字串),功能:AL或AX ES:DI 同时自动修改DI,4. 串比较 CMPS d, s,CMPSB (字节串比较),CMPSW (字串比较),功能:作一次减法:DS:SI - ES:DI 但
35、不送结果,同时自动修改SI,DI 串比较指令常常与有条件重复前缀配合。,5. 串扫描(搜索) SCAS d,SCASB (字节串搜索),SCASW (字串搜索),功能:做一次减法 AL - ES:DI (字节) AX - ES:DI (字) 同时自动修改DI,但不回送结果,只 根据结果置有关标志位 串搜索指令也常与有条件重复前缀相配合。,重复前缀 (REP)可以加到串数据传送指令上。REP前缀使得每次执行串指令后CX减1。CX减1以后,重复执行串指令,直到CX值为0时,指令才终止。,6. 重复前缀,(1)REP S_ins ;CX-1CX,若CX0, 重复执行串操作。常用作MOVS,STOS指
36、令的前缀,(2) REPE/REPZ S_ins ; CX-1CX,若CX0 ;且ZF=1重复,否则不重复常用作CMPS、SCAS指令的前缀,(3) REPNE/REPNZ S_ins ; CX-1CX, CX0 ;且ZF=0时重复, ;否则不重复。 常用作CMPS,SCAS指令的前缀,例1. 设源串在1000H:2000H开始的100个字节单元中,要求将源串送到3000H:1020H开始的目的串中。,MOV AX,1000H MOV DS,AX;置源数据段寄存器 MOV SI,2000H;置源串指针初值 MOV AX,3000H MOVES,AX;置目的附加段寄存器 MOVDI,1020H;
37、置目的串指针初值 CLD;DF = 0,使SI,DI自增 MOVCX,64H;置重复次数100D REP MOVSB;重复串传送,直到CX = 0,初始化,例2. 比较两个串,发现有不同的字符时则停止比较(即:判断两个字符串是否完全相同)。,CLD MOV CX,100 MOV SI,2500H MOVDI,1400H REPE CMPSB;串比较,直到ZF = 0或CX=0才停止。,结果:若ZF=0,则两个串不相等; 若ZF=1,则两个串相等。,4.2.5 控制转移类指令,程序控制指令用来控制程序的走向,其实质是设法改变当前的CS和IP值,以使CPU转移到一个新的地址处执行程序。 根据CS和
38、IP值的变化情况,转移指令分为段内转移和段间转移。,段内转移(属性NEAR) : 转移指令和转移目标在同一代码段内,转移时仅需要改变IP的值,而CS的值保持不变。 段内转移可实现在一个代码段内的地址空间范围(最大为64KB)内任意转移。 若段内转移的范围在-128+127之间,则称为短转移(属性SHORT),段间转移(属性FAR): 转移指令和转移目标不在同一代码段内,转移时需 要同时改变CS和IP的值。 段间转移可实现在1MB的地址空间范围内任意转移。,无论是段内转移还是段间转移,都还有直接和间接转移之分。,直接转移:在转移指令中直接指明目标地址的转移量称为直接转移。 间接转移:如果转移地址
39、存放在某一寄存器或内存单元中,则称为间接转移。 若转移地址存放在寄存器中,则只能实现段内间接转移(因为寄存器间接寻址的最大范围为64K); 若转移地址存放在内存单元中,则既可实现段内间接转移,也可实现段间间接转移。,段内转移还有相对和绝对转移之分,相对转移:目标地址是IP值加上一个偏移量的转移称相对转移。 绝对转移:以一个新的值完全代替当前的IP值(CS值可能也发生改变)的转移称为绝对转移。 在8086指令系统中,段内直接转移都是相对转移,段内间接转移以及段间转移都是绝对转移。,A:Above 高于, B:Below 低于, C:Carry 进位, E:Equal 等于 G:Greater 大
40、于, L:Less 小于, N:Not 无, O:Over 溢出 , S:Sign 符号, PE:Parity Even 奇偶性偶, PO:Parity Odd 奇偶性奇,8086提供了四种控制转移指令:无条件转移指令,条件转移指令,循环控制指令和中断指令。 注意指令中条件缩写字母的含意分别是:,1. 无条件转移指令,(1) JMP 目标 a. 段内直接转移 格式 JMP 目标标号 特点:仅仅改变IP值,而CS值不变。,例:JMP ADDI 这里ADDI为转移目标的标号。,b. 段内间接转移,格式: JMP BX,以BX的内容作为转移目标的偏移地址。,CS值不变,IP值改变。,c. 段间直接转
41、移,格式:JMP FAR_ADDR,功能:转移到另一个代码段的目标FAR_ADDR处执行。即以另一个段的基地址CS,标号的偏移地址IP。,当前CS=2100H,JMP 0C 02 00 65,转移目标的偏移地址,转移目标的段地址,16 21000H,代码段1,16 65000H,新CS=6500H,代码段2,转移至此,当前IP =1500H,新IP = 020CH,d. 段间间接转移,格式:JMP BX+位移量,功能:以有效地址EA = BX +位移量作为开始地址,从前2个单元中取出内容IP,后2个单元中取出内容CS,以转移到新的地址执行程序。,例:JMP BX+ADDR3 设DS=2000H
42、,BX=1400H,ADDR3=020AH,则执行过程如下:,2000H,3000,4000,IP,CS,00 30 00 40,EA=1400H+020AH,执行跳转指令后,转移至4000H:3000H处执行程序。,数据段,2. 条件转移指令,条件转移指令共有18条,这些指令根据状态标志决定是否转移,转移的目标范围在-128+127之间。,条件转移指令的执行流程,(1) 无符号数条件转移指令,设执行了指令CMP AX,BX,其中AX,BX中均为无符号数(设AX=A,BX=B) ,则采用以下指令进行转移:,为判断两个带符号数A,B大小,可先作A-B,若:,OF=0 且 SF=0 则必有 AB
43、SF=1 则必有 AB OF=1 且 SF=0 则必有 AB SF=1 则必有 AB 得出结论:判断 AB 的依据是 OFSF=0 AB 的依据是 OFSF=1 A = B 的依据是 ZF=1,(2) 有符号数条件转移指令,指令格式及功能: 设执行了指令CMP AX,BX,其中AX,BX中均为有符号数(设AX=A,BX=B) ,则采用以下指令进行转移:,(3) 单状态标志转移指令,3.子程序调用和返回指令,子程序调用(CALL)指令包括:段内直接调用、段内间接调用、段间直接调用、段间间接调用等形式。 在CALL指令中直接给出子程序名是最常见的形式。 返回指令包括RET和RET n两种形式,其中
44、的RET n是带弹出值返回指令 。,(1) CALL 目标 (过程名),CALL指令完成调用子程序的功能。,CALL指令完成的操作:, 将程序的返回地址(CALL的下一条指令地址)压入堆栈中保存。, 将目标的偏移地址IP。若为远调用则再将目标的段地址CS。, 转移至新的目标 (子程序)地址执行,如果是近调用,则堆栈中只保存返回地址的偏移地址; 若是远调用,则还必须保存返回地址的段地址。,注意:在子程序中 (过程),最后执行的一条指令必须是返回指令RET,它将堆栈中保存的返回地址自动弹出至CS和IP,从而准确地返回到主程序。,(2)RET指令 指令格式:RET 指令功能:执行与CALL指令相反的
45、操作,从子程序返回到主程序。具体操作如下: 段内返回:栈顶字IP, SP+2SP 段间返回:栈顶字IP, SP+2SP; 栈顶字CS, SP+2SP RET指令常放在子程序的最后。 类似地,RET指令是段内返回还是段间返回,取决于RET指令与CALL指令是否在同一个段内。,(3) RET n,返回指令。它与RET的区别是: 使SP值在正常返回之后的基础上再加上n (n为弹出值,是一个小于256的偶数)。 加上n的目的是为了丢弃原已压栈的n个参数。,4. 循环控制指令,(1) LOOP 目标标号,功能: CX-1 CX,若CX0则转移至目标地址; 否则顺序执行下一条指令。 注:循环前CX必须赋初
46、值(循环次数),(2) LOOPE/LOOPZ 目标标号,功能: CX-1CX,若CX0且ZF=1则转移至目标地址; 否则(CX=0或ZF=0)停止循环。,(3) LOOPNE/LOOPNZ 目标标号,功能: CX-1CX,若CX0且ZF=0则转移至目标;否则停止循环(CX =0或ZF=1)。,(4) JCXZ 目标标号,功能: 若CX=0则转移至目标地址, 否则顺序执行下一条指令。,5.中断指令,(1) 中断入口地址表,8086系统允许有256种中断类型(0255); 每个中断在中断入口地址表中占4个字节; 前2个字节用于存放中断入口地址的偏移地址; 后2个字节用来存放中断入口地址的段基址。
47、,偏移地址255,段基址255,(2) 中断的响应过程,a. 标志寄存器FR压栈;,b. 使IF = 0,TF = 0;,c. 将当前程序断点的基址和偏移地址入栈保护(以便能够正确返回);,d. 将中断类型号4,得到中断入口地址在中断入口地址表的位置,从该位置起连续的4个单元中获得中断入口地址置入CS,IP;,e. CPU转向中断服务程序执行相关程序。,(3) 中断指令,a. INT n,功能:执行软件中断,中断类型号为n, n = 0255。,b. INTO,功能:等价于INT 4,当运算结果产生溢出(OF = 1)时,产生溢出中断。,c. IRET,功能:中断返回。 执行的操作:, 从堆栈
48、中弹出断点地址送CS和IP;, 恢复标志寄存器的内容;, CPU回到被打断的地址处继续执行主程序。,4.2.6 处理器控制指令,1. 标志位操作指令,(2) CLD ;使DF = 0 (用于串操作之中) STD ;使DF = 1,(3) CLI ;使IF = 0 (禁止可屏蔽中断) STI ;使IF = 1 (允许可屏蔽中断),CLC ;使CF = 0 STC ;使CF = 1 CMC ;使CF = CF (取反),2. 外同步指令,(1) ESC 外部操作码,源操作数,交权指令,可以要求另外的处理器(如:8087)执行某种操作。,每隔5个时钟周期,测试一次TEST引脚,当测试到该引脚上的信号
49、变为低电平(有效)时,便退出等待状态。与ESC指令联合使用,提供了一种存取8087数据的能力。,(2) WAIT 等待指令,使处理器处于空转等待状态,(3) LOCK锁定命令,锁定总线,前缀指令,可放在任何一条指令前面。这条带LOCK前缀的指令的执行,可使8086的LOCK引脚低电平有效,从而使得该指令在执行期间封锁外部总线。,(1) 空操作指令 NOP,CPU执行此指令时,不做任何具体的操作,但它消耗3个时钟周期的时间,它常用于程序运行中的短延时需求等。,3. 其他处理器控制指令,(2)暂停指令 HLT,处理器暂停命令,有三种状态可以使处理器脱离暂停:,a. RESET 信号有效,b. NM
50、I 有效,c. INTR 有效 (且IF = 1),4.3 汇编语言程序设计,4.3.1 汇编语言的基本概念,1 机器语言与汇编语言(Machine Language and Assembly Language),由二进制代码0,1表示的指令称为机器指令,相应的程序称为机器语言程序 。,用指令助记符表示的指令称为汇编语言指令,对应的程序称为汇编语言程序。,例 : 将1位十六进制数转换为ASCII码字符。已知当数在0000B-1001B时,对应的ASCII码为09;当数在1010B1111B时,对应的ASCII码为AF。 设待转换的数据已在累加器AL中(低4位)。,编制的机器语言程序与汇编语言程
51、序如下表所示。,2汇编语言与高级语言(Assembly Language and Computer-independent Language),汇编语言是一种依赖于计算机微处理器的语言 汇编语言一般不具有通用性和可移植性 进行汇编语言程序设计必须熟悉机器的硬件资 源和软件资源,高级语言是面向过程的语言 高级语言具有很好的通用性和可移植性,学习汇编语言的必要性,利用汇编语言可以设计出效率极高的核心底层程序。 用汇编语言编写的程序一般比用高级语言编写的程序执行得快,且所占内存较少。 汇编语言程序能够直接有效地利用机器硬件资源。 学习汇编语言对于理解和掌握计算机硬件组成及工作原理是十分重要的。,4.
52、3.2 汇编语言源程序的组成,1汇编语言源程序的结构(Program Structure),例 将一个8位二进制数的高4位和低4位分别转换为两个ASCII字符 ,完整的汇编语言源程序如下:,NAME HEXTOASC ;* DATA SEGMENT ; 数据段定义开始 HEX DB 5AH ASC DB 2 DUP(?) DATA ENDS ; 数据段定义结束 ;*,;* STACK SEGMENT ; 堆栈段定义开始 DB 256 DUP(S) TOP EQU $ - STACK STACK ENDS ; 堆栈段定义结束 ;*,;* CODE SEGMENT ; 代码段定义开始 ASSUME
53、 CS:CODE, DS:DATA, SS:STACK START: MOV AX, DATA ; 主程序开始,MOV DS,AX MOV AX,STACK MOV SS,AX MOV SP,TOP MOV BX,OFFSET ASC MOV AL,HEX MOV AH,AL MOV CL,4 SHR AL,CL CALL NEAR PTR CONVERT HLT ; 主程序结束,CONVERT PROC ; 过程(子程序)定义开始 AND AL,0FH CMP AL,10 JB NUM ADD AL,7 NUM: ADD AL,0 RET CONVERT ENDP ; 过程(子程序)定义结束
54、 CODE ENDS ; 代码段定义结束 ;* END START ; 程序结束,要点总结:,汇编语言源程序由段结构组成。,一个段由 “SEGMENT”(段定义开始)和“ENDS”(段定义结束)语句来定义。,每个段都有唯一的段名,且前后必须一致。,不同段的段名不能相同。,数据段、堆栈段和代码段的作用各不相同。,各个段都由一系列语句组成。,语句包括指令语句和伪指令语句。,2汇编语言的语句格式(Statement Formats),汇编语言程序的每行语句由14个部分组成。指令语句和伪指令语句在格式上稍有区别,指令语句的标号后有冒号“:”,而伪指令语句的标号后则没有冒号。,指令语句的格式为:,LAB
55、EL: OPERATION OPERAND ;COMMENT 标号域 指令助记符域 操作数域 注释域,伪指令语句的格式为:,LABEL OPERATION OPERAND ;COMMENT 标号域 伪指令助记符域 操作数域 注释域, 一行最多可有132个字符, 指令助记符前面还可以有 前缀 。, 汇编语言程序语句中的四项,均可以用大写、小写或混合编写。, 语句的各部分之间至少用一个空格分开,3.标号(Label) (含数据变量标号和程序位置标号),(1) 数据变量标号的三种属性, 段值:即所在段的段地址。, 偏移量:即数据变量所在位置的地址与其段地址之差值。, 类型:指该数据变量是字节、字还是
56、双字。,(2) 程序位置标号的两种属性, NEAR段内调用或转移标号。, FAR段间调用或转移标号。,4. 操作数域(Operand Fields),(1) 常数:二进制、八进制、十进制、十六进制或ASCII码字符串。,(2) 寄存器名、标号、变量,例:指令 MOV AL, HEX 中, AL为寄存器名,HEX为变量名。,(3) 表达式:由运算符连接起来的式子叫表达式,汇编程序在对其汇编时,按一定的规则对表达式进行运算后得到一个数值或一个地址。, 表达式可分为算术表达式、逻辑表达式、关系运算表达式、分析运算表达式和合成运算表达式。,例如:5*8+30, 128/100,206 MOD 128
57、等算术表达式。,逻辑表达式的结果可能为8位或16位二进制数,视参加运算的数的字长而定。,逻辑运算指令中可以包含有逻辑表达式,如指令:AND AL, 10101010B AND 0FH,左边第一个AND为逻辑运算指令, 第二个AND为逻辑运算符, 10101010B AND 0FH 为逻辑表达式,其结果在汇编时即已确定为:00001010B,故上述指令等价于: AND AL, 00001010B,例如:指令 MOV BX, 5 GT 3 等价于 MOV BX, 0FFFFH,分析运算表达式和合成运算表达式的操作对象都为存储器操作数。,存储器操作数表示变量、符号地址、存储单元等与存储器地址有关的量。,分析运算表达式把存储器操作数分解为几个部分,如分解出段值、偏移量、类型等; 合成运算表达式则把这些组成部分综合为存储器操作
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 山东省潍坊市潍城区2025-2026学年初三考前第二次模拟考试语文试题含解析
- 江苏省徐州邳州市2026年中考模拟考试(第四次统测)英语试题含解析
- 内蒙古乌海市2026届初三下英语试题第四次月考试卷解答含解析
- 云南省昆明市盘龙区禄劝县重点名校2026届初三英语试题周练试卷含解析
- 浙江省德清县联考2026年初三教学质量检测试题(一)英语试题试卷含解析
- 江苏省宜兴市周铁区达标名校2025-2026学年初三下学期月考英语试题含解析
- 重庆市西南大附属中学2026年初三4月调研测试物理试题试卷含解析
- (正式版)DB37∕T 1635-2010 《夏玉米简化栽培技术规程》
- 慢阻肺急性加重合并II型呼吸衰竭个案护理
- 土地使用权出租合同
- 缺血性肠病课件
- 违纪违法反面典型案例剖析材料汇编3篇
- 黄金冶炼项目可行性研究报告
- 胆囊癌完整版本
- 第15课《十月革命与苏联社会主义建设》中职高一下学期高教版(2023)世界历史全一册
- 十期牛黄清心丸
- 缠论-简单就是美
- JT-T-798-2019路用废胎胶粉橡胶沥青
- 手术室应对特殊感染手术的应急预案
- 2.1科学探究感应电流的方向课件-高二物理(2019选择性)
- (正式版)JBT 14793-2024 内燃机质量评价规范
评论
0/150
提交评论