大综合课件微机原理上课章_第1页
大综合课件微机原理上课章_第2页
大综合课件微机原理上课章_第3页
大综合课件微机原理上课章_第4页
大综合课件微机原理上课章_第5页
已阅读5页,还剩63页未读 继续免费阅读

下载本文档

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

文档简介

2.38086/8088指令系统

数据传送类指令加减运算指令位操作指令指令应用举例2.3.1数据传送类指令

可实现存储器寄存器I/O

数据传送指令又可分为如下四种:数据传送指令数据交换指令堆栈操作指令地址传送指令查表转换指令1.数据传送指令(1)MOVdest,src;dest←src

传送的是字节还是字取决于指令中涉及的寄存器是8位还是16位。具体来说可实现:

①MOVmem/reg1,mem/reg2

指令中两操作数中至少有一个为寄存器例:MOV CL,DLMOV AX,BX MOV [SI],CX

MOV CL,[BX+5]②MOVreg,data;立即数送寄存器③MOVmem,data;立即数送存储单元④MOVacc,mem;存储单元送累加器⑤MOVmem,acc;累加器送存储单元⑥MOVsegreg,mem/reg;存储单元/寄存器送段寄存器⑦MOVmem/reg,segreg;段寄存器送存储单元/寄存器MOV指令使用规则:1)IP不能作目的寄存器2)不允许mem←mem3)不允许segreg←segreg4)立即数、CS不允许作为目的操作数5)不允许segreg←立即数6)源操作数与目的操作数类型要一致几个不能传送的解决办法:用AX作桥梁

存储器←存储器:

MOVAX,MEM1 MOVMEM2,AX段寄存器←段寄存器:

MOVAX,DS MOVES,AX段寄存器←立即数:

MOVAX,DATA MOVDS,AX应用举例:将1000H开始的100个存储单元全部填充为ASCII码2AH(*)。程序段如下:

MOVDI,1000HMOVCX,64HMOVAL,2AHAGAIN:MOV[DI],ALINCDI

DECCXJNZAGAINHLT上程序段存放在代码段中,設(CS)=109EH,则各条指令存放地址如下:

CS:IP指令109E:0100MOVDI,1000H109E:0103MOVCX,64H109E:0106MOVAL,2AH109E:0108MOV[DI],AL109E:010AINCDI109E:010BDECCX109E:010CJNZ0108109E:010EHLT 109E:0110

写入2AH(*)后,数据段中相应存储单元的内容改变如下:DS:10002A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2ADS:10102A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2ADS:10202A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2ADS:10302A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2ADS:10402A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2ADS:10502A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2ADS:10602A2A2A2A格式:XCHGreg,mem/reg功能:交换两操作数的内容。要求:两操作数中必须有一个在寄存器中;操作数不能为段寄存器和立即数;源和目地操作数类型要一致。举例:XCHG AX,BXXCHG [2000],CL(2)数据交换指令XCHG什么是堆栈?按“后进先出(LIFO)”方式工作的存储区域。堆栈以字为单位进行压入弹出操作。为什么要设置堆栈?为什么要按“后进先出”方式工作?参见下图(3)堆栈操作指令主程序IP继续执行主程序执行子程序转子程序压栈弹出返回主程序主程序IPIP(下)继续执行主程序转子程序1返回主程序IP’执行子程序2转子程序2返回子程序1IP’(下)执行子程序1继续执行子程序1(a)(b)子程序调用示意图(a)主程序调子程序;(b)子程序嵌套示意图压栈弹出IP(下)规定由SS指示堆栈段的段基址,堆栈指针SP始终指向堆栈的顶部,SP的初值规定了所用堆栈区的大小。堆栈的最高地址叫栈底。SPSS堆栈段进栈方向退栈方向栈底栈顶

①压栈指令

PUSHsrc ;src为16位操作数例:PUSH AX ;将AX内容压栈执行操作:(SP)-1←高字节AH

(SP)-2←低字节AL(SP)←(SP)-2设(AX)=1020H,执行示意图如图低地址存储区(SS段)执行前(AX)=1020(SP)存储区(SS段)进栈方向执行后2010(AL)(AH)2-8PUSHAX指令执行示意图(SP)-2(SP)高地址低地址高地址(SP)-1压栈指令的格式为:

PUSH regPUSH mem/regPUSH segreg例如:

PUSHAXPUSH[BX]PUSHDS注意进栈方向是高地址向低地址发展。②弹出指令

POP dest例:POP BX ;将栈顶内容弹至BX

执行操作:(BL)←(SP)

(BH)←(SP)+1

(SP)←(SP)+2POPBX的执行示意图如下图所示低地址存储区(SS段)出栈方向执行前2010POPBX指令执行示意图(SP)存储区(SS段)执行后(BX)=1020(SP)(SP)+1(SP)+2BX2010高地址低地址高地址堆栈指令使用时应注意几点:①堆栈操作总是按字进行②不能从栈顶弹出一个字给CS③堆栈指针为SS:SP,SP永远指向栈顶④SP自动进行增减量(-2,+2)(4)地址传送指令用途:用于传送操作数的地址传送偏移地址格式:LEAreg,mem;将指定内存单元的偏移地址送到指定寄存器传送地址指针格式:LDSreg,mem32;DS:reg←(mem开始的四个内存单元的内容)LESreg,mem32;同上,但DS改为ES要求:

1)源操作数必须是一个存储器操作数;

2)目的操作数必须是一个16位的通用寄存器。下面两条指令等效:

LEABX,BUFFERMOVBX,OFFSETBUFFER其中OFFSETBUFFER表示存储器单元BUFFER的偏移地址。二者都可用于取存储器单元的偏移地址,但LEA指令可以取动态的地址,OFFSET只能取静态的地址。设:(SI)=1000H则执行该指令后,(BX)=1010H注意以下二条指令差别:

LEABX,BUFFERMOVBX,BUFFER前者表示将符号地址为BUFFER的存储单元的偏移地址取到

BX中;后者表示将BUFFER存储单元中的内容取到

BX中.例:LEA BX,[SI+10H](5)查表指令XLAT

执行的操作:AL←[(BX)+(AL)]

又叫查表转换指令,它可根据表项序号查出表中对应代码的内容。执行时先将表的首地址(偏移地址)送到BX中,表项序号存于AL中。

例如:内存数据段有一张16进制数的ASCII码表,设首地址为2000H,如欲查出表中第11个代码(代码序号从0开始)即十六进制数B的ASCII码。ASCII表在DS段中,并假设(DS)=4000H。见下页图。303132...394142...4546...42000H+042000H+11‘0’‘1’‘2’‘9’‘A’‘B’‘E’‘F’十六进制数ASCII码表存储器则可用如下几条指令实现:MOVBX,2000H

;(BX)←表首地址MOVAL,0BH

;(AL)←序号XALT

;查表转换执行后得到:(AL)=42H=’B’注意:转换表长度最大为256个表项(字节)。2.3.2加减运算指令1.加法指令2.减法指令

3.比较指令算术运算的溢出问题

算术运算涉及两种类型数据:无符号数和有符号数。对加减法指令,并不区分无符号数和有符号数,但应注意:参加的操作数必须同是无符号数或同是有符号数。无符号数和有符号数的运算结果是否溢出,判断方法是不同的。两个8位数相加时有4种情况:①无符号数和有符号数均不溢出二进制相加无符号数加有符号数加

000010008+8+30+(+30)0010011038+38

结果38 CF=0OF=0②无符号数溢出

000010008+8+253+(-3)100000101261+5

结果5 CF=1 OF=0③有符号数溢出

000010008+8+125+(+125)

10000101133+133

结果-123 CF=0OF=1(补码表示)④无符号数和有符号数均溢出

10001000136-120+247+(-9)101111111383-129

结果127CF=1OF=1上面四种情况说明,CF标志可用来表示无符号数的溢出,OF标志可用来表示有符号数的溢出。有符号数的溢出是一种出错状态,在运算过程中应当避免。(1)不带进位的加法指令ADD

格式:ADD acc,dataADD mem/reg,dataADD

mem/reg1,mem/reg2

实例:

ADD AL,30HADD SI,[BX+20H] ADD CX,SI ADD [DI],200H1.加法指令

ADD指令对6个状态标志均产生影响。例:已知(BX)=D75FH

指令ADDBX,8046H

执行后,状态标志各是多少?

D75FH=11100111010111118046H=1000000001000110

111111

0110011110100101结果:C=1,Z=0,P=0,A=1,O=1,S=0(2)带进位位的加法指令ADCADC指令在形式上和功能上与ADD类似,只是相加时还要包括进位标志CF的内容,例如:

ADCAL,68H;AL←(AL)+68H+(CF) ADCAX,CX;AX←(AX)+(CX)+(CF)ADCBX,[DI];BX←(BX)+[DI+1][DI]+(CF)例:有两个4字节的无符号数相加:

2C56F8AC+309E47BE=?设被加数、加数分别存放在BUFFER1及BUFFER2开始的两个存储区内,结果放回BUFFER1存储区。(见下页图)

因CPU只能进行8位或16位的加法运算,为此可将两数分成低字和高字分别相加。ADC指令用于多字节加法运算中56H2CHBEH47HBUFFER1BUFFER2ACHF8H9EH30H被加数加数数据段多字节加法示意图......程序段如下:

MOVAX,BUFFER2 ADDBUFFER1,AX;低字相加

MOVAX,BUFFER2+2 ADCBUFFER1+2,AX;高字相加,

;包括低字的进位格式:INCreg/mem功能:类似于C语言中的++操作:对指定的操作数加1例:INCALINCSIINCBYTEPTR[BX+4]注:本指令不影响CF标志。3)加1指令INC(增量指令)(单操作数指令)ADD/ADC对条件标志位(CF/OF/ZF/SF)的影响:CF位表示无符号数相加的溢出。OF位表示带符号数相加的溢出。1结果为负0否则SF=1结果为00否则ZF=1和的最高有效位有向高位的进位0否则CF=1两个操作数符号相同,而结果符号与之相反0否则OF=(1)不考虑借位的减法指令SUB

格式:SUBdest,src

操作:dest←(dest)-(src)注:1.源和目的操作数不能同时为存储器操作数

2.立即数不能作为目的操作数指令例子:

SUBAL,60HSUB[BX+20H],DXSUBAX,CX2.减法指令SBB指令主要用于多字节的减法。格式:SBBdest,src操作:dest←(dest)-(src)-(CF)指令例子:

SBBAX,CXSBBWORDPTR[SI],2080HSBB[SI],DX(2)考虑借位的减法指令SBB例:x、y、z均为32位数,分别存放在地址为X,X+2;Y,Y+2;Z,Z+2的存储单元中,用指令序列实现w

x+y+24-z,结果放在W,W+2单元中。

MOVAX,XMOVDX,X+2ADDAX,YADCDX,Y+2;x+yADDAX,24ADCDX,0;x+y+24

SUBAX,Z

SBBDX,Z+2;x+y+24-zMOVW,AXMOVW+2,DX;结果存入W,W+2单元作用类似于C语言中的“--”操作符。格式:DECopr 操作:opr←(opr)-1指令例子:

DECCLDECBYTEPTR[DI+2]DECSI(3)减1指令DEC(减量指令)SUB/SBB对标志位(CF/OF/ZF/SF)的影响

CF=1表示无符号数减法溢出。

OF=1表示带符号数减法溢出。1被减数的最高有效位有向高位的借位0否则CF=1两个操作数符号相反,而结果的符号与减数相同0否则OF=格式:CMPdest,src操作:(dest)-(src)CMP也是执行两个操作数相减,但结果不送目标操作数,其结果只反映在标志位上。指令例子:

CMPAL,0AHCMPCX,SICMPDI,[BX+03]3.比较指令CMP根据标志位来判断比较的结果1)根据ZF判断两个数是否相等。若ZF=1,则两数相等。2)若两个数不相等,则分两种情况考虑:①比较的是两个无符号数若CF=0,则dest>src;

若CF=1,则dest<src。②比较的是两个有符号数若OF⊕SF=0,则dest>src;

若OF⊕SF=1,则dest<src。2.3.3位操作指令:逻辑运算和位移指令

1.逻辑运算指令●运算规则:按位操作,无进/借位

●对标志位的影响(除NOT指令外):CFOFSFZFPFAF00***无定义

根据运算结果设置格式:NEGopr操作:opr←0-(opr)对一个操作数取补,可将该数变为绝对值相等符号相反的另一数。例:若(AL)=0FCH,则执行NEGAL 后,

(AL)=04H本例中,0FCH可视为-4的补码,执行求补指令后,即得到4(-4的绝对值)。(1)求补指令NEG(2)逻辑”与”AND对两个操作数进行按位逻辑“与”操作。格式:ANDdest,src用途:保留操作数的某几位,清零其他位。例1:保留AL中低4位,高4位清0。

ANDAL,0FH例2:AL中有字符’a’~’z’,将其转换成大写。

ANDAL,01011111B;例3:测试AL的bit7,bit5,bit2是否都是1。

ANDAL,10100100B CMPAL,10100100BJZYES<notall1>

…YES:对两个操作数进行按位逻辑”或”操作。格式:ORdest,src用途:对操作数的某几位置1;对两操作数进行组合。例1:把AL中的非压缩BCD码变成相应十进制数的ASCII码。

ORAL,30H(3)逻辑”或”OR例2:把AH和AL中的非压缩BCD码组合成压缩的BCD码,放到AL中。

MOVCL,4SHLAH,CLORAL,AH例3:把AL的第5位置为1ORAL,00100000B对操作数进行按位逻辑”非”操作(包括符号位)。格式:NOTmem/reg例:NOTCXNOTBYTEPTR[DI](4)逻辑“非”(取反)NOT对两个操作数按位进行”异或”操作。格式:XORdest,src用途:对reg清零(自身异或)

把reg/mem的某几位变反(与’1’异或)例1:把AX寄存器清零。例2:把DH的bit4,3变反①MOVAX,0XORDH,18H②XORAX,AX③ANDAX,0④SUBAX,AX(5)逻辑”异或”XOR

操作与AND指令类似,但不将”与”的结果送回,只影响标志位。TEST指令常用于位测试,与条件转移指令一起用。例:测试AL的内容是否为负数。

TESTAL,80H;检查AL中D7=1?

JNZMINUS;是1(负数),转MINUS

;否则为正数MINUS:(6)测试指令TEST2.移位指令(1)非循环移位指令算术左移指令SAL(ShiftArithmeticLeft)

算术右移指令SAR(ShiftArithmeticRight)

逻辑左移指令SHL(ShiftLeft)

逻辑右移指令SHR(ShiftRight)这4条指令的格式相同,以SAL为例:

SALmem/reg,CL;移位位数大于1时1;移位位数等于1时移位指令执行的操作如下图所示:最低位最高位CF0(a)算术/逻辑左移SAL/SHL最低位最高位CF(b)算术右移SAR最低位最高位CF(c)逻辑右移SHR0非循环移位指令功能示意图移位位数放在CL寄存器中,如果只移1位,也可以直接写在指令中。例如:

MOVCL,4 SHRAL,CL;AL中的内容右移4位影响C,P,S,Z,O标志。结果未溢出时:左移1位≡操作数*2

右移1位≡操作数/2例:把AL中的数x乘10(若结果不会溢出)因为10=8+2=23+21,所以可用移位实现乘10操作。程序如下:

SALAL,1;2x MOVAH,AL SALAL,1;4xSALAL,1;8xADDAL,AH;8x+2x=10x

不含进位位的循环左移指令ROL

不含进位位的循环右移指令ROR

含进位位的循环左移指令RCL

含进位位的循环右移指令RCR格式同非循环移位指令。移位位数放在CL寄存器中,如果只移1位,

也可以直接写在指令中。循环移位指令只影响标志位CF和OF。(2)循环移位指令这4条指令的功能如下图示:最低位最高位CF(a)ROL最低位最高位CF(c)RCL最低位最高位CF(b)ROR最低位最高位CF(d)RCR循环移位指令功能示意图用移位操作代替乘除法可提高运算速度例:前例中计算x*10。(1)采用乘法指令:

MOV BL,10MUL BL

共需70~77个T周期。(2)采用移位和加法指令:SAL AL,1;2TMOV AH,AL;2TSAL AL,1;2TSAL AL,1;2TADD AL,AH;3T

只需11个T周期,仅相当于乘法的1/7。循环移位举例:例1:将AL的高4位与低4位互换。

MOVCL,4ROLAL,CL例2:将字变量W中的无符号数除以8,商和余数分别放在字变量QUOT和字节变量REMA中。WDW65525QUOTDW?REMADB?

MOVAX,WSHRAX,1RCRREMA,1SHRAX,1RCRREMA,1SHRAX,1RCRREMA,1MOVQUOT,AXMOVCL,5SHRREMA,CL例3:设在1000H开始存有四个压缩的BCD码12、34、56、78。要求把它们转换为ASCII码存放在3000H开始的单元中。假定DS、ES都已设置为数据段的段基址。程序见下页。1000H3000H1234567832H31H34H33H36H35H38H37H

MOVSI,1000H ;SI←BCD首址

MOVDI,3000H ;DI←ASCII首址

温馨提示

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

评论

0/150

提交评论