微机原理与接口 C0303_第1页
微机原理与接口 C0303_第2页
微机原理与接口 C0303_第3页
微机原理与接口 C0303_第4页
微机原理与接口 C0303_第5页
已阅读5页,还剩32页未读 继续免费阅读

下载本文档

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

文档简介

微机原理与接口技术2016-2017第二学期冯春晖2017.3.8周三8086的汇编指令系统8086的指令系统包括100多条指令,可分为以下六种类型:数据传送指令算术运算指令位操作指令串操作指令程序控制指令处理器控制指令数据传送指令数据传送指令负责把数据、地址或立即数传送到寄存器或存储单元中。通用传送指令MOV(Move)数据传送指令格式:MOV

dst,src

dstsrc说明reg1reg2reg1不能是CSregimreg不能是CS,DS,ES和SSregmreg不能是CSmimmregreg为寄存器操作数,m为存储器操作数,im为立即数。MOV指令传送方向PUSH(Pushontothestack)进栈指令格式:PUSH

src操作:(SP)←(SP)-2((SP)+1,(SP))←src说明:PUSH指令只能是字(16位)操作。src可以是‘reg’、‘m’,但不能是‘im’。例:PUSHAXPUSHCSPUSH[SI]XX低地址栈顶SS→···XX…未进栈单元…已进栈单元高地址SP→栈顶12H未进栈单元已进栈单元SP→XX···XX低地址SS→…高地址34HMOVAX1234HPUSHAX…POP(Popfromstack)出栈指令格式:POP

dst操作:dst←((SP)+1,(SP)),(SP)←(SP)+2说明:POP指令只能字(16位)操作dst可以是‘m’,‘reg’,但不能是CS、‘im’。PUSH,POP指令不影响标志位栈顶未进栈单元已进栈单元SP→12HXX···XX低地址SS→…高地址34HPOPBX栈顶12H未进栈单元已进栈单元SP→XX···XX低地址SS→…高地址34H(BX)=1234HXCHG(Exchange)数据交换指令格式:

XCHG

OPR1,OPR2操作:

(OPR1)←→(OPR2)OPR1,OPR2是两个操作数。它们可以是寄存器或存储器,但二者中必有一个是寄存器。不允许使用段寄存器。指令允许字或字节操作。不影响标志位。累加器专用传送指令XLAT(Translate)换码指令格式:

XLAT操作:

(AL)←(BX+AL)EA=BX+AL将数据段中一个存储单元的内容送到ALIN(Input)输入指令直接寻址方式格式:

IN

AL,PORT;(字节)

IN

AX,PORT;(字)操作:字节

(AL)←(PORT)

字(AX)←(PORT+1,PORT)PORT是I/O端口地址(0~255)间接寻址方式格式:

IN

AL,DX;(字节)

IN

AX,DX;(字)操作:字节(AL)←(DX)

字(AX)←(DX+1,DX)OUT(Output)输出指令直接寻址方式格式:

OUT

PORT,AL;(字节)

OUT

PORT,AX;(字)操作:字节(PORT)←(AL)字(PORT+1,PORT)←(AX)间接寻址方式格式:OUT

DX,AL;(字节)

OUT

DX,AX;(字)操作:字节(DX)←(AL)字(DX+1,DX)←(AX)IN和OUT(输入输出)指令专用于CPU与外设(I/O端口)之间传送信息。无论输入或输出,数据必须经由累加器(AX或AL)传送。直接寻址方式的指令只能寻址256个I/O端口(端口号:0~255或0~FFH)。间接接寻址方式的指令可以寻址64K个I/O端口(端口号:0~65535或0~FFFFH)。IN和OUT指令提供了字与字节两种使用方式,选用哪一种,取决于外设端口的宽度。[例]

INAX,28HMOVDATA_WORD,AX把端口28H的内容经AX传送到存储单元DATA_WORD中。[例]

MOVDX,3FCHINAX,DX从端口03FCH取一个字送到AX寄存器。[例]OUT5,AL

从AL寄存器输出一个字节到端口5。目的地址传送指令LEA(Loadeffectiveaddress)取有效地址指令格式:

LEA

reg16,mem操作:把源操作数的有效地址(EA),传送到目标寄存器(reg16)中。源操作数mem必须是内存操作数。reg16必须是一个16位的通用寄存器例

LEABX,BUFFERMOVBX,BUFFER前者是把BUFFER的有效地址‘EA’传送给BX,后者把存储单元BUFFEER的内容传送给BX。LEADX,[BX]MOVAX,[BX]若(BX)=0400H,DS=2000H,(20400H)=0402H则(DX)=0400H(AX)=0402H例

LEABX,MAX[BX][SI]若执行前:

(BX)=0400H,(SI)=003CH,MAX=0F62H源操作数的有效地址为

EA=0400+003C+0F62=139EH指令执行后:

(BX)=139EHLDS(LoadDSwithpointer)指针送寄存器和DS格式:

LDS

reg16,mem操作:

(reg16)←(mem)

(DS)←(mem+2)存储器…………DSreg16highlowLES

(LoadESwithpointer)指针送寄存器和ES格式:

LES

reg16,mem操作:

(reg16)←(mem),(ES)←(mem+2)存储器…………ESreg16highlow源操作数mem是32位的内存操作数。目的操作数reg16是16位的通用寄存器。本指令将源操作数指定的存储器中的4个连续单元(4字节)传送给指定的reg16和DS/ES,低2位字节给reg16,高2位字节给DS/ES。LEA、LDS、LES三条指令不影响标志位。存储器…………highlow[例]

LDSSI,[10H]若指令执行前(DS)=C000H,(SI)=0010H,(C0010H)=0180H,(C0012H)=2000H则指令执行后(SI)=0180H,(DS)=2000H。DSSI80H20H00H01H例:LESDI,[BX]若指令执行前(DS)=B000H,(BX)=080AH,(B080AH)=05AEH,(B080CH)=4000H,则指令执行后

(DI)=05AEH,(ES)=4000H。存储器…………highlowESDIAEH40H00H05H标志传送指令LAHF(LoadAHwithflags)标志送AH指令格式:

LAHF操作:

(AH)←(FLAG的低字节位)只传送了SF,ZF,AF,PF,CF五个标志位标志传送指令SAHF(StoreAHintoflags)AH送标志寄存器指令

格式:SAHF操作:(FLAG的低字节)←(AH)PUSHF(Pushtheflags)标志进栈指令格式:

PUSHF操作:

(SP)←(SP)-2((SP)+1,(SP))←(FLAG)POPF(Poptheflags)标志出栈指令格式:

POPF操作:

(FLAG)←((SP)+1,(SP))(SP)←(SP)+2LAHF和PUSHF不影响标志位,SAHF和POPF则由装入的值来确定标志位。算术指令加法指令ADD(add)加法格式:ADD

dst,src操作:(dst)←(src)+(dst)ADC(addwithcarry)带进位加法格式:ADC

dst,src操作:(dst)←(src)+(dst)+CFINC(increment)加1格式:INC

dst操作:(dst)←(dst)+1说明:目的操作数dst可以是寄存器或存储器操作数。源操作数src可以是寄存器、存储器操作数或立即数。源与目的操作数不能同为存储器操作数。不允许段寄存器参与运算。以上三条指令可以是字节(8位)操作,也可以是字(16位)操作。三条指令对状态标志位产生影响,但INC指令对CF位无影响。例如:ADDCL,10ADCDX,SIADDAX,MEMADCALPHA[DI],30HINCSI以上指令皆合法。[例]

MOVAL,7EHMOVBL,5BHADDAL,BL指令执行后,(AL)=7EH+5BH=D9H各状态标志位为:SF=1,ZF=0,AF=1,PF=0,CF=0,OF=17E011111105B01011011D911011001减法指令SUB

(subtract)减法格式:SUB

dst,src操作:(dst)←(dst)-(src)SBB(subtractwithborrow)带借位减法格式:SBB

dst,src操作:

(dst)←(dst)-(src)-CF其中,CF为借位的值DEC(Decrement)减1格式:DEC

dst操作:

(dst)←(dst)-1CMP

(Compare)比较格式:CMP

dst,src操作:(dst)-(src),CMP不保存运算结果,但影响状态标志位。NEG(Negate)求补格式:

NEG

dst操作:

(dst)←0-(dst),或取反+1操作数为0时,NEG指令使CF=0,其余情况CF均为1;字节运算对-128求补、字运算对-32768求补时OF=1,其余情况OF均为0。[例]MOVAX,0013H;

AX=0013H

;AL=00010011BNEGAL;AL=11101101B=EDH;CF=1,OF=0MOVBX,8F5AH;

BX=8F5AH

;BX=1000111101011010NEGBX; ;BX=0111000010100110;BX=‭70A6‬H ;CF=1,OF=0NEGAH;AH=00H ;CF=0,OF=0[例]

内存数据存放了100个带符号数,首地址为AREA1,要求将各数取绝对值后存入以AREA2为首地址的内存区。由于100个带符号数中可能既有正数,又有负数,因此先要判断正负。如为正数,可以原封不动的传送到另一内存区;如为负数,则须先求补即可得到负数的绝对值,然后再传送。程序如下:

LEASI,AREA1;(SI)←原地址指针

LEADI,AREA2;(DI)←目的地址指针

MOVCX,100;(CX)←循环次数CHECK:MOVAL,[SI];取一个带符号数到AL

CMPAL,0;AL内容不变,但影响标志

JNSNEXT;若(SF)=0,则转NEXTNEGAL;否则求补NEXT:MOV[DI],AL;传送到目的地址

INCSI;源地址加1

INCDI;目的地址加1

DECCX;循环次数减1

JNZCHECK;如不等于零,则转CHECKHLT;停止

[例]

SUB[SI+14H],0316H

指令执行前(DS)=3000H,(SI)=0040H,(30054H

温馨提示

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

评论

0/150

提交评论