1、 INC SI INC DI可用指令 来完成该功能。 A)REP LODSB B)REP STOSB C)REPE SCASB D)REP MOVSB2、设(AL)=-68,(BL)=86,执行SUB AL,BL指令后,正确的结果是 。 A)CF=1 B)SF=1 C)OF=1 D)ZF=13、设(SS)=0FFA0H,(SP)=00B0H,(AX)=8057H,(BX)=0F79H,执行指令“PUSH AX”后,(SP)= (1) ;再执行指令:PUSH BXPOP AX后,(SP)= (2) ,(AX)= (3) ,(BX)= (4) 。4、设(AL)=-68,(BL)=86,执行SUB
2、AL,BL指令后,正确的结果是 。A)SF=1 B)ZF=0C)CF=1 D)OF=15、假设(SS)=2000H,(SP)=0012H,(AX)=1234H,执行PUSH AX后, =12H A)20014 B)20011H C)20010H D)2000FH6、若要检查BX寄存器中的D12位是否为1,应该用 指令。 A)OR BX,1000H B)TEST BX,1000H JNZ NO JNZ YES C) XOR BX,1000H D)AND BX,1000H JZ YES JNZ YES7、用BP作基址变址寻址时,操作数所在的段是当前 。 A)数据段 B)代码段 C)堆栈段 D)附加
3、段8、执行下列指令后: MOV AX,1234H MOV CL,4 ROL AX,CL DEC AX MUL CX HLT A)8D00H B)9260H C)8CAOH D)0123H四、判断题1、MOV AX,BP的源操作数的物理地址为16(DS)+(BP)。( )2、判断下列指令是否正确,若错误,请指出原因。(1) CMP CX,BYTE PTR STR+1(2) MOV DI,OFFSET BXSI(3) LEA DI,BXSI(4) PUSH AL(5) SHL AX,3(6) MOV AX,TAB2-TAB1+100(7) OUT CX,AL(8) DIV 25(9) MOV CX
4、,BX(10) POP CS(11) PUSH WORD PTR 20BX+SI-2(12) LEA BX,4BX(13) MOV BYTE PTR BX,1000(14) MOV AX,SIDI(15) MOV SAVE_WORD,DS(16) MOV AX,ARRAY1+ARRAY2(17) MOV WORD_OP1,WORD_OP1-WORD_OP2(18) MOV SP,SS:DATA_WORDBXSI(19) MOV AH,BX(20) MUL AX,BX(21) LEA DS,35DI(22) MOV STRBXSI,ES:AX(23) MOV BXBP,AX(24) ADD AX
5、,ACH一、8086指令的一般格式 概述 指令:是计算机用以控制各部件协调动作的命令; 指令系统:CPU可执行的指令的集合;机器指令:是CPU仅能识别的指令的二进制代码,也称机器码;指令格式:由操作码和操作数两部分组成,有些指令无操作数。操作码规定了指令的操作性质,用助记符表示;操作数规定了指令的操作对象。指令可分为无操作数指令、单操作数指令、双操作数指令。例:HLT 无操作数 DAA 约定或隐含操作数 INC AL 单操作数 MOV AL,BL 双操作数,其中逗号前的操作数AL为目的操作数,逗号后的操作数BL为源操作数。操作数类型有三种:立即数:出现在指令中的常数; 寄存器操作数:操作数在寄
6、存器中; 存储器操作数:操作数在存储器中。 二、 8086寻址方式 是指CPU在执行指令时寻找操作数或操作数地址的方式。1. 立即寻址:直接放在指令中的常数称为立即数,立即数只能是源操作数,立即数存放在指令操作码之后的存储单元中。MOV AL,50H 2. 寄存器寻址:存放在寄存器中的数据为操作数,寄存器操作数可以是源操作数,也可以是目的操作数。MOV AL,BL 以下寻址方式38,操作数都在存储器中。存储器操作数具有类型属性,如字节(BYTE)、字(WORD)、双字(DWORD)等,反映了数据占用存储单元的字节数,指令书写中,约定用方括号内容表示存储器操作数的偏移地址;用类型名 PTR 偏移
7、地址的形式说明指令中存储器操作数的类型,例:WORD PTR 1000H;用变量名DB/DW/DD数据序列的形式分别定义具有“变量名”的字节、字或双字存储器操作数,如BUF DB 10H,20H。3. 存储器寻址 (1)直接寻址:存储器操作数的16位偏移地址直接包含在指令的方括号中。MOV AL,1000H 约定由DS提供段地址 MOV AL,CS:1000H ;段超越,由CS提供段地址 MOV AL,SS:段超越,由SS提供段地址 (2)寄存器间接寻址:操作数所在的存储单元的偏移地址放在指令给出的寄存器中。可用于这种寻址方式的寄存器只能是SI、DI、BP和BX。其中,SI、DI、BX约定的段
8、寄存器是DS,而BP约定的段寄存器SS。MOV AX,SI ;AXDS:SI MOV BX,AX ;DS:BXAX (3)基址寻址:操作数的有效地址是指令给定的位移量(8位或16位)与BX、BP内容之和,段寄存器约定同寄存器间接寻址,允许段超越。MOV AX,BX+3AH ;BX+3AH MOV BP+4EB3H,AX;SS:BP+4EB3HAX (4)变址寻址:操作数的有效地址是指令给定的位移量与寄存器SI或DI内容之和,段寄存器约定在DS中,允许段超越。MOV DI+12H,AX ;DI+12H AX MOV BX,SS:DI+45H ;BXSS:DI+45H (5)基址变址寻址:操作数的
9、有效地址是指令给定的位移量和一个基址寄存器(BX或BP)及一个变址寄存器(SI或DI)的内容之和,段寄存器约定由基址寄存器决定,若为BX,段寄存器约定为DS;若为BP,段寄存器约定为SS,允许段超越。MOV BX,DI+BP+45H ;DI+BP+45H MOV AX,ES:SI+BX+76H;AXES:SI+BX+76H 注意:基址寄存器BX和BP不能同时出现在一个方括号内,变址寄存器DI和SI亦如此。(6)串寻址:用于数据串操作指令,它隐含地运用:SI指出源串偏移地址,DI指出目的串偏移地址,指令执行后,SI和DI的内容自动加1或减1(操作数为字节类型时)、加2或减2(操作数为字类型时);
10、约定源串段地址在DS中,目的串段地址在ES中。不允许段超越。MOVSB ;ES:DI DS:SI,SISI 1,DIDI 1 MOVSW ;2,DIDI 2 (7)端口寻址:操作数在外设端口中。直接端口寻址:指令中直接给出的8位常数是外设端口地址。IN AL,34H ;AL34H OUT 34H,AL ;34HAL 间接端口寻址:指令中外设端口的16位地址在DX中。MOV DX,280H IN AL,DX ;AL280H OUT DX,AL ;280HAL (8)隐含寻址:指令中没有给出操作数,但却隐含在固定对象中。 例:AAA ;隐含对AL操作, 三、数据传送指令 1. 通用数据传送指令 M
11、OV dst,src 指令功能:dstsrc, 标志寄存器:不影响, 操作数:src:通用寄存器、段寄存器、存储器操作数、立即数; dst:通用寄存器、段寄存器、存储器操作数。注意点:src和dst必须类型一致(都是8位或者是16位); dst不能是立即数; 当操作数不是立即数时,两个操作数不能都是存储器操作数; 源操作数是立即数时,目的操作数不能是段寄存器; CS不得作目的操作数。MOV BX,CX ;BXCX MOV 2000H,BL ;2000HBL XCHG dst,src dstsrc 两操作数可以是通用寄存器和存储器。两操作数不能都是存储器操作数; 两操作数类型必须一致。XCHG
12、AX,BX ;AX BX PUSH src SPSP-1,SPsrcH,SPSP-1,SPsrcL 不影响 寄存器(IP除外)或存储单元。源操作数只能是16位,而不能是8位的。 POP dst dstLSP,SPSP+1,dstHSP,SPSP+1 不影响,POPF除外 同PUSH指令,但CS不能作为目的操作数。目的操作数只能是16位的,而不能是8位的。 XLAT(查表指令) ALDS:BX+AL;不影响;用途:用于查表,表首地址的偏移地址在BX中,表长度可达256字节。2. 地址传送指令:用来传送操作数的地址。 LEA reg16,src 取偏移地址指令 将源操作数的偏移地址送16位通用寄存
13、器;目的操作数是16位通用寄存器,源操作数是存储器操作数。 LDS reg16,src 和LES reg16,src 取地址指针指令 指令功能:将源操作数的有效地址所对应的双字存储单元的高16位内容送入DS(LES指令送入ES),低16位内容送入指令指定的16位通用寄存器;不影响。设某双字存储单元偏移地址为3000H,双字数据为12345678H,则 LDS SI,3000H ;DS=1234H,SI=5678H LES DI,3000H ;ES=1234H,DI=5678H 3. 标志传送指令 专门用于对标志寄存器进行操作 LAHF ;AH FL ,标志寄存器低8位送AH SAHF ;FLA
14、H,AH的内容送标志寄存器低8位 PUSHF ;标志寄存器内容压栈 POPF ;栈顶内容送标志寄存器 SAHF和POPF指令将直接影响标志位,而其他传送均不会对标志位产生影响。4. 输入/输出指令 用于主机与外设端口间的数据传送。IN AL,n; IN AL,DX; IN AX,n; IN AX,DX 从端口(地址为n或在DX中)输入8位数据到AL中或输入16位数据到AX中;OUT n,AL; OUT DX,AL; OUT n,AX; OUT DX,AX 从AL中输出8位数据到端口(地址为n或在DX中)或从AX中输出16位数据到端口(地址为n或在DX中)。四、算术运算指令 1. 加法指令 AD
15、D dst,src dstsrc+dst 影响AF、CF、PF、OF、ZF、SF 目的操作数:通用寄存器、存储器; 源操作数:通用寄存器、存储器、立即数;两操作数必须类型一致; 两操作数不能同时为存储器操作数。ADD AX,BX ;AXAX+BX ADD BX+DI+64H,AX ;BX+DI+64HAX ADC dst,src dstdst+src+CF 其余同ADD指令。 INC dst dstdst+1 影响OF、SF、ZF、AF、PF;8位/16位通用寄存器或存储器;不影响CF。2. 减法指令 SUB dst,src dstdst-src;SUB BX,CX ;BXBX-CX SBB
16、dst,src dstdst-src-CF;其余同SUB指令。SBB BX+SI,AL ;BX+SI BX+SI-AL-CF DEC dst dstdst-1 其余同INC指令。 NEG dst dst0-dst或det +1 影响AF、CF、PF、OF、ZF、SF;8位/16位通用寄存器或存储器。MOV AH,5 NEG AH ;AH=11111011B,是-5(补码) MOV AX,-6 NEG AX ;AX=0006H,是+6 CMP dst,src dst-src 其余同SUB指令;指令执行后,目的操作数保持原值不变。3. 乘法指令 MUL src 无符号数乘法指令 AXAL*src(
17、字节乘法) DXAXAX*src(字乘法) 字节乘:若乘积高8位AH 0,则CF=1,OF=1, 若乘积高8位AH=0,则CF=0,OF=0; 字乘: 若乘积高16位DX 若乘积高16位DX=0,则CF=0,OF=0;可以是通用寄存器、存储器,不能是立即数。MUL BX ;DXAXAX*BX MUL BYTE PTR SI ;AXAL*(DS:SI) IMUL src 带符号数乘法指令 同MUL指令;若乘法结果AH或DX包含有效值,则OF=1、CF=1, 若乘法结果AH或DX只是低半部分的符号扩展,则OF=0、CF=0 同MUL指令。IMUL WORD PTR DI ;DXAXAX*(DS:D
18、I) 4. 除法指令 DIV src 无符号除法指令 字节除:ALAX/src,余数在AH中, 字除: AXDXAX/src,余数在DX中。 若商超过AL(字节除)或AX(字除)所能存放的最大值(FFH或FFFFH)时,系统会自动产生0类中断,且商和余数都不确定。操作数的规定与乘法指令相同。DIV BX ;DX,AXDXAX/BX,DX余数,AX商 IDIV src 带符号数除法指令 需强调的是余数的符号必须和被除数的符号相同。当商超过AL或AX所能存放的最大值+127(字节除)或+32767(字除),以及所能存放的最小值-127(字节除)或-32767(字除)时,系统会自动产生0类中断。5.
19、 符号扩展指令 扩展带符号数的字节数 CBW 将AL中数的符号位扩展到整个AH中。 CWD 将AX中数的符号位扩展到整个DX中。MOV AL,-16 ;AL=0F0H(-16) CBW ;AX=0FFF0H(-16) CWD ;DXAX=0FFFFFFF0H(-16) IDIV BX ;DX余数,AX商 6. BCD数调整指令 压缩型BCD数(也称组合BCD数):一个字节表示两位BCD数;非压缩型BCD数(也称非组合BCD数):一个字节表示一位BCD数,有效位在低4位,高4位为零。 加法的BCD数调整 aAAA:加法的非压缩型BCD数调整指令 对在AL中两个非压缩型BCD数相加的结果,调整成非
20、压缩型BCD数在AL中;若AL低4位大于9或AF=1,则AL+6,AH+1,CF和AF置1,AL高4位清0;否则AL高4位清0,CF和AF置0, 该指令不影响PF、ZF、SF、OF。必须紧跟在加法指令之后且只能对AL中的内容进行调整。 b. DAA:压缩型BCD数调整指令 对在AL中两个压缩型BCD数相加的结果,调整成压缩型BCD数在AL中;影响CF、PF、AF、ZF、SF,其中CF=1说明结果大于99。MOV BL,35H MOV AL,85H ADD BL,AL DAA 结果AL=20H,CF=1,AF=1,PF=0,ZF=0,SF=0 减法的BCD数调整 aAAS:减法的非压缩型BCD数
21、调整指令 对在AL中两个非压缩型BCD数相减的结果,调整成非压缩型BCD数在AL中;影响AF、CF;必须紧跟在减法指令之后且只能对AL中的内容进行调整。SUB AL,BL ;AL和BL中的非压缩BCD数相减 AAS ;调整AL为正确的非压缩BCD数 bDAS:减法的压缩型BCD数调整指令 对在AL中两个压缩型BCD数相减的结果,调整成压缩型BCD数在AL中;同DAA指令。 乘法的BCD数调整 AAM;非压缩型BCD数调整 对AX中两个非压缩型BCD数在相乘的结果调整成两位非压缩型BCD数,高位非压缩型BCD数在AH中,低位非压缩型BCD数在AL中;影响PF、SF、ZF。必须紧跟在乘法指令之后。
22、 除法的BCD数调整 AAD;用在两位非压缩型BCD数在相除之前进行调整,对AX内容进行调整,使两个未组合的十进制数相除之后可得到非组合的BCD数结果,商在AL中,余数在AH中;必须紧跟在除法指令之前。五、位操作指令(包括逻辑运算指令、移位指令) 1. 逻辑运算指令 AND dst,src dstdstsrc 影响SF、ZF、PF,OF=0、CF=0,AF不确定 两操作数不能都是存储器操作数。MOV BX,0F56H AND BL,BH ;BL=06H OR dst,src dstdstsrc 其余同AND指令。 NOT dst dst 通用寄存器、存储器。MOV AL,05H NOT AL
23、;AL=0FAH XOR dst,src dstdst src TEST dst,src dstsrc 其余同AND指令 指令执行后,目的操作数的值保持不变。2. 移位指令 移位次数cnt可以是1,若移位次数大于1时,必须放在CL中,移位结束后,CL值不变。影响AF以外的各标志位,而AF不定;当cnt=1时,OF才有意义,当移位前操作数的最高两位相同时,移位后OF=0,当操作数的最高两位不同时,OF=1。 SAL dst,cnt 算术左移指令 SHL dst,cnt 逻辑左移指令通用寄存器或存储器的8位或16位内容。 SAR dst,cnt 算术右移指令 SHR dst,cnt 逻辑右移指令 3. 循环移位指令 只影响CF和OF,同样只有当cnt=1时,OF才有意义。操作数同移位指令 ROL dsr,cnt 循环左移指令 ROR dst,cnt 循环右移指令 RCL dst,cnt 带进位循环左移指令 RCR dst,cnt 带进位循环右移指令六、程序控制指令 用来控制程序的执行顺序。程序的执行顺序是由CS和IP确定的 转移指令可分为:段间转移(也称远转移):目标属性为FAR,同时改变CS和
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1