第四章8086指令
- 格式:ppt
- 大小:484.50 KB
- 文档页数:17
8086算术、逻辑运算及移位指令8086是一种基于x86架构的微处理器,具有广泛应用的能力。
它支持多种算术、逻辑运算和移位指令,这些指令为编程人员提供了强大的工具来处理数据和操纵位级操作。
算术指令是8086中非常重要的一部分。
它们允许我们对数据执行各种加减乘除运算。
例如,ADD指令用于对两个数进行加法运算,这通常用于求和操作。
而SUB指令则用于执行减法运算,可用于计算差值。
MUL和DIV指令则用于执行乘法和除法操作,它们对于处理需要大量数值计算的应用程序非常有用。
逻辑运算指令也是8086中的重要组成部分。
它们用于执行与、或、非和异或等逻辑运算。
AND指令用于执行位级与运算,可以对数据的每个位进行逻辑与操作。
OR指令执行逻辑或运算,可以通过将各个位进行逻辑或操作来组合数据。
NOT指令用于执行位级非运算,将数据的每个位取反。
XOR指令执行异或运算,可以对数据的位进行逻辑异或操作。
这些逻辑运算指令非常灵活,可用于编写各种数据处理和逻辑判断的算法。
移位指令允许我们在数据的二进制位级上进行操作。
8086提供了逻辑左移、逻辑右移、算术左移和算术右移指令。
逻辑左移指令将数据在二进制位级上向左移动,相当于乘以2。
逻辑右移指令将数据在二进制位级上向右移动,相当于除以2。
算术左移和算术右移指令与逻辑移位指令类似,但在进行移位时保留了最高位的符号位,以保持有符号整数的正负性。
这些运算和移位指令在编程中起着至关重要的作用。
通过巧妙地组合使用这些指令,我们可以实现各种复杂的计算和逻辑操作。
例如,我们可以使用算术和移位指令来实现高效的乘法和除法算法,减少计算时间和资源消耗。
我们还可以使用逻辑指令来处理数据的位级运算,例如检查某一位是否为1、设置某一位为1或将某一位清零。
为了更好地理解这些指令的功能和用法,编程人员需要深入学习和实践。
通过掌握8086的算术、逻辑和移位指令,我们可以编写更高效和功能强大的程序,提高计算机应用的性能和效率。
1.什么是“程序可见”的寄存器?程序可见寄存器是指在用户程序中用到的寄存器,它们由指令来指定。
2. 80x86微处理器的基本结构寄存器组包括那些寄存器?各有何用途?基本结构寄存器组按用途分为通用寄存器、专用寄存器和段寄存器3类。
通用寄存器存放操作数或用作地址指针;专用寄存器有EIP和EFLAGS,分别存放将要执行的下一条指令的偏移地址和条件码标志、控制标志和系统标志;段寄存器存放段基址或段选择子。
3.80x86微处理器标志寄存器中各标志位有什么意义?常用的7位:CF进位标志: 在进行算术运算时,如最高位(对字操作是第15位,对字节操作是第7位)产生进位或借位时,则CF置1;否则置0。
在移位类指令中,CF用来存放移出的代码(0或1)。
PF奇偶标志: 为机器中传送信息时可能产生的代码出错情况提供检验条件。
当操作结果的最低位字节中1的个数为偶数时置1,否则置0。
AF辅助进位标志: 在进行算术运算时,如低字节中低4位(第3位向第4位)产生进位或借位时,则AF置1;否则AF置0。
ZF零标志:如指令执行结果各位全为0时,则ZF置1;否则ZF置0。
SF符号标志:其值等于运算结果的最高位。
如果把指令执行结果看作带符号数,就是结果为负,SF置1;结果为正,SF置0。
OF溢出标志: 将参加算术运算的数看作带符号数,如运算结果超出补码表示数的范围N,即溢出时,则OF置1;否则OF置0。
DF方向标志: 用于串处理指令中控制处理信息的方向。
当DF位为1时,每次操作后使变址寄存器SI和DI减小;当DF位为0时,则使SI和DI增大,使串处理从低地址向高地址方向处理。
4.画出示意图,简述实模式下存储器寻址的过程。
20位物理地址如下计算(CPU中自动完成):10H×段基址+偏移地址=物理地址5. 画出示意图,简述保护模式下(无分页机制)存储器寻址的过程。
采用对用户程序透明的机制由选择子从描述子表中选择相应的描述子,得到欲访问段的段基址、段限等有关信息,再根据偏移地址访问目标存储单元。
8086指令系统总结8086是一种x86架构的微处理器,由Intel公司于1978年推出。
它是16位的,拥有20位的物理寻址能力,可以访问1MB的内存空间。
8086指令系统是其所支持的一系列指令集合,下面将对8086指令系统进行详细总结。
数据传输指令是8086指令系统中的基础指令之一,用于将数据从一个位置传输到另一个位置。
其中包括mov指令、xchg指令、push指令和pop指令等。
mov指令用于将数据从一个存储位置复制到另一个存储位置;xchg指令用于交换两个存储位置中的数据;push指令用于将数据压入栈顶;pop指令用于将栈顶的数据弹出。
算术运算指令是用于进行各种算术运算的指令。
8086支持包括加法、减法、乘法和除法等多种算术运算指令。
例如,add指令用于将两个操作数相加,sub指令用于将第二个操作数从第一个操作数中减去,mul指令用于将两个操作数相乘,div指令用于将第一个操作数除以第一个操作数,并将结果保存在指定的寄存器中。
逻辑运算指令用于进行逻辑运算,包括与、或、非、异或等运算。
例如,and指令用于对两个操作数进行按位与运算,or指令用于对两个操作数进行按位或运算,not指令用于对一个操作数进行按位非运算,xor指令用于对两个操作数进行按位异或运算。
控制转移指令用于控制程序的执行流程。
包括无条件转移指令、条件转移指令和循环指令。
无条件转移指令用于无条件地跳转到指定的地址,例如jmp指令;条件转移指令用于根据一些条件是否成立来进行跳转,例如je指令(跳转到指定地址,如果上一次比较操作相等);循环指令用于循环执行指定的指令块,例如loop指令。
I/O指令用于进行输入输出操作,包括从外部设备读取数据和将数据写入外部设备。
例如,in指令用于将输入端口的数据读取到指定的寄存器中,out指令用于将指定的寄存器中的数据写入到输出端口。
此外,8086还支持一些特殊的指令,如访问标志寄存器的指令,控制指令(如hlt指令、nop指令)和字符串指令(如movsb指令、cmpsb指令)等。
第四章习题及参考答案1. 在8086CPU中,如果SS的内容设置为1A4BH,堆栈的长度为100H字节,问:SP寄存器的初始化值为多少?SP初始指向哪个主存物理地址?参考答案:SP寄存器的初始化值为:100HSP初始指向的主存物理地址是:1A5B0H2.分别指出下列指令源操作数与目的操作数的寻址方式:(1)MOV ES, AX(2)ADD DS:[12H],AL(3)SUB BX,1200H(4)SHR AX,1(5)AND -28H[BP][DI], AX(6)MOV CX,LAB1[BX](7)SBB AX, [BX](8) OR DX,-360H[SI](9) ADC VAR1,CX(10) XOR [DI],AX参考答案:(1)寄存器,寄存器(2)直接, 寄存器(3)寄存器,立即(4)寄存器,立即(5)基址变址,寄存器(6)寄存器,相对(7)寄存器,寄存器间接(8)寄存器,相对(9)直接,寄存器(10)寄存器间接,寄存器3.指出下列指令的语法是否错误,若错误请改正。
(1)MOV DS, 1234H(2)ADD AH,AL(3)SUB CS,AX(4)MOV BX,[BX][SI](5)ADC VAR1,[BP][DI](6) SBB [BX][BP],AX(7)PUSH 5678H(8)SHL [BP][SI],CL(9)ROR AX,2(10)NEG AX,BX(11)LEA CS,AX(12)MOV AL,BX(13)ADD DS:200H,AX(14)AND [BX][BP],AH(15)OR BH,-16H[BP](16)CLC AX(17)MUL AX,BX(18)DIV 12H参考答案:(1) 错误,立即数不能直接传送到段寄存器中(2) 正确(3) 错误,不能对CS直接操作(4) 正确(5) 错误,两个操作数不能同时都在存储器中(6) 错误, 基址变址寻址方式中不能两个寄存器都是基址寄存器(7) 错误,立即数不能作为源操作数直接压入堆栈(8) 错误,目的操作数没有明确指明是字还是字节(9) 错误,移位次数大于1时,需将其提前存入CL中(10) 错误,操作数个数错误(11) 错误,目的操作数只能是16位通用寄存器(12) 错误, 操作数位数不一致(13) 正确(14) 错误, 基址变址寻址方式中不能两个寄存器都是基址寄存器(15) 正确(16) 错误,操作数个数错误(17) 错误,操作数个数错误(18) 错误,源操作数不能是立即数4. MOV BX, 2345HMOV CX, 2HCLROL BX,0FFHAND BX,CMP BX,045H执行上述程序段后,(BX)= 14H , ZF= 0 . 5. XOR AX, AX5HMOV AL,9HMOV BL,BLADD AL,AAA执行上述程序段后,(AX)= 104H , CF= 1 .6. 假设(DS)=1234H,(SI)=124H,(12464)=30ABH,(12484H)=464H,有以下程序段:[SI]LEA SI,[SI]MOV AX,1200HMOV [SI+22H],[SI+20H]LDS SI,[SI]ADD AX,执行上述程序段后,(AX)= 6156H , (SI)= 464H .7. MOV AX, 0EF23H0B5A7HMOV BX,INC AXNEG AXDEC BXNEG BX执行上述程序段后,(AX)= 10DCH ,(BX)= 4A5AH .。
8086CPU指令和寄存器英文全称。
一、数据传送指令比如,mov(move)、push、pop、pushf(push flags)、popf(pop flags)、xchg(exchange)等都是数据传送指令,这些指令实现寄存器和内存、寄存器和寄存器之间的单个数据传送。
二、算术运算指令比如,add、sub(substract)、adc(add with carry)、sbb(substract with borrow)、inc (increase)、dec(decrease)、cmp(compare)、imul(integer multiplication)、idiv (integer divide)、aaa(ASCII add with adjust)等都是算术运算指令,这些指令实现寄存器和内存中的数据运算。
它们的执行结果影响标志寄存器的sf、zf、of、cf、pf、af位。
三、逻辑指令比如,and、or、not、xor(exclusive or)、test、shl(shift logic left)、shr(shift logic right)、sal(shift arithmetic left)、sar(shift arithmetic right)、rol(rotate left)、ror(rotate right)、rcl(rotate left through carry)、rcr(rotate right through carry)等都是逻辑指令。
除了not 指令外,它们的执行结果都影响标志寄存器的相关标志位。
四、转移指令可以修改IP,或同时修改CS和IP的指令统称为转移指令。
转移指令分为一下几类。
(1)无条件转移指令,比如,jmp(jump);(2)条件转移指令,比如,jcxz(jump if CX is zero)、je(jump if equal)、jb(jump if below)、ja(jump if above)、jnb(jump if not below)、jna(jump if not above)等;(3)循环指令,比如,loop;(4)过程,比如,call、ret(return)、retf(return far);(5)中断,比如,int(interrupt)、iret(interrupt return)。