微机原理2.3课件_第1页
微机原理2.3课件_第2页
微机原理2.3课件_第3页
微机原理2.3课件_第4页
微机原理2.3课件_第5页
已阅读5页,还剩119页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

PrincipleofMicrocomputer

微机原理YSU第二章微处理器指令系统小练习1、对错判断

MOVCS,AXMOVAX,IP

MOVDS,ESMOVDS,2000H

2、将字节变量WV2的内容复制给字节变量WV1?

MOVWV1,WV2可以吗?3、堆栈操作顺序?PUSHSP先____,再____数据POP先____数据,SP再____4、寻址方式

MOVAX,4567H

MOVAX,[4567H]

MOVAX,[BX]

MOVAX,[BX+4567H]

MOVAX,SI

MOVAX,[BX+SI]堆栈堆栈(Stack)

内存中开辟的用于暂时存放数据的一个特殊区域。

按先进后出(FILO)或后进先出(LIFO)的原则管理。

堆栈段的段地址存放于段寄存器SS中,

偏移地址存放于寄存器SP中。BP用于寻址,可用存储器寻址方式随机存取堆栈中数据如MOVDX,[BP+4];SS:[BP+4]传送给DX堆栈操作指令示例MOVAX,1234H

MOVBX,5678H

PUSHAX

PUSHBX

POPCX

POPDX入栈操作示意向下生长栈顶地址<=栈底地址出栈操作示意堆栈操作注意事项堆栈操作均为16位(字)操作;

不能将立即数压入堆栈;

进栈和出栈的操作伴随着堆栈指针SP的调整,SS:SP永远指向堆栈段的栈顶。

堆栈只有一个出口。堆栈段向下生长,栈底在高地址,堆栈是从高地址向低地址延伸的。堆栈指令练习顺序执行PUSHAX;将AX内容推入栈顶POPBX;将当前栈顶内容弹给BX其功能等同于MOVBX,AX标志操作指令(1)CLC;CF=0

;ClearCarry(进位)FlagSTC;CF=1

;SetCarryFlagCMC;CF取反

;ComplementCarryFlag标志操作指令(3)PUSHF;SP=SP-2,SS:SP=FLAGS

POPF;FLAGS=SS:SP,SP=SP+2地址传送指令

LEA指令(LoadEffectiveAddress)LEAr16,mem;r16=mem的偏移地址

LEABX,[SI+06H];若SI=1000H,则BX=1006HLEASI,[DX];错误,操作数的偏移地址存放于

寄存器BX/BP/SI/DI中LEA指令示例WVARDW1234H;设其偏移地址为0001H

MOVBX,WVAR;BX=1234H

LEASI,WVAR;SI=0001H

MOVDX,[SI];DX=1234HDS=1000H,SI=0010H,[10010H]=2000HLEABX,[SI];BX=0010H

MOVBX,[SI];BX=2000H加减法指令ADDdest,src;dest=dest+src

SUBdest,src;dest=dest-src

ADD加法指令(Addition)ADDreg,imm/reg/mem

ADDmem,imm/reg

目的操作数不能为立即数。

两操作数不能同时为存储器操作数。

两操作数类型要一致。

按定义影响6个状态标志位。ADDAX,[BX]

;寄存器间接寻址对状态标志位影响情况的说明不影响;如:MOV指令。

按定义影响;如:ADD指令。

强制(规定)影响;如:CLC指令。

无定义(随机影响);如:MUL指令。加减法指令示例MOVAL,57H

;01010111B87DADDAL,4FH;01001111B

79D

;AL=0A6H

10100110B

166D;CF=0,无进位,OF=1,变号MOVAL,62H

;01100010B98DSUBAL,0A6H;10100110B

166D;AL=0BCH

10111100B

-68D;CF=1,有借位,SF=1,符号标志为1ADC指令(AddwithCarry)ADCreg,imm/reg/mem

ADCmem,imm/reg

目的操作数不能为立即数。

两操作数不能同时为存储器操作数。

两操作数类型要一致。

按定义影响6个状态标志位。ADCDX,BX

;

DX=DX+BX+以前的CFSBB指令(SubtractwithBorrow)SBBreg,imm/reg/mem

SBBmem,imm/reg

目的操作数不能为立即数。

两操作数不能同时为存储器操作数。

两操作数类型要一致。

按定义影响6个状态标志位。SBBBX,‘+’+’-’

;ASCII码4BH+4DHSBB指令的应用SBB指令用于与SUB指令结合实现多精度数的减法。

先将两个操作数的低16位相减(用SUB指令)。

再减高位部分、并减去借位(用SBB指令)。带进/借位加减法指令示例XDD12345678H

YDD9ABCDEF0H

MOVAX,WORDPTRX;改变类型

ADDAX,WORDPTRY;5678+DEF0

13568H

MOVDX,WORDPTRX+2;DX双字的高16位

ADCDX,WORDPTRY+2;DX=1234+9ABC+CF(AX)

ACF1HCMP比较指令(Compare)CMPdest,src;dest-src

按定义影响6个状态标志位。

CMP指令通过减法运算影响状态标志位,

常用于比较两个操作数的大小关系。

CMP指令执行前后两操作数内容均不变。

CMPAX,CL

;错误,操作数类型不匹配

CMPAX,200

;立即数寻址INC增量指令(Increment)INCreg/mem;reg/mem=reg/mem+1

常用于计数器和地址指针的调整。

不影响CF标志,但影响其它状态标志位。MOVAL,FFH;11111111BINCAL

;AL=(00H),CF=(0),ZF=(1)DEC减量指令(Decrement)DECreg/mem;reg/mem=reg/mem-1

常用于计数器和地址指针的调整。

不影响CF标志,但影响其它状态标志位。NEG指令(Negate)NEGreg/mem;reg/mem=0-reg/mem

按定义影响6个状态标志位。

当操作数为-128或-32768时,操作数不变,但OF置1。

通常总是使CF=1,除非操作数为0。MUL无符号乘法指令(Multiplication)MULr8/m8;AX=AL×r8/m8

MULr16/m16;DX.AX=AX×r16/m16

乘法指令隐含使用一个操作数AX和DX,源操作数则显式给出。若是字节量相乘,如MULBL,乘积存放在AX。IMUL有符号乘法指令(IntegerMultiply)IMULr8/m8;AX=AL×r8/m8

IMULr16/m16;DX.AX=AX×r16/m16乘法指令对标志位的影响乘法指令只影响OF和CF,对其它状态标志无定义。

对于无符号乘法,若乘积中AH=00H(8位乘法)或DX=0000H(16位乘法),OF=CF=0;否则均为1。

对于有符号乘法,若乘积的高一半是低一半的符号扩展,则OF=CF=0;否则均为1,高一半含有有效数字。DIV无符号除法指令(Division)DIVr8/m8

;AL=AX÷src的商

;AH=AX÷src的余

DIVr16/m16;AX=DX.AX÷src的商

DX=DX.AX÷src的余DIV20H

;错误,立即数不能直接操作IDIV有符号除法指令(IntegerDivision)IDIVr8/m8

;AL=AX÷src的商

;AH=AX÷src的余

IDIVr16/m16;AX=DX.AX÷src的商

;DX=DX.AX÷src的余将AL中的有符号数除以CL中的有符号数CBW;字节转换为字,AL符号扩展成AXIDIVCL;AL=AX÷CL的商MOVBL,AH;AH=AX÷CL的余,保存至BL除法指令对标志位的影响除法指令对6个状态标志位均无定义。

但当除数为0或商溢出时将产生编号为0的内部中断,指示除法错误。DIV溢出:字节除时商超过8位,或字除时商超过16位;IDIV溢出:字节除时商不在-128~127范围内,或字除时商不在-32768~32767范围内。乘除法指令练习计算(X×Y+125)÷Z。设X、Y、Z均为16位有符号的字变量,计算后将商存入X,余数存入Y。乘除法指令练习答案MOVAX,X

IMULY

ADDAX,125

ADCDX,0

IDIVZ

MOVX,AX

MOVY,DX注意:乘除法指令均不能使用立即数操作数。

;AX=X

;DX.AX←AX*Y

;AX=AX+125

;DX=DX+0+CF(AX)

;AX←DX.AX/Z的商,DX←DX.AX/Z的余数;X=AX

;Y=DX符号扩展指令

CBW指令(ConvertBytetoWord)CBW;AL符号扩展成AX,大小不变若AL的最高有效位是0,则AH=00H;

若AL的最高有效位是1,则AH=FFH;MOVAL,88H;AL=10001000BCBW;AX=FF88HCWD指令(ConvertWordtoDword)CWD;AX符号扩展成DX.AX,大小不变

若AX的最高有效位是0,则DX=0000H;

若AX的最高有效位是1,则DX=FFFFH;CWD;隐含使用累加器AX逻辑运算指令ANDdest,src;dest=dest“与”srcORdest,src;dest=dest“或”srcXORdest,src;dest=dest“异或”srcTESTdest,src;dest“与”srcNOTreg/mem;reg/mem=reg/mem的“非”

TEST指令对两个操作数执行按位的逻辑与运算,但结果不回到目的操作数,只根据结果来设置状态标志。

TESTAX,0

;AX的各位保持不变,不能实现AX清零逻辑运算指令注意事项目的操作数不能为立即数。

两操作数不能同时为存储器操作数。

两操作数类型要一致。

ANDAX,CL

错误

双操作数逻辑运算指令均置OF=CF=0。

按定义影响SF、ZF和PF,对AF无定义。

NOT指令不影响状态标志位。MOVAL,00HNOTAL;AL=(FFH),CF=(0)逻辑“与”运算特点0011

0

1

0

10001和0相“与”,结果为0

;和1相“与”,结果不变。逻辑“或”运算特点0011

0

1

0

10111和1相“或”,结果为1

;和0相“或”,结果不变。逻辑“异或”运算特点0011

0

1

0

10110和1“异或”,结果取反;和0“异或”,结果不变。逻辑运算指令练习使AL最高位为“1”,其他位不变。使AX清0,同时清CF为0。使AL中的D7~D4位不变,D3~D0位取反。将AL存放的0~9中的一个数变成对应的ASCII码。将AL中的ASCII码小写字母变成对应的大写字母。将AL中的ASCII码大写字母变成对应的小写字母。使AL的低4位不变,高4位清零。逻辑运算指令练习答案ORAL,80H;使AL最高位为“1”,其他位不变。XORAX,AX;使AX清0,同时清CF为0。XORAL,0FH;D7~D4位不变,D3~D0位取反。ORAL,30H;0~9中的数变成对应ASCII码(或+30H)。ANDAL,5FH;ASCII码小写变成大写(或-20H)。ORAL,20H;ASCII码大写变成小写(或+20H

ADDAL,20H)。ANDAL,0FH

;D7~D4位清零,D3~D0位不变。;使AX清0XORAX,AXMOVAX,0SUBAX,AXSHL逻辑左移位(ShiftLogicLeft)SHLreg/mem,1/CL;reg/mem左移1/CL位

最低位LowestSignificantBit补0,最高位MostSignificantBit进入CF

MOVAL,97H;10010111B;SHLAL,1;AL=2EH(00101110B),CF=1

SHLAX,CL;将AX中的数据逻辑左移CL位SHR逻辑右移位(ShiftLogicRight)SHRreg/mem,1/CL;reg/mem右移1/CL位

最高位MSB补0,最低位LSB进入CF

MOVAL,0B;SHRAL,1;AL=01011111B,CF=0

SAL算术左移位(ShiftArithmeticLeft)SALreg/mem,1/CL;reg/mem左移1/CL位

和SHL相同MOVAL,10111110B;SALAL,1;AL=01111100B,CF=1

SAR算术右移位(ShiftArithmeticRight)SARreg/mem,1/CL;reg/mem右移1/CL位

最高位MSB不变,最低位LSB进入CF

MOVAL,10111110B;SARAL,1;AL=11011111B,CF=0

逻辑/算术移位指令对标志位的影响按照移入的位设置CF;

按定义影响SF、ZF、PF(最低字节);对AF无定义。

移位次数为1,若移位前后操作数最高位不同,OF=1;否则OF=0。移位次数大于1,OF无定义。ROL循环左移位(RotateLeft)ROLreg/mem,1/CL;循环左移1/CL位

不带进位

MOVAL,10111110B;ROLAL,1;AL=01111101B,CF=1

ROR循环右移位(RotateRight)RORreg/mem,1/CL;循环右移1/CL位

不带进位

MOVAL,0B;RORAL,1;AL=01011111B,CF=0

RCL指令(RotatethroughCFLeft)RCLreg/mem,1/CL;带进位循环左移

MOVAL,010111110B;假设CF=0RCLAL,1;AL=01111100B,CF=1

RCR指令(RotatethroughCFRight)RCRreg/mem,1/CL;带进位循环右移

MOVAL,10B;假设CF=1RCRAL,1;AL=11011111B,CF=0

循环移位指令对标志位的影响按照移入的位设置CF;

不影响SF、ZF、PF、AF。

移位次数为1,若移位前后操作数最高位不同,OF=1;否则OF=0。移位次数大于1,OF无定义。移位指令练习用移位指令将AL中的无符号数乘10,结果存入AX中。

将ASCII码转换成BCD码。

ASCIIDB33H,38H

BCDDB?用移位指令实现乘法SHL逻辑左移一位相当于无符号数乘以2SHR逻辑右移一位相当于无符号数除以2

XORAH,AH;AH清0,CF=0

SHLAX,1;AX=AL*2

MOVBX,AX;BX=AL*2

SHLAX,1;AX=AL*4

SHLAX,1;AX=AL*8

ADDAX,BX;AX=AL*10ASCII码转换成BCD码ASCIIDB33H,38HBCDDB?

MOVAL,ASCII;AL=33HANDAL,0FH;AL=03HMOVAH,ASCII+1;AH=38HMOVCL,4SHLAH,CL;AH=80HORAL,AH;AL=83HMOVBCD,ALAND指令可用于复位某些位(同0相与),不影响其他位OR指令可用于置位某些位(同1相或),不影响其他位XOR指令可用于求反某些位(同1相异或),不影响其他位逻辑指令SHL/SALSHRSARROLRCLRORRCR移位指令控制转移类指令程序代码在代码段中,由CS:IP确定地址。程序顺序执行,微处理器自动增量IP。

控制转移类指令:改变IP,有些也改变CS,

即改变程序执行顺序,实现程序控制转移的指令。转移范围段内转移

在当前代码段64K范围内的程序转移,

不需更改CS,只要改变IP。

段间转移

从当前代码段转移到另一代码段,

需要更改CS和IP。段内转移近转移(Near)

转移范围为±32KB

短转移(Short)

转移范围为+127~-128字节段间转移远转移(Far)

转移范围为1MB目标地址寻址方式相对寻址方式

直接寻址方式

间接寻址方式相对寻址方式相对寻址方式

提供目标地址相对于当前指令指针IP的位移量。

目标地址(转移后的IP)=当前IP+位移量。

相对寻址都是段内转移。直接寻址方式直接寻址方式

直接提供目标地址。

目标地址(转移后的CS和IP)=指令操作数。间接寻址方式间接寻址方式

目标地址来自寄存器或存储单元,间接获得。

寄存器间接寻址:用寄存器保存目标地址。

存储器间接寻址:用存储单元保存目标地址。JMP无条件转移指令(Jump)JMPLABEL

例如

NEXT:MOVAX,BX

•••••

JMPNEXT语句标号LABELLABEL是用户自定义的标识符,

其作用是用来指代某条指令的地址。

LABEL的语法特征是其后一定有冒号。段内JMPJMPLABEL;相对或直接IP←IP+位移量

JMPr16/m16;间接IP←r16/m16段间JMPJMPFARPTRLABEL;直接

IP←偏移地址,CS←段地址JMPFARPTRmem

;间接,双字存储单元

IP←[mem],CS←[mem+2]低字高字条件转移指令Jcc根据指定的条件来确定程序是否发生转移

JccLABEL;条件满足,发生转移

IP←IP+8位位移量

;否则,顺序执行下一条指令

LABEL表示目标地址,采用段内相对短转移转移条件Conditioncc表示利用标志判断的条件,共16种,分两类

单个标志状态作为条件(TEST逻辑测试指令)两数大小关系作为条件(CMP减法比较大小指令)转移条件cc:单个标志状态(1)JZ/JEZF=1Zero/EqualJNZ/JNEZF=0NotZero/NotEqualJSSF=1SignJNSSF=0NotSignJP/JPEPF=1Parity/ParityEvenJNP/JPOPF=0NotParity/ParityOdd转移条件cc:单个标志状态(2)JOOF=1OverflowJNOOF=0NotOverflowJCCF=1CarryJNCCF=0NotCarry转移条件cc:无符号数大小关系JB/JNAECF=1Below/NotAboveorEqualJNB/JAECF=0NotBelow/AboveorEqualJBE/JNACF=1或ZF=1BeloworEqual/NotAboveJNBE/JACF=0且ZF=0NotBeloworEqual/Above转移条件cc:有符号数大小关系JL/JNGESF≠OFLess/NotGreaterorEqualJNL/JGESF=OFNotLess/GreaterorEqualJLE/JNGSF≠OF或ZF=1LessorEqual/NotGreaterJNLE/JGSF=OF且ZF=0NotLessorEqual/Greater单分支结构Jcc条件满足?分支语句体YN将有符号数转换为绝对值

CMPAL,0

JGE

NEXT

;为正数或0,转移到NEXT

NEG

AL;为负数,转换为绝对值NEXT:……双分支结构1Jcc条件满足?分支语句体1YN分支语句体2双分支结构2Jcc条件满足?分支语句体1YN分支语句体2JMP转移类指令练习通过判断符号实现CBW指令的功能。

通过判断正负实现CBW指令的功能。

取三个无符号字变量的最小值到AX。实现CBW指令功能的程序-1

MOV

AL,

BVAR;取出要判断的数据

TESTAL,

80H

;测试最高位

JZNEXT

;最高位为0,转移到NEXT

MOV

AH,

0FFH;最高位为1,设置AH=FFH

JMP

DONE

;无条件跳过另一个分支NEXT: MOV

AH,

0;最高位为0转移到此DONE:……实现CBW指令功能的程序-2

MOVAL,BVAR;取出要判断的数据

CMPAL,0

;与0比较

JNSNEXT

;最高位为0,转移到NEXT

MOVAH,0FFH;最高位为1,设置AH=FFH

JMPDONE

;无条件跳过另一个分支NEXT:MOVAH,0

;最高位为0转移到此DONE:……取三个无符号字变量的最小值到AX

MOVAX,V1

;假定V1最小

CMPAX,V2

;与V2比较

JBENEXT;V1<V2,转移到NEXT

MOVAX,V2

;V2<V1NEXT:CMPAX,V3

JBEDONE

;AX(V1或V2)最小

MOVAX,V3

;V3最小DONE:……循环指令LOOPLOOPLABEL;CX=CX-1,若CX≠0,转移

LOOP指令是针对CX计数器的计数循环指令

指令中的LABEL只能采用相对短转移寻址方式,

转移范围为段内(-128)~(+127)个字节。其他循环类指令LOOPELABEL;CX=CX-1,若CX≠0且ZF=1,转移

LOOPNELABEL;CX=CX-1,若CX≠0且ZF=0,转移

JCXZLABEL;若CX=0,转移;否则,顺序执行循环指令练习已知字节数组ARRAY,将其各元素之和存入变量SUM中(不考虑进位和溢出)。

ARRAYDB12H,34H,56H,78H

SUMDB?用循环指令实现字节数组求和 MOV

CX,4 JCXZDONE

;CX=0,0个元素,不再求和 XOR

AX,AX

;求和初值为0 MOV

BX,AX

;数组指针为0AGAIN:ADD

AL,ARRAY[BX]

;求和INC

BXLOOPAGAIN

;CX←CX-1,若CX=0,跳出循环DONE: MOV

SUM,AL

;保存结果计数循环示意循环初始化循环修改部分循环体计数控制条件YN子程序与主程序子程序

与主程序分开的完成特定功能的一段程序

主程序(调用程序)

执行调用指令CALL调用子程序

子程序(被调用程序)

执行返回指令RET返回主程序子程序调用示意RETCALLLABEL主程序子程序子程序调用指令CALLCALLLABEL;相对寻址的段内调用

IP入栈SP←SP-2,SS:[SP]←IP实现转移IP←IP+16位位移量

CALLFAR

PTR

LABEL;直接寻址的段间调用

CS入栈SP←SP-2,SS:[SP]←CSIP入栈SP←SP-2,SS:[SP]←IP

实现转移IP←label偏移地址,

CS←label段地址指令中的LABEL为子程序名。其他形式的CALL指令CALLr16/m16;间接寻址的段内调用

IP入栈SP←SP-2,SS:[SP]←IP实现转移IP←r16/m16

CALLFARPTRmem;间接寻址的段间调用

CS入栈SP←SP-2,SS:[SP]←CSIP入栈SP←SP-2,SS:[SP]←IP

实现转移IP←[mem],CS←[mem+2]调用指令CALL的说明汇编程序会自动确定CALL指令

是段内调用还是段间调用。

CALL指令在改变CS和IP前,

会将返回的地址保存到堆栈中。子程序返回指令RETRET;无参数返回

(段内)弹出IP

IP←SS:[SP],SP←SP+2

(段间)弹出CSCS←SS:[SP],SP←SP+2RETi16;有参数返回,

(段内)弹出IPIP←SS:[SP],SP←SP+2

(段间)弹出CSCS←SS:[SP],SP←SP+2

调整指针SP=SP+i16RET指令用在子程序中,实现调用的返回。返回指令RET的说明汇编程序会自动根据CALL指令来产生相应的RET返回操作。

RET指令执行时伴随着CS,IP,SP的调整。子程序定义子程序名

PROC[NEAR/FAR]

……

;过程体子程序名

ENDP

子程序名为符合语法的标识符

子程序应安排在代码段内主程序之外中断(Interrupt)CPU因某个特殊事件将当前程序挂起(暂停),

转去执行处理这个特殊事件的程序,

处理结束后再返回被挂起的程序,

此过程称为“中断”。

处理特殊事件的程序称为“中断服务程序”。

中断是一种特殊的改变程序执行顺序的方法。中断向量8086/8088CPU支持256个中断。

每个中断用一个中断编号来区别。

中断服务程序的起始地址按中断向量号顺序存放在00000H~003FFH的内存单元(1KB)中,形成“中断向量表”。中断向量表003FFH255号中断服务程序的CS003FEH003FDH255号中断服务程序的IP003FCH……00003H0号中断服务程序的CS00002H00001H0号中断服务程序的IP00000H中断指令INT

i8

;执行i8号中断

IRET

;中断返回指令

INTO;溢出中断指令DOS系统功能调用MS-DOS操作系统提供给程序员的“子程序”

系统功能调用步骤(类似高级语言调用函数)(1)在AH寄存器中设置系统子功能调用号(2)在指定寄存器中设置入口参数(3)中断调用指令“INT21H”执行功能(4)根据出口

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论