微机原理指令小结

合集下载

微机原理总结2

微机原理总结2

第三章剩余的一些指令说明:还剩下十进制调整指令、符号拓展指令、逻辑运算和移位指令、循环逻辑移位指令、控制转移指令、循环控制指令、过程调用与返回指令、中断指令、串操作指令,其中,红色着重号标出的是重点需要掌握的,其余的由于用的不是很多,了解一下即可。

十进制调整指令:(这两个指令只对AF,CF寄存器有明显的影响,其余的结果不定)在具体讲解该系列的指令前,得先说一下这个“十进制调整指令”是干吗用的。

首先我们知道计算机使用二进制或是“简化后的二进制——十六进制”来表示数据的,但人们却是习惯用十进制来表示数的,如果计算机能够把数据用十进制的方式显示出来,则人们看待数据就会更加直观,于是用来表示十进制数的各种BCD码就诞生了,这里我们主要用的是8421BCD码,即每四位BCD码用来表示一个十进制的位,例如十进制数28,用8421码来表示就是:0010 1000,即十六进制表示:28H,念作二八H所以这个指令就是把运算后的结果,即用十六进制表示的数转化为人们可以看懂的十进制的样子来表示,下面就开始讲解这一系列的指令:1:AAA指令(英文全称是:Adjust ASCII ADD,由英文全称可知这个调整指令主要是用来调整加法运算结果的)功能:功能的介绍看书本111面,但有一点必须要注意,就是这个指令通常用于ADD指令之后,且操作数隐藏(操作数默认是AL与AH)。

另外:书上对这个指令没有讲解的很详细,我在某个晚上看了半个小时的这个指令,一直到快睡着后才发现,这个指令是这样的:首先务必要弄清楚,在AX中存储的值是简化为十六进制数的未组合的BCD码(英文全称是:Binary Convert dec……十进制的英文我忘了,反正字面的意思就是把二进制转化为十进制)来表示的(关于什么是组合的BCD 码什么又是未组合的BCD码,我会在下面粘贴一段百度里面的知识),例如执行AAA指令前得到AX=010AH,得认为AX表示的是十进制数20(把AX分开来看,AH=01,它是未组合的BCD码,表示的就是1;然后AL=0AH,它也是未组合的BCD码,表示的就是10,两个组合在一起就是十进制数20!这个例子不大好理解,就只能这样记了,例如两个未组合BCD码数是010EH,那同上可得其表示的数我们可以看作是十进制数24,如果举个比较好理解的例子,例如两个未组合BCD码数是0109H,则表示的数是十进制数19,不过这个数就不需要用AAA指令来调整了,因为我们一看就知道它就是十进制数19,所以AAA指令就是把像010AH、010EH这样看起来非常不爽的BCD 码数转化为看起来顺眼的未组合的BCD码数,例如上面中的010AH 与010EH经过AAA指令转化后分别变为:0200H与0204H,这样如果告诉我们这两个数是未组合的BCD码,则我们可以很容易地知道它们分别表示的就是用未组合的BCD码以十六进制数表示的可视为十进制数的20与24:有一点要注意,0200H与十进制数的20不想等,同理0204H与十进制数的24不相等,BCD码主要是方便人看的方便,实际的值是不一样的)最后总结一下,这个AAA指令就是把AX储存的两个满足某些条件的未组合的BCD码数(某些条件就是:AL中的数的低四位的值小于0AH 或是AF=1:也就是辅助标志寄存位)转化为我们更容易识别的未组合的BCD码数,它的具体步骤就是:首先判断是否满足条件,如果满足,则首先让AL中的数加上06H,接着让AL中的高四位清零,然后让AH中的数加1,最后AF=CF=1以下是来自百度的相关补充的知识:什么是未组合的BCD码,什么是组合BCD码计算机中的BCD码,经常使用的有两种格式,即分离BCD码(也就是未组合的BCD码),组合BCD码。

32位微机原理指令汇总

32位微机原理指令汇总

注意:::红笔写的为根据课本该写的,可能有错!!!一、数据传输指令作用:它们在存贮器和寄存器、寄存器和输入输出端口之间传送数据.1. 通用数据传送指令.MOV 传送字或字节.MOVSX 先符号扩展,再传送.MOVZX 先零扩展,再传送.PUSH 把字压入堆栈.POP 把字弹出堆栈.PUSH把AX,CX,DX,BX,SP,BP,SI,DI依次压入堆栈.POPA 把DI,SI,BP,SP,BX,DX,CX,AX依次弹出堆栈. PUSHA 把EAX,ECX,EDX,EBX,ESP,EBP,ESI,EDI依次压入堆栈. POPAD 把EDI,ESI,EBP,ESP,EBX,EDX,ECX,EAX依次弹出堆栈.BSWAP 交换32位寄存器里字节的顺序XCHG 交换字或字节.( 至少有一个操作数为寄存器,段寄存器不可作为操作数)CMPXCHG 比较并交换操作数.( 第二个操作数必须为累加器AL/AX/EAX )XADD 先交换再累加.( 结果在第一个操作数里)XLAT 字节查表转换.BX 指向一张256 字节的表的起点, AL 为表的索引值(0-255,即0-FFH); 返回AL 为查表结果. ( [BX+AL]->AL )2. 输入输出端口传送指令.IN I/O端口输入. ( 语法: IN 累加器, {端口号│DX} )OUT I/O端口输出. ( 语法: OUT {端口号│DX},累加器)输入输出端口由立即方式指定时, 其范围是0-255; 由寄存器DX 指定时,其范围是0-65535.3. 目的地址传送指令.LEA 装入有效地址.例: LEA DX,string ;把偏移地址存到DX.LDS 传送目标指针,把指针内容装入DS.例: LDS SI,string ;把段地址:偏移地址存到DS:SI.LES 传送目标指针,把指针内容装入ES.例: LES DI,string ;把段地址:偏移地址存到ES:DI.LFS 传送目标指针,把指针内容装入FS.例: LFS DI,string ;把段地址:偏移地址存到FS:DI.LGS 传送目标指针,把指针内容装入GS.例: LGS DI,string ;把段地址:偏移地址存到GS:DI.LSS 传送目标指针,把指针内容装入SS.例: LSS DI,string ;把段地址:偏移地址存到SS:DI.4. 标志传送指令.LAHF 标志寄存器传送,把标志装入AH.SAHF 标志寄存器传送,把AH内容装入标志寄存器. PUSHF 标志入栈.POPF 标志出栈.PUSHD 32位标志入栈.POPD 32位标志出栈.二、算术运算指令ADD 加法.ADC 带进位加法.INC 加1.AAA 加法的ASCII码调整.DAA 加法的十进制调整.SUB 减法.SBB 带借位减法.DEC 减1.NEC 求反(以0 减之).CMP 比较.(两操作数作减法,仅修改标志位,不回送结果). AAS 减法的ASCII码调整.DAS 减法的十进制调整.MUL 无符号乘法.IMUL 整数乘法.以上两条,结果回送AH和AL(字节运算),或DX和AX(字运算),AAM 乘法的ASCII码调整.DIV 无符号除法.IDIV 整数除法.以上两条,结果回送:商回送AL,余数回送AH, (字节运算);或商回送AX,余数回送DX, (字运算).AAD 除法的ASCII码调整.CBW 字节转换为字. (把AL中字节的符号扩展到AH中去) CWD 字转换为双字. (把AX中的字的符号扩展到DX中去) CWDE 字转换为双字. (把AX中的字符号扩展到EAX中去) CDQ 双字扩展. (把EAX中的字的符号扩展到EDX中去) 三、逻辑运算指令AND 与运算.OR 或运算.XOR 异或运算.NOT 取反.TEST 测试.(两操作数作与运算,仅修改标志位,不回送结果). SHL 逻辑左移.SAL 算术左移.(=SHL)SHR 逻辑右移.SAR 算术右移.(=SHR)ROL 循环左移.ROR 循环右移.RCL 通过进位的循环左移.RCR 通过进位的循环右移.以上八种移位指令,其移位次数可达255次. 移位一次时, 可直接用操作码. 如SHL AX,1. 移位>1次时, 则由寄存器CL给出移位次数. 如MOV CL,04SHL AX,CL四、串指令DS:SI 源串段寄存器:源串变址.ES:DI 目标串段寄存器:目标串变址.CX 重复次数计数器.AL/AX 扫描值.D标志0表示重复操作中SI和DI应自动增量; 1表示应自动减量.Z标志用来控制扫描或比较操作的结束.MOVS 串传送.( MOVSB 传送字符. MOVSW 传送字. MOVSD 传送双字. )CMPS 串比较.( CMPSB 比较字符. CMPSW 比较字. )SCAS 串扫描.把AL或AX的内容与目标串作比较,比较结果反映在标志位.LODS 装入串.把源串中的元素(字或字节)逐一装入AL或AX中.( LODSB 传送字符. LODSW 传送字. LODSD 传送双字. ) STOS 保存串.是LODS的逆过程.REP 当CX/ECX<>0时重复.REPE/REPZ 当ZF=1或比较结果相等,且CX/ECX<>0时重复.REPNE/REPNZ 当ZF=0或比较结果不相等,且CX/ECX<>0时重复.REPC 当CF=1且CX/ECX<>0时重复.REPNC 当CF=0且CX/ECX<>0时重复.五、程序(控制)转移指令1>无条件转移指令(长转移)JMP 无条件转移指令CALL 过程调用RET/RETF过程返回.2>条件转移指令(短转移,-128到+127的距离内)( 当且仅当(SF XOR OF)=1时,OP1<OP2 )一测试无符号整数运算的结果(标志C和Z).JA/JNBE 不小于或不等于时转移.JAE/JNB 大于或等于或者进位为0转移.JB/JNAE 小于等于或者进位为1转移.JBE/JNA 小于或等于转移.二测试带符号整数运算的结果(标志S,O和Z).JG/JNLE 大于转移.JGE/JNL 大于或等于转移.JL/JNGE 小于转移.JLE/JNG 小于或等于转移.三根据单个条件标志位转移的条件转移指令。

微机原理上机个人总结

微机原理上机个人总结

微机原理上机个人总结
微机原理是一门研究计算机硬件组成和工作原理的课程,通过这门课程的学习和实践,我对计算机的组成结构、指令执行原理和存储器等方面有了更深入的了解。

在上机实践中,我主要学习了计算机的指令系统和指令的编码方式。

通过查阅资料和
实际操作,我了解到指令由操作码和操作数部分构成,操作码决定了指令的功能,操
作数则是指令的操作对象。

而不同的指令集体系结构有不同的指令编码方式,比如
x86指令集采用变长编码方式,ARM指令集则采用定长编码方式。

在实验中,我还学习了存储器的组成和工作原理。

存储器是计算机的重要组成部分,
用于存储程序和数据。

在实验中,我通过配置程序和数据的存储地址,了解了指令和
数据是如何通过存储器进行读写操作的。

同时,我还学习了存储器的层次结构,包括
寄存器、高速缓存、内存和外存等,了解了存储器的访问速度和容量随层次的变化。

此外,在实践中,我还学习了计算机的中断和异常处理。

中断是计算机在运行过程中
被外部事件打断的一种机制,异常则是计算机在执行指令过程中出现错误或特殊情况
时的处理机制。

通过配置中断和异常的处理程序,我了解了中断和异常的处理流程和
机制,以及如何编写中断和异常处理程序。

总的来说,微机原理的上机实践使我对计算机的硬件组成和工作原理有了更深入的了解。

通过对指令系统、存储器和中断等方面的学习和实践,我对计算机的工作流程和
原理有了更清晰的认识。

同时,上机实践也锻炼了我的实际操作能力,提高了我分析
和解决问题的能力。

微机原理期末总结

微机原理期末总结

微机原理期末总结微机原理是计算机科学与技术专业中的一门基础课程,它是计算机科学与技术专业学生进一步了解计算机的内部结构、原理和工作过程的基础。

本学期我学习了这门课程,通过学习,我对计算机的原理有了更深入的了解,也对计算机的运行过程和内部结构有了更为清晰的认识。

在本学期的学习中,我们主要学习了如下几个方面的内容:计算机的数制转换、运算器、存储器、控制器以及计算机的输入输出等。

以下是我对这些内容的总结和理解:首先,计算机的数制转换是计算机科学与技术专业学生必须掌握的基础知识。

在学习中,我们学习了二进制、八进制、十进制和十六进制之间的相互转换,掌握了不同进制数的表示方法和运算规则。

数制转换是计算机中数据表示的基础,深入理解数制转换对于我们后续学习计算机内部结构和工作原理非常重要。

其次,我们学习了运算器的原理和结构。

运算器是计算机中的重要组成部分,负责数学运算和逻辑运算。

通过学习,我们了解了运算器的各个部分的功能和工作原理,如算术逻辑单元(ALU)、寄存器等。

同时,我们也学习了运算器的运算规则、运算速度和运算精度等重要概念。

接下来,我们学习了存储器的原理和结构。

存储器是计算机中的重要组成部分,它负责存储程序和数据。

在学习中,我们了解了存储器的各个部分的功能和工作原理,如随机存储器(RAM)、只读存储器(ROM)等。

我们也学习了存储器的存取周期、存储容量和存储层次等重要概念,这对于提高存储器的工作效率和容量非常重要。

然后,我们学习了控制器的原理和结构。

控制器是计算机中的重要组成部分,它负责指挥和控制计算机的各个部件的工作。

在学习中,我们了解了控制器的工作原理,掌握了指令的执行过程和时序规则。

此外,我们还学习了控制器的寄存器、状态位和指令格式等重要概念,这对于理解和设计计算机的指令系统非常重要。

最后,我们学习了计算机的输入输出。

输入输出是计算机与外部世界交互的方式,它涉及到计算机接口的设计与实现。

在学习中,我们了解了输入输出设备的种类和特点,掌握了输入输出接口的工作原理和设计方法。

微机原理指令范文

微机原理指令范文

微机原理指令范文1.指令的定义和分类指令是计算机执行其中一种特定操作的命令。

在微机原理中,指令可以分为几类:数据传送指令、算术运算指令、逻辑运算指令、移位指令、控制转移指令和输入/输出指令。

2.数据传送指令数据传送指令用于将数据从一个地方传送到另一个地方。

常见的传送指令有:MOV(将数据从一个寄存器复制到另一个寄存器)、LDR(将数据从存储器加载到寄存器)、STR(将数据从寄存器存储到存储器)等。

3.算术运算指令算术运算指令用于执行加、减、乘、除等算术运算。

常见的算术运算指令有:ADD(将两个操作数相加)、SUB(将两个操作数相减)、MUL(将两个操作数相乘)、DIV(将两个操作数相除)等。

4.逻辑运算指令逻辑运算指令用于执行逻辑运算,如与、或、非等。

常见的逻辑运算指令有:AND(将两个操作数进行与运算)、OR(将两个操作数进行或运算)、NOT(将操作数取反)等。

5.移位指令移位指令用于将数据在寄存器中进行左移或右移操作。

常见的移位指令有:LSL(将操作数左移指定的位数)、LSR(将操作数右移指定的位数)等。

6.控制转移指令控制转移指令用于改变程序的执行顺序。

常见的控制转移指令有:JMP(无条件跳转到指定地址)、JZ(当零标志位为真时跳转到指定地址)、JC(当进位标志位为真时跳转到指定地址)等。

7.输入/输出指令输入/输出指令用于与外部设备进行数据交换。

常见的输入/输出指令有:IN(将外部设备的数据读取到寄存器中)、OUT(将寄存器中的数据输出到外部设备中)等。

每个指令都包含操作码和操作数两个部分。

操作码确定指令的操作类型,而操作数则指定了操作的数据。

指令由字节或字(16位)组成,具体的格式和编码方式可以根据不同的微机架构而有所不同。

在微机中,指令是由控制单元根据程序计数器的值读取的。

程序计数器用于存储下一条执行的指令的地址。

控制单元会将指令传递给执行单元进行执行,并根据指令的操作码和操作数执行相应的操作。

微机原理课程总结

微机原理课程总结

微机原理课程总结《微机原理课程总结》回想起来这微机原理课程,还真是一场惊心动魄的知识之旅呢。

刚开始接触的时候,真的感觉像是进入了一个完全陌生的世界,满眼都是新奇但又有点让人不知所措。

先说整体感受吧,这门课就像是一个装满各种零件的大盒子,一开始只看到这些零件散落在那,根本不知道怎么组装起来,甚至都不确定每个零件是干嘛用的。

但是随着课程的逐渐深入,就像把那些零件一个个开始归类,找它们之间的联系,慢慢发现原来这些看似独立的知识其实都是有逻辑关系的。

具体收获可不少呢。

从简单的微机硬件结构的认识开始,像CPU、内存、I/O接口这些基本组件。

我记得最开始记忆CPU的功能和组成的时候,那些寄存器啊,数据通路什么的真是让人头疼。

但是通过不断地画图、理解原理图,就像是把一个混乱的迷宫线路慢慢捋顺了。

还有汇编语言,这是个很神奇的东西,就像一套独特的密码系统。

我以为指令只要机械记忆就好,但实际编写程序时才发现,只有理解了微机底层的运行逻辑,才能正确地组合这些指令。

比如写一个简单的两数相加的程序,不仅要知道ADD指令怎么用,还得考虑数据在寄存器中的存储位置呢。

重要发现挺多的。

我发现微机原理中的很多概念都有一种层层嵌套的感觉。

比如说中断机制,原来它不仅仅是CPU去响应一个外部事件这么简单。

这里面还涉及到中断向量表、中断优先级之类的概念。

而且各个部分之间互相影响。

有一次在理解中断嵌套的时候,一开始怎么都想不明白为什么高优先级的中断能打断低优先级中断正在执行的程序,后来仔细分析了整个中断处理的流程才明白,这里面每个环节就像一个精密机械手表里的小齿轮,一个带动一个才能保证整个系统按照规则运行。

这让我深刻明白了学习微机原理不能一知半解,每个细节都有可能对全局产生影响。

等我理解了这些,现在想想,很多以前觉得突兀的知识点都能串联起来了。

说到反思,就是当初学习的时候有点太急于求成了。

总想着快速把知识背下来,而忽略了对实际原理的深入理解。

微机原理指令汇总

微机原理指令汇总

我现将指令系统中各种助记符的英文全名写出来,各种助记符的记忆就会变得很简单o(∩_∩)o...在这之前,先说一下寄存器:数据寄存器分为:AH&AL=AX(accumulator):累加寄存器,常用于运算;在乘除等指令中指定用来存放操作数,另外,所有的I/O指令都使用这一寄存器与外界设备传送数据.BH&BL=BX(base):基址寄存器,常用于地址索引;CH&CL=CX(count):计数寄存器,常用于计数;常用于保存计算值,如在移位指令,循环(loop)和串处理指令中用作隐含的计数器.DH&DL=DX(data):数据寄存器,常用于数据传递。

他们的特点是,这4个16位的寄存器可以分为高8位: AH, BH, CH, DH.以及低八位:AL,BL,CL,DL。

这2组8位寄存器可以分别寻址,并单独使用。

另一组是指针寄存器和变址寄存器,包括:SP(Stack Pointer):堆栈指针,与SS配合使用,可指向目前的堆栈位置;BP(Base Pointer):基址指针寄存器,可用作SS的一个相对基址位置;SI(Source Index):源变址寄存器可用来存放相对于DS段之源变址指针;DI(Destination Index):目的变址寄存器,可用来存放相对于ES 段之目的变址指针。

指令指针IP(Instruction Pointer)标志寄存器FR(Flag Register)OF(overflow flag)DF(direction flag)CF(carrier flag)PF(parity flag)AF(auxiliary flag)ZF(zero flag)SF(sign flag)IF(interrupt flag)TF(trap flag)(Segment Register)段寄存器.为了运用所有的内存空间,8086设定了四个段寄存器,专门用来保存段地址:CS(Code Segment):代码段寄存器;DS(Data Segment):数据段寄存器;堆栈段寄存器;(Stack Segment):SSES(Extra Segment):附加段寄存器。

微机原理指令总结

微机原理指令总结

1.内部数据传送指令:(1)以累加器A为目的操作数的指令功能:将源操作数指定的内容送入累加器A。

MOV A , Rn ; A ←(Rn)MOV A , direct ; A ←(direct)MOV A , @Ri ; A ←((Ri))MOV A , # data ; A ← data(2)以Rn为目的操作数的指令功能:将源操作数所指定的内容送入当前工作寄存器R0 ~R7中。

MOV Rn , A ; Rn ← (A)MOV Rn , direct ; Rn ←(direct)MOV Rn , # data ; Rn ← data(3)以直接地址为目的操作数的指令功能:将源操作数所指定的内容送入由直接地址指出的片内RAM单元。

MOV direct , A ; (direct)← (A)MOV direct , Rn ; (direct) ← (Rn)MOV direct , direct ; (direct) ← (direct)MOV direct , @Ri ; (direct) ←((Ri))MOV direct , # data ; (direct) ← data4)以间接地址为目的操作数的指令功能:将源操作数所指定的内容送入R0/R1所指向片内RAM的存储单元中。

MOV @Ri , A ; (Ri) ← (A)MOV @Ri , direct ; (Ri) ← (direct)MOV @Ri , # data ; (Ri) ← data(5)16位数据传送指令唯一的一条16位立即数传送指令。

功能:将16位二进制的立即数送入数据指针DPTR中。

其中高8位送入DPH,低8位送入DPL。

MOV DPTR , # data162.外部数据传送指令MOVX A,@RiMOVX A,@DPTRMOVX @Ri,AMOVX @DPTR,A3.堆栈操作指令压栈指令:将direct中的内容送入堆栈中PUSH direct ;SP←(SP)+1,(SP)←(direct)出栈指令:将堆栈中的内容送回到direct中POP direct ; (direct) ← (SP), SP←(SP)-14.查表指令MOVC A,@A+DPTR;A←((A)+(DPTR))MOVC A,@A+PC ;PC ← (PC)+1, A←((A)+(PC))5.交换指令XCH A,Rn ;(A)←→(Rn)XCH A,direct ;(A)←→(direct)XCH A,@Ri ;(A)←→((Ri))XCHD A,@Ri ;(A0~3)←→((Ri)0~3)SWAP A ;(A0~3)←→(A4~7)6.逻辑操作类指令:逻辑“与”指令ANL逻辑“或”指令ORL逻辑“异或”指令XRL累加器A的清零和取反CLR CPL7.控制转移类指令长转移指令LJMP 标号绝对转移指令AJMP 标号短(相对)转移指令SJMP 标号间接转移指令JMP @A+DPTR8.累加器A的移位指令循环左移RL A ;循环右移RR A ;带进位位循环左移RLC A ;带进位位循环右移RRC A9.条件转移指令累加器判零转移指令JZ 标号JNZ 标号比较不等转移指令CJNE A, #data, 标号CJNE A, direct, 标号CJNE Rn, #data,标号CJNE @Ri, #data,标号减1不为零(循环)转移指令DJNZ Rn,标号DJNZ direct, 标号。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

8086CPU 指令小结所有指令:(1)立即数不能作为目的操作数。

(2)不能在 2 个存储单元之间直接进行操作(串操作除外) 。

(3)MOV 指令和堆栈指令是惟一能对段寄存器进行操作的指令。

(4)源和目的操作数的数据类型必须匹配,都是8 位,或都是16 位。

(5)CS 、IP 不能直接作为操作数。

(6)指令中至少要有一项明确说明传送的是字节还是字,如果没有,可通过PTR 进行设置。

一、传送指令( 1)6 种指令:通用传送指令、堆栈操作指令、交换操作指令、I/O 操作指令、目的地址传送指令和标志传送指令。

(2)对标志位的影响:除标志传送( SAHF、POPF)外,均不影响标志位。

(3) --------------------------------------- 操作数表示方法:立即数 --- data,存储器单元地址mem,寄存器——reg,段寄存器——segreg。

1. 通用传送指令:完成数据传送(1)指令格式:MOV OPRD1 , OPRD2 ;[目的操作数OPRD1]—[源操作数OPRD2]( 2)源OPRD2 :data、mem、reg、segreg。

( 3)目的OPRD1 :mem、reg、segreg。

( 4)通用传送指令MOV 和堆栈指令是唯一允许以段寄存器(代码段寄存器CS 和指令指针IP 除外,即CS 、IP 不能作为直接操作数)作为操作数的指令,不允许通过MOV 指令直接以立即数方式给段寄存器赋值,不允许直接在两个段寄存器之间直接进行传送。

( 5) 8 位/16 位操作。

2. 堆栈操作指令:将数据压入/弹出堆栈(1)指令格式:入栈:PUSH OPRD ;先修改堆栈指针SP-2,然后将数据压入堆栈。

;SP =SP-1, [SP]=操作数高8 位;SP =SP-1, [SP]=操作数低8 位。

出栈:POP OPRD;先将数据弹出堆栈,然后修改堆栈指针SP+2。

;(操作数低8 位)—[SP], SP =SP+1;(操作数高8 位)—[SP] , SP =SP+1。

(2)操作数:mem、reg、segreg。

操作数不能是立即数data。

( 3)仅能进行字运算( 16 位操作)。

( 4)堆栈存取原则为后进先出,只有一个入/出口SS:SP,SP 始终指向栈顶,SP 是自动修改的,SP 在初始化中需要设置。

(5) PUSH、POP指令必须成对使用。

3. 交换操作指令:XCHG ——数据交换;XLAT ——完成一个字节的换码转换(1)指令格式:交换操作指令:XCHG OPRD1 , OPRD2 ; [OPRD1] ——[OPRD2]累加器换码指令(表转换指令、查表指令):XLAT ; (AL )—(( DS) X 16+ ( BX ) + (AL ))(2)XCHG :段寄存器和立即数不能作为一个操作数, 8位/16 位操作。

(3) XLAT :表首地址在BX 中, AL 的内容作为某一项到表首的偏移量( 256 字节的表的下标),转换后的结果存放在AL中。

4. I/O操作指令:累加器(AX/AL )与I/O端口之间的数据传送(1)指令格式:输入指令:IN AL/ AX , PORT; (AL/ AX )・[PORT]IN AL/ AX , DX ; (AL/ AX )・[DX] 输出指令:OUT PORT , AL/ AX ; [PORT]・(AL/ AX )OUT DX , AL/ AX ; [DX]・(AL/ AX )(2)当端口地址W 255时,使用PORT ( 8位端口直接地址);当端口地址》255时,必须用DX ( 16位端口直接地址)作桥梁。

DX作端口寻址最多可寻找64K个端口。

(3)PORT为直接寻址,8位/16位操作。

5. 目的地址传送指令(1)取有效地址指令:LEA OPRD1 , OPRD2或:LEA reg, [add] ; ( reg) —add, add 为有效地址把存储器的有效地址EA (源操作数的地址偏移量)送入一个寄存器reg;常用于将一个16位的通用寄存器作为地址指针。

传送的是有效地址EA。

(2)将双地址指针装入DS和另一个寄存器指令LDS指令:LDS OPRD1 , OPRD2或:LDS reg, [add] ; (reg) — (add+1) (add), (DS) — ( add+3) (add +2)(3)将双地址指针装入ES和另一个寄存器指令LES指令:LES OPRD1 , OPRD2或:LES reg, [add] ; (reg) — ( add+1) (add), (ES) — ( add+3) (add +2)①从源操作数指定的存储单元中取出4字节的地址指针(包括2字节的段地址和2字节的偏移量)传送到DS/ES和reg。

指定将段地址送入DS/ES,偏移量部分送入一个16位的指针寄存器或变址寄存器。

②源操作数mem,目的操作数必须是一个16位的通用寄存器。

③传送的是存储单元的内容,而不是存储器的有效地址EA。

6. 标志传送指令(1)读标志指令:LAHF ; (AH )— ( FR) o~7功能:将标志寄存器中的SF、ZF、AF、PF和CF (即低8位)传送至AH寄存器的指定位,空位没有定义。

(2)存标志指令:SAHF ; ( FR)7 —( AH )功能:将寄存器AH的指定位,送至标志寄存器的SF、ZF、AF、PF和CF位(即低8 位)。

根据AH的内容,影响上述标志位,对OF、DF、IF和TF无影响。

(3)标志入栈指令:PUSHF ;将FR 入栈。

(SP) —( SP)— 2 , (( SP) +1,(SP)) — ( FR) 功能:将标志寄存器FR压入堆栈顶部,同时修改堆栈指针,不影响标志位。

(4)标志弹出栈指令:POPF;将栈顶的内容弹出到FR中。

;(FR) — ( (SP) +1, (SP)), ( SP) — ( SP) + 2功能:堆栈顶部的一个字,传送到标志寄存器FR,同时修改堆栈指针,影响标志位。

二、算术运算指令(1)9种指令:加法指令、减法指令、增量〃减量指令、求补指令、比较指令、乘法指令、除法指令、字节字/转换为字扩展指令和十进制调整指令。

(2)对标志位的影响:①力口、减、比较指令(CMP )、取补指令(NEG)指令均影响6个标志位CF、OF、PF、SF、ZF 和AF。

②乘法指令影响CF和OF标志;除法指令所有标志位都不确定,无意义。

③增量/减量指令影响除进位标志CF以外的5个标志位AF、OF、PF、SF和ZF。

④字节字/转换为字扩展指令不影响标志位。

⑤加法的ASCII调整指令AAA,十进制调整指令DAA影响除溢出标志OF以外5 个标志:CF、PF、SF、ZF和AF ;OF没有意义。

⑥减法的ASCII调整指令AAS、十进制调整指令DAS影响2个标志:CF和AF ;其余标志没有意义。

⑦乘法的ASCII调整指令AAM 、除法的ASCII调整指令AAD根据AL寄存器的结果影响SF、ZF和PF。

1加法指令(Addition):完成加法操作。

(1)格式:ADD/ ADC OPRD1 , OPRD2 ; (OPRD1 )・(OPRD1) + ( OPRD2)(2)源:data、mem、reg;目的:reg, mem。

(3)ADC指令主要用于多字节运算中。

(4)8位/16位操作。

2.减法指令(Subtraction):完成减法操作。

(1)格式:SUB/ SBB OPRD1 , OPRD2 ; ( OPRD1)・( OPRD1)-( OPRD2)(2)规定同加法指令。

3•增量(加1 ) /减量(减1 )指令INC/ DEC :完成+1/-1操作。

(1)格式:INC/ DEC OPRD ; (OPRD)J( OPRD)±1(2)功能:主要用于在循环程序中修改地址指针和循环次数等。

(3)操作数:reg、mem。

4. 求补指令NEG :完成补码操作。

(1)格式:NEG OPRD(2)操作数:reg、:mem。

5•比较指令CMP :完成减法操作,结果不回送,反映在标志位上。

(1)格式:CMP OPRD1 , OPRD2 ; (OPRD1)-( OPRD2)(2)功能:主要用于比较两个数之间的关系。

在比较指令之后,根据标志即可判断两者之间的关系。

减法操作,结果不回送目的操作数。

(3)两数关系的判断标志①A=B用ZF=1判断;②两个无符号数的大小用CF判断。

CF=1 , A<B ; CF=0, A>B。

③两个符号数的大小用SF®OF判断。

SF®OF=1 , A<B ; SF ®OF=0 , A>B。

JG/JNLE (大于,SF®OF=0 且ZF=0 ) JL/JNGE (小于,SF ®OF=1 且ZF=0 )6.乘法指令MUL/IMUL :完成无符号乘法/带符号(整数)乘法操作。

(1)格式:MUL/IMUL OPRD ; 8 位:(AX) ・(AL )X( OPRD );16 位:(DX ) (AX ) —(AX )X( OPRD )(2)源操作数:reg、mem,由指令给出。

(3)目的操作数:默认在AL/AX中。

(4)带符号数乘法指令IMUL当结果的高半部分不是结果的低半部分的符号扩展时,标志位CF和OF将置位。

(6)可完成字节与字节乘法、字与字乘法操作。

7. 除法指令DIV/IDIV :完成无符号除法/带符号(整数)除法操作。

(1)格式:DIV/ IDIV OPRD ; 8 位:(AL)・(AX)/( OPRD )……(AH )(余数);16 位:(AX) —(DX) (AX)/( OPRD) ……(DX )(余数)(2)源/目的操作数规定同乘法指令。

(3)对于符号数,当被除数不够位数时,需要对高8/16位进行扩展符号扩展。

8. 字节字/转换为字扩展指令CBW/CWD :将AL/AX寄存器的最高位扩展到AH/DX 。

(1) 格式:CBW/CWD(2) 功能:将AL/AX 寄存器的最高位扩展到AH/DX , AL.7 ( AX.15 )=0,贝U AH ( DX ) =0; AL.7 (AX.15 ) = 1,贝U AH=0FFH ( DX=0FFFFH )。

9. 十进制调整指令(1)压缩BCD码:每个字节表示两位BCD数;非压缩BCD码:用一个字节表示一位BCD数,在这字节的高四位用0填充。

(2)每条十进制调整指令在使用时都与相应的算术运算指令配合,并自动对相应的算术运算指令结果进行相应的十进制调整。

(3)格式:①DAA :压缩的BCD码加法调整②DAS :压缩的BCD码减法调整③AAA :非压缩的BCD码加法调整④AAS :非压缩的BCD码减法调整⑤AAM :乘法后的BCD码调整⑥AAD :除法前的BCD码调整三、逻辑运算和移位指令1. 逻辑运算指令(1) 5种指令:逻辑与、或、非、异或和测试指令。

相关文档
最新文档