微机原理与接口技术-中断向量和中断向量地址的区别?

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,1200H寄存器寻址参加操作的操作数在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]寄存器相对寻址操作数的偏移地址为寄存器的内容加上一个位移量(常量)可以使用的寄存器为: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,CF=1;AX=BX,ZF=1两个带符号数的比较:两个数的大小由OF和SF共同决定,OF和SF状态相同,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和循环右移RORROL指令:最高位移入CF,同时移入最低位构成循环ROR指令:最低位移入CF,同时移入最高位构成循环带CF的循环左移RCL和循环右移RCRRCL指令:最高位移入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,OPRD2MOVSBMOVSW串比较CMPS OPRD1,OPRD2CMPSBCMPSW串扫描SCAS OPRDSCASBSCASW执行AX(或AL)-OPRD,结果不保存,只影响标志寄存器。串装入LODS OPRDLODSBLODSW对字节: AL<-[DS:SI]对字: AX<-[DS:SI]串存储STOS OPRDSTOSBSTOSW对字节: AL->[ES:DI]对字: AX->[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<-0STC:CF<-1CLD:DF<-0STD:DF<-1CLI:IF<-0STI:IF<-1HLT:暂停指令

我要回帖

更多关于 中断向量和中断向量地址的区别 的文章

 

随机推荐