前言
不知不觉自己已经快30岁了,自己经历里两次考研的失败让我自己逐渐认识到了人生自己的选择很重要,有的时候选择错了在拼命也没有用,还有就是人要珍惜时间。
指令系统
我们首先需要知道的是什么事指令,已经指令能干啥。
指令
就是能够被计算机识别,同时完成指定的操作的一串代码,完成的操作例如通过计算机进行数据的运算呀等等。
指令的分类
- 按指令用途分类分为6大类:传送指令,算数运算指令,位操作指令,串操作指令,程序转移指令,处理器控制指令。
- 按指令的格式分为3种:双操作数指令,单操作数指令,无操作数指令。
传送类指令
传送类指令的作用是将数据信息或地址信息传送到一个寄存器或存储单元中,分为四种情况
对于段寄存器是在寻址的时候的段基址肯定是不能被轻易改变的,所有一般的指令都是不能改变段寄存器的数值的。
-
通用数据传送指令
指令格式:MOV DEST ,SRC;
指令作用:将原操作数指定的内容传送到目的操作数,指令执行结束之后目的操作数和原操作数具有的内容相同。
指令对标志寄存器的影响:无
指令使用要求:MOV指令可以是字节数据传送也可以是字数据传送,但是源操作数和目标操作数长度必须一致。
指令使用分类
(1)将立即数传送到通用寄存器或者是存储单元(立即数只能做源操作数,立即数不能传送给段寄存器)。
(2)传递寄存器之间的数据(段寄存器CS只能作为源操作数)。
(3)寄存器和存储单元之间的传送。 -
数据交换指令
指令格式:XCHG DEST,SRC;
指令作用:源操作数和目的操作数两者内容相互交换。
指令对标志寄存器的影响:无
指令的使用要求:数据交换可以在寄存器之间或寄存器和存储单元之间进行,不能在存储单元之间交换数据,寄存器只能使用通用寄存器。 -
标志传送指令
指令作用:对标志寄存器进行存取的指令有四条,他们都是无操作数指令,即指令隐含指定标志寄存器,AH寄存器或堆栈为操作数。
(1)取标志寄存器指令:
指令格式:LAHF
指令作用:将标志寄存器的低8位送入到AH寄存器。
(2)存标志寄存器指令
指令个数:SAHF
指令作用:将寄存器AH种的7,6,4,2,0位分别送入到标志寄存器的对应的低8位,高8位不受影响。
(3)标志进栈指令
指令格式:PUSHF
指令作用:先将堆栈指针SP减2,使其指向堆栈顶部的空字节单元,然后将16位的标志寄存器的内容送到SP指向的字节单元。
(4)标志出栈指令
指令格式:POPF
指令作用:将由SP指向的堆栈的顶部的一个字节单元的内容送入标志寄存器,然后SP的内容加2.
地址传送指令
地址传送指令有3条,他们的作用是将存储单元的地址送到寄存器。
(1)装入有效地址
指令格式:LEA DEST,SRC;
指令要求:源操作数SRC必须是一个字或者是字节存储器操作数(地址),DEST必须是一个16位通用寄存器。
指令作用:将SRC存储单元地址中的偏移量,即有效地址EA传送到一个16位的通用寄存器中。
指令对标志寄存器的影响:无
(2)装入地址指针指令
指令格式: LDS DEST,SRC 或 LES DEST,SRC
指令作用:把SRC存储单元开是的4个字节单元的内容送入DEST通用寄存器和段寄存器DS(LDS指令)或ES(LES指令),其中低地址为偏移量送入通用寄存器,高字节位段基址送入DS或ES。
加法指令
指令格式:ADD DEST,SRC(ADC代进位的加法指令)
指令功能:目的操作数和源操作数相加,其结果存储在目的操作数中,而源操作数保持不变
指令对标志寄存器的影响:有
指令要求:DEST只能是通用寄存器或存储器操作数,不能是立即数,SRC可以是寄存器,存储器或立即数操作数,DEST和SRC不能都是存储器操作数。
加一指令
指令格式:INC DEST
指令的作用:目的操作数可以是任意的8位,16位通用寄存器或存储器操作数,目的操作数被视为代符号的二进制数,根据执行的结果设置 PF,AF,ZF,SF和OF标志,但是不影响CF。
减法指令
指令格式: SUB DEST,SRC (SBB代进位的减法指令)
指令功能:目的操作数的内容减去原操作数的内容,结果送入目的操作数,源操作数中的内容不变。
指令要求:目的操作数DEST和源操作数SRC可以是8为或16位的通用寄存器,存储器操作数,但是两者不能同时是存储器操作数,立即数只能是源操作数。
减一指令
指令格式:DEC DEST
指令作用:该指令为单操作数指令,将目的操作数的内容减一后,送回到目的操作数
指令要求:DEST可以是8位或16位的通用寄存器或存储器操作数,该指令是将DEST看作是带符号的二进制数。
指令对标志寄存器的影响:同加一
求负数指令
指令格式:NEG DEST
指令功能:用零减去目的操作数的内容,并送回目的操作数
指令要求:DEST可以是任意的8位或16位的通用寄存器或存储器,被视为带符号的操作数,NEG指令也叫取补指令。
指令对标志寄存器的影响:对PF,AF,ZF,SF,CF和OF都有影响,CF只有到操作数是0 的时候CF被置为0,其余都是1
位操作指令
- 逻辑运算符:按位的逻辑元算,包括与,或,异或,非
逻辑元素指令对标志位的影响:NOT指令无影响,其余的三条根据结果的不同对SF,ZF,PF有影响。
测试指令
指令使用格式。 TEST DEST,SRC
指令作用:该指令的功能和AND指令类似,实现的是源操作数和目标操作数进行按位与的操作,对标志位的影响和AND相同,但是运算的结果不送入目的操作数。
算术位移指令
指令格式:SAL DEST,COUNT/ SAR DEST,COUNT
指令作用:算术左移,和算术右移
指令解释:算术左移最高位放到CF中 最低位补0,算术右移最低位移动到CF最高位不动
指令要求:DEST为操作对象,他可以是字也可以是字节,可以是通用寄存器或存储器操作数,移动的次数是在寄存器CL中的。
逻辑移位指令
指令格式:SHL DEST,COUNT/ SHR DEST,COUNT
指令作用:算术左移,和算术右移
指令解释:算术左移最高位放到CF中 最低位补0,算术右移最低位移动到CF最高位补0
指令要求:DEST为操作对象,他可以是字也可以是字节,可以是通用寄存器或存储器操作数,移动的次数是在寄存器CL中的。