微机原理-CH3-5-8086CPU串操作类指令
- 格式:pdf
- 大小:519.06 KB
- 文档页数:5
第3章指令系统机器指令:能指示计算机完成基本操作的二进制代码指令系统:CPU可执行的机器指令的集合。
为了方便编程,人们又把完成特定操作的机器码用特定的符号表示,这就产生了符号表示的机器指令-------指令助记符。
第3章8086指令系统机器指令由二进制代码组成,一条指令包括操作码和操作数(或地址)两部分,操作码指明该指令进行何种操作,操作数用来说明操作对象。
个别指只有操作码没有操作数。
由于不同的指令所表达的信息不尽相同,因此指令的长度即机器码字节数也有长有短。
8086指令系统的指令是可变长指令(1~6个字节)3.18086CPU寻址方式重点是存储器寻址存放在存储器中的数据称为存储器操作数。
指令中需要确定存储单元的段地址、偏移地址(亦称有效地址EA),以及存储器操作数的类型。
段地址存放在段寄存器中,确定段地址实际上就是确定段寄存器,采用的方法是默认或添加段超越前缀。
生成存储器有效地址有多种方法,这些方法形成了对存储器操作数的多种寻址形式。
确定数据类型的方法是源操作数和目的操作数类型一致原则或附加类型说明。
立即寻址方式中操作数也在存储器中,但立即寻址中的立即数包含在指令中,随程序存放在代码段,CPU在取指令时就获得操作数。
这里所说的存储器操作数是存放在数据段、附加段或堆栈段中,取指令时也不会被立即取到。
段超越前缀变量的定义在第四章详细介绍直接寻址:MOV AX,[2000H];寄存器间接寻址:MOV ES:[DI],AH基址寻址:MOV BYTE PTR[BX+1200H],10变址寻址:MOV DL,[SI+2AH]基址加变址寻址:MOV CL,[BX+SI+5]MOV AX,[BP+DI]MOV CL,[BX+SI+5]的等价形式:MOV CL,5[BX][SI]、MOV CL,5[BX+SI]、MOV CL,[BX][SI+5]MOV CL,[BX+SI-5]等价于MOV CL,[BX+SI+65531] MOV CL,[BX-SI]MOV CL,[SI+DI]错误!MOV[BX+DI],1000H正确吗?3.2.1数据传送类指令传送指令把数据从一个位置传送到另一个位置使用MOV指令应注意1.立即数只能作为源操作数2.无存储器之间直接传送与交换的指令3.没有用立即数对段寄存器直接赋值的指令4.段寄存器之间无传送指令5.两个操作数的类型要一致6.要能确定是字节还是字操作mov ah,al mov bvar,ch mov ax,bx mov ds,ax mov al,[bx]下列MOV指令正确吗?MOV AL,050AHMOV SI,DLMOV[BX+SI],255MOV DS,100HMOV[BX],[SI]MOV[BX+SI],bvarbvar是一个已定义过的字节变量 MOV CS,[SI]将数据段中偏移地址为2000H、2001H、2002H的3个字节的存储单元置数FFH。
8086/8088C PU指令系统分为6大类(传送指令、算术指令、逻辑运算和移位指令、串操作指令、程序控制指令、处理器控制指令)。
一、数据传送类指令数据传送类指令是指令系统中用得最多的一类指令,也是条数最多的一类指令(14条),常用于将原始数据、中间运算结果、最终结果及其他信息在CPU的寄存器和存储器之间进行传送。
根据功能的不同,数据传送类指令可分为:通用数据传送指令:M OV交换指令:X CHG堆栈操作指令:PUS H ,P OP地址传送操作指令:LEA,LDS,LES标志寄存器传送指令:LAHF,SAHF,PUS HF,P OPF累加器专用传送指令:IN,OU T,X LA T1.通用数据传送指令MOV 传送指令格式:M OV DS T,S RC执行的操作:(DST)(SRC)其中DST表示目的操作数,S RC表示源操作数。
功能:此指令把一个字节或一个字操作数从源传送到目的,源操作数内容未变,目的操作数内容和源操作数内容相同。
①从累加器送到存储器格式:M OV MEM,A C ;(mem) ac(ac表示AX,AH,A L)②从存储器送累加器格式:MOV AX,DISP[BP][SI];把地址SS×10H+(BP)+(S I)+DISP存储单元的内容送AX③从存储器或寄存器送到段寄存器格式:M OV se gre g,mem/reg ;se gr eg (mem/re g)其中se gr eg表示不包括CS的段寄存器(SS,DS,ES),本指令只能是字操作。
④从段寄存器到寄存器或存储器格式:M OV mem/reg,se gr eg ;(mem/re g) se gre g规定同③,但se gre g包括CS,即CS,SS,DS,ES。
⑤从寄存器到寄存器格式:M OV re g1,re g2;r eg1 re g2注:两个寄存器之间传送时,只能相同字长的寄存器之间传送,不能在不同字长寄存器之间传送。
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)。