【微机原理与接口技术】指令系统 您所在的位置:网站首页 微机原理STD指令 【微机原理与接口技术】指令系统

【微机原理与接口技术】指令系统

2024-04-03 15:09| 来源: 网络整理| 查看: 265

目录 8086/8088内部寄存器的类型通用寄存器段寄存器控制寄存器 8086/8088内存单元的编址寻址方式立即寻址寄存器寻址直接寻址寄存器间接寻址寄存器相对寻址基址-变址寻址基址-变址-相对寻址隐含寻址 数据传送指令通用数据传送指令一般传送指令MOV堆栈操作指令PUSH/POP交换指令XCHG查表转换指令XLAT 输入输出指令IN/OUT取偏移地址指令LEA装入地址指针指令LDS和LES 算术运算指令加法运算指令普通加法指令ADD带进位位的加法指令ADC加一指令INC 减法运算指令不考虑借位的减法指令SUB考虑借位的减法指令SBB减一指令DECCMP指令 逻辑运算和移位指令逻辑运算指令逻辑与指令AND逻辑或指令OR逻辑非指令NOT逻辑异或指令XOR测试指令TEST 移位指令算术左移SHL和逻辑左移SAL逻辑右移指令SHR算术右移指令SAR不带CF的循环左移ROL和循环右移ROR带CF的循环左移RCL和循环右移RCR 串操作指令串传送串比较串扫描串装入串存储 程序控制指令无条件转移指令JMP段内直接转移段内间接转移段间直接转移段间间接转移 条件转移指令JCC循环控制指令LOOP指令LOOPZ(或LOOPE)指令LOOPNZ(或LOOPNE)指令 过程调用和返回段内直接调用段内间接调用段间直接调用段间间接调用返回指令 中断指令 处理器控制指令

8086/8088内部寄存器的类型

14个16位寄存器,按功能可分为三类:8个通用寄存器,4个段寄存器,2个控制寄存器。

通用寄存器

数据寄存器(AX,BX,CX,DX):8088/8086含4个16位数据寄存器,每一个又可拆分为2个8位寄存器。

AX:累加器。所有I/O指令都通过AX与接口传送信息,中间运算结果也多放于AX中。

BX:基址寄存器。在间接寻址中用于存放基地址。

CX:计数寄存器。用于在循环或串操作指令中存放计数值。

DX:数据寄存器。在间接寻址的I/O指令中存放I/O端口地址;在32位乘除法运算时,存放高16位数。

地址指针寄存器(SP,BP)

SP:堆栈指针寄存器,其内容为栈顶的偏移地址。

BP:基址指针寄存器,常用于在访问内存时存放内存单元的偏移地址。

BX和BP的区别:作为基址寄存器,用BX表示所寻找的数据在数据段,用BP则表示数据在堆栈段。

变址寄存器(SI,DI)

SI:源变址寄存器

DI:目的变址寄存器

变址寄存器在指令中常用于存放数据在内存中的地址。

段寄存器 CS:代码段寄存器,存放代码段的段基地址。DS:数据段寄存器,存放数据段的段基地址。ES:附加段寄存器,存放数据段的段基地址。SS:堆栈段寄存器,存放堆栈段的段基地址。 控制寄存器 IP: 指令指针寄存器FLAGS:标志寄存器 8086/8088内存单元的编址 内存单元的地址表示有物理地址和逻辑地址两种方式物理地址:指每个内存单元在整个内存空间中具有的惟一的地址。8086/8088CPU有20根地址线,它可以产生20位的地址码,寻址范围为220,即1兆字节空间。为了方便书写,在源程序中常用5位十六进制数或一个符号来表示一个存储单元的地址。任何两个相邻字节单元就构成一个字单元。字单元的地址为两个字节单元中较小地址字节单元的地址。字数据的存放规则是低8位放在较低地址字节单元,高8位放在较高地址字节单元。逻辑地址:每个存储单元的逻辑地址由两部分组成。16位的段(基)地址—决定该逻辑段在内存中的位置。16位的段内地址,也叫相对地址,或偏移地址—决定该存储单元相对段起始单元的距离。逻辑段的起始单元称为段首,段首的偏移地址=0。物理地址=段基地址×16+偏移地址 寻址方式 立即寻址 指令中的源操作数是立即数,即源操作数是参加操作的数据本身,立即寻址仅适合于源操作数例:MOV AX,1200Himage.png 寄存器寻址 参加操作的操作数在CPU的通用寄存器中。例:MOV AX,BX执行时不必访问内存就可取得操作数,执行速度较快。 直接寻址 指令中直接给出操作数的偏移地址,默认在数据段,可以允许段重设。注意:存储器操作数的长度由指令中另一个操作数的长度决定。操作数的段地址默认为数据段,但允许段重设,即由指令定义段,说明数据存放在其他逻辑段中。例:MOV AX,ES:[1200H],这种情况称为段超越,所加的段寄存器叫段前缀。 寄存器间接寻址 寄存器的内容表示操作数的偏移地址,此时寄存器中的内容不再是操作数本身,而是存放数据的偏移地址,操作数本身在内存中。存放偏移地址的寄存器称为间址寄存器,它们可以是:BX,BP,SI,DI,操作数的段地址(数据处于哪个段)取决于选择哪一个间址寄存器:BX,SI,DI默认在数据段DS,BP默认在堆栈段SS。偏移地址长度均为16位,故间址寄存器必须是16位寄存器。例:MOV BX,1200H,MOV AX,[BX]image.png 寄存器相对寻址 操作数的偏移地址为寄存器的内容加上一个位移量(常量)可以使用的寄存器为:BX、BP、SI和DI 基址-变址寻址 操作数的偏移地址为:一个基址寄存器的内容 + 一个变址寄存器的内容操作数的段地址由选择的基址寄存器决定:基址寄存器为BX,默认在数据段基址寄存器为BP,默认在堆栈段 基址-变址-相对寻址

指定一个基址寄存器和一个变址寄存器。同时给出一个8位或16位的位移量

隐含寻址

指令中隐含了一个或两个操作数的地址,即操作数在默认的地址中。

数据传送指令 通用数据传送指令 一般传送指令MOV 格式:MOV dest,src两操作数长度必须相同存储单元之间不能直接传送段寄存器CS只能作源操作数,段寄存器之间不能直接传送在源操作数是立即数时,目标操作数不能是段寄存器 堆栈操作指令PUSH/POP 存取以字为单位,堆栈操作指令的操作数必为16位操作数不能是立即数;可以是16位寄存器或存储器1个字单元;若为存储器操作数,需要声明操作数的字长。压栈指令PUSH,指令执行过程:SP - 2 → SP,操作数高字节 → (SP+1),操作数低字节 → (SP)出栈指令POP,指令执行过程:(SP)操作数低字节弹出,(SP+1)操作数高字节弹出 ,SP ← SP+2 交换指令XCHG 格式:XCHG OPRD1,OPRD2,将源地址和目标地址中的内容进行互换两操作数必须有一个是寄存器操作数,不允许使用段寄存器。 查表转换指令XLAT 格式:XLAT指令为零操作数指令,采用隐含寻址,隐含的操作数为BX和AL。用BX的内容代表表格首地址,AL内容为表内位移量, BX+AL得到要查找元素的偏移地址。 输入输出指令IN/OUT

指令功能:专门面向I/O端口操作的指令

指令格式

输入指令:IN acc,PORT

输出指令:OUT PORT,acc,PORT为端口地址,acc为累加器AL或AX

直接寻址:端口地址为8位时,指令中直接给出8位端口地址;可寻址256个端口。

间接寻址:端口地址为16位时,指令中的端口地址必须由DX指定;可寻址64K个端口。

取偏移地址指令LEA 指令格式:LEA REG,MEM操作:将变量的16位偏移地址取出送目标寄存器,当程序中用符号地址表示内存偏移地址时,须使用该指令。源操作数必须是一个存储器操作数,目标操作数必须是16位通用寄存器,通常是间址寄存器。 装入地址指针指令LDS和LES 格式:LDS DEST,SRC; LES DEST,SRC把SRC存储单元开始的4个字节单元的内容送入DEST通用寄存器和段寄存器DS(LDS指令)或ES(LES指令)。DEST十六位通用寄存器,SRC必须是一个存储器操作数。 算术运算指令 加法运算指令 普通加法指令ADD 格式:ADD OPRD1 OPRD2操作:OPRD1+OPRD2 →OPRD1ADD指令的执行对全部6个状态标志位都产生影响不允许两个操作数都是存储器操作数,不允许把段寄存器作为操作数 带进位位的加法指令ADC 指令格式、对操作数的要求、对标志位的影响与ADD指令完全一样,只是CF也要参加求和运算操作:OPRD1+OPRD2+CF→OPRD1,注意:CF是该指令执行前的值ADC指令常用于多字节数相加,使用前要先将CF清零。 加一指令INC 格式:INC OPRD操作:OPRD+1 → OPRD,注意:INC指令执行不影响CF标志不能是段寄存器或立即数 减法运算指令

减法指令对操作数的要求与对应的加法指令相同

不考虑借位的减法指令SUB 格式:SUB OPRD1,OPRD2操作:OPRD1-OPRD2 →OPRD1 考虑借位的减法指令SBB 指令格式、对操作数的要求、对标志位的影响与SUB指令完全一样,只是CF也要参加求和运算操作:OPRD1-OPRD2-CF→OPRD1,注意:CF是该指令执行前的值 减一指令DEC 格式:DEC OPRD操作:OPRD-1 → OPRD,注意:DEC指令执行不影响CF标志 CMP指令 格式:CMP OPRD1,OPRD2操作:OPRD1- OPRD2指令执行的结果不影响目标操作数,仅影响标志位!用于比较两个数的大小,可作为条件转移指令转移的条件指令对操作数的要求及对标志位的影响与SUB指令相同。两个无符号数的比较:两个数的大小由CF或ZF来判断,CMP AX,BX,若AX>BX,CF=0;AX BX; OF和SF状态不同,AX < BX 逻辑运算和移位指令 逻辑运算指令对操作数的要求大多与MOV指令相同。“非”运算指令要求操作数不能是立即数除“非”运算指令外,其余指令的执行都会使标志位OF=CF=0,AF不变,并对SF,PF和ZF有影响 逻辑运算指令 逻辑与指令AND 格式:AND OPRD1,OPRD2操作:两操作数按位相“与”,结果送目标地址。应用:实现两操作数按位相与的运算;使目标操作数的某些位不变,某些位清零;在操作数不变的情况下使CF和OF清零 逻辑或指令OR 格式:OR OPRD1,OPRD2操作:两操作数按位相“或”,结果送目标地址。应用:实现两操作数按位相或的运算;使目标操作数的某些位不变,某些位变1;在操作数不变的情况下使CF和OF清零 逻辑非指令NOT 格式:NOT OPRD操作:操作数按位取反再送回原地址指令中的操作数不能是立即数,指令的执行对标志位无影响 逻辑异或指令XOR 格式:XOR OPRD1,OPRD2操作:两操作数按位相“异或”,结果送目标地址。 测试指令TEST 格式:TEST OPRD1,OPRD2操作:执行“与”运算,运算的结果影响标志位,但不送回目标地址。常用于测试某些位的状态 移位指令 算术左移SHL和逻辑左移SAL 格式:SHL OPRD,CL或SHL OPRD,1;SAL同操作:将目的操作数左移一位或CL指定的位,每左移一位,左边的最高位移入标志位,右边的最低位补0指令系统中它们是同一条指令,正负数算术左移与逻辑左移结果一样 逻辑右移指令SHR

每右移一位,右边的最低位移入标志位CF,而在左边的最高位补0

算术右移指令SAR

和SHR的区别是,最高位不是补0,而是保持不变

不带CF的循环左移ROL和循环右移ROR

ROL指令:最高位移入CF,同时移入最低位构成循环

ROR指令:最低位移入CF,同时移入最高位构成循环

带CF的循环左移RCL和循环右移RCR

RCL指令:最高位移入CF,而CF原来的值移入最低位

RCR指令:最低位移入CF,而CF原来的值移入最高位

串操作指令

源串地址由DS:[SI]提供,目的串由ES:[DI]提供。

每次只处理串中的一个单元(字或字节),并自动修改SI和(或)DI,使其指向下一个单元。

地址修改方向由DF标志位决定:DF=0为增地址方向, DF=1为减地址方向。

指令前面可加上自动重复前缀,实现自动重复执行串操作,重复执行次数由CX指定。

REP:CX不等于0重复

REPE/REPZ:CX不等于0且ZF等于1重复

REPNE/REPNZ:CX不等于0且ZF等于0重复

串传送

MOVS OPRD1,OPRD2

MOVSB

MOVSW

串比较

CMPS OPRD1,OPRD2

CMPSB

CMPSW

串扫描

SCAS OPRD

SCASBS

CASW

执行AX(或AL)-OPRD,结果不保存,只影响标志寄存器。

串装入

LODS OPRD

LODSB

LODSW

对字节: AL[ES:DI]

程序控制指令 无条件转移指令JMP 段内直接转移 格式:JMP Label说明:转移的目标地址由指令直接给出,如:常数、标号 段内间接转移 格式:JMP OPRD说明:转移的目标地址存放在某个16位通用寄存器或存储器的某字单元中JMP WORD PTR[BX],在上述指令中,若操作数OPRD是存储器,则要加上类型指示符WORD PTR已说明后面的存储器操作是一个字 段间直接转移 格式:JMP FAR LABLE转移的目标地址由指令直接给出 段间间接转移 格式:JMP OPRD转移的目标地址由指令中的32位存储器单元给出 条件转移指令JCC 指令名称汇编格式转移条件功能说明进位转移JC target(CF)=1有进位或借位无进位转移JNC target(CF)=0无进位或借位等于或为零转移JE/JZ target(ZF)=1相等或结果为 0不等于或为零转移JNE/JNZ target(ZF)=0不相等或结果为 0奇偶校验为偶转移JP/JPE target(PF)=1有偶数个 1奇偶校验为奇转移JP/JPO target(PF)=0有奇数个 1结果为负转移JS target(SF)=1为负数结果为正转移JNS target(SF)=0为正数溢出转移JO target(OF)=1溢出不溢出转移JNO target(OF)=0不溢出大于则转移JA/JNBE target(CF)=0 且(ZF)=0无符号数大于或等于则转移JB/JNAE target(CF)=0无符号数小于则转移JB/JNAE target(CF)=1无符号数小于或等于则转移JAE/JNB target(CF)=1 或(ZF)=1无符号数CX内容为0转移JCXZ target(CX)=0大于则转移JG/JNLE target(SF)=(OF)且(ZF)=0带符号数大于或等于则转移JGE/JNL target(SF)=(OF)带符号数小于则转移JL/JNGE target(SF)≠(OF)且(ZF)=0带符号数小于或等于则转移JLE/JNG target(SF)≠(OF)或(ZF)=1带符号数 循环控制指令 LOOP指令 格式:LOOP LABLE循环条件:CX≠ 0操作:DEC CX,CX-1→CX,JNZ LABEL(符号地址 ),CX ≠ 0则转LABEL,否则执行下条指令 LOOPZ(或LOOPE)指令

格式同上,执行是先使CX内容减1,再根据CX中的以及ZF的值来决定是否继续循环,继续循环的条件是CX≠0且ZF=1,若CX=0或者ZF=0则退出循环。

LOOPNZ(或LOOPNE)指令

继续循环的条件是CX≠0且ZF=0,否则退出循环。

过程调用和返回 段内直接调用 格式: CALL NEAR PROC指令中的NEAR可以省略 段内间接调用 格式:CALL OPRDOPRD是16位寄存器或两个存储器单元的内容,内容代表的是一个近过程的入口地址,例如:CALL WORD PTR[SI] 段间直接调用 格式:CALL FAR PROC例:CALL FAR TIMER 段间间接调用 格式:CALL OPRDOPRD为32位的存储器地址例:CALL DWORD PTR[SI] 返回指令 格式:RET功能:从堆栈中弹出断点地址,返回原程序RET指令一般位于子程序的最后,返回指令在格式上不区分段内或段间(即1WORD或2WORD)。 中断指令 格式: INT nn为中断向量码,是一个常数,取值0-255说明: n×4存放“中断服务子程序入口地址”的存储单元的偏移地址 处理器控制指令

CLC:CF



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有