计算机硬件技术基础 微型计算机原理与接口技术 微处理器和指令系统指令系统1_第1页
计算机硬件技术基础 微型计算机原理与接口技术 微处理器和指令系统指令系统1_第2页
计算机硬件技术基础 微型计算机原理与接口技术 微处理器和指令系统指令系统1_第3页
计算机硬件技术基础 微型计算机原理与接口技术 微处理器和指令系统指令系统1_第4页
计算机硬件技术基础 微型计算机原理与接口技术 微处理器和指令系统指令系统1_第5页
已阅读5页,还剩46页未读 继续免费阅读

下载本文档

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

文档简介

指令系统指令寄存器存储器立即数寻址寄存器寻址直接寻址寄存器间接寻址基址寻址变址寻址基址变址寻址相对基址变址寻址数据寻址【例】分别指出下列指令中源操作数和目的操作数的寻址方式。若是存储器寻址,试用表达式表示出EA=?PA=?MOVAX,2100HMOVAX,BX(3)MOVAX,[2000H] (4)MOVAX,[SI](5)MOVAX,ES:[BX](6)MOVAX,[BX+10H](7)MOVAX,[BX+SI+20H]寻址方式回顾段约定:隐含约定在DS段;使用BP、SP访问主存,则约定在SS段指令控制计算机完成某种操作的命令指令系统处理器能识别的所有指令的集合指令?指令系统?指令的一般格式?指令系统包含哪些指令?2.4.3指令系统概述2.4微处理器指令系统基本数据类型指令系统概述数据传送类指令操作数寻址方式逻辑运算和移位指令控制转移类指令算术运算类指令参与运算的数据来自哪里?目的操作数操作码运算结果保存到何处?源操作数执行什么样的操作?例如:Z=X+Y目的操作数源操作数1源操作数2操作码指令具有什么样的格式呢?思考:一条指令中包括哪些信息?2.4.3指令系统概述操作码执行何种操作源/目的操作数源操作数参加操作的数据或数据存放的地址指令的一种格式:操作码操作数操作数,2.4.3指令系统概述操作码操作数,零操作数指令:操作码操作数

单操作数指令:

双操作数指令:操作码操作数隐含操作数源/目的操作数源/目的操作数源操作数注:两个操作数时,操作数类型要一致。如都是8位或都是16、32位。指令中的操作数有哪些形式?2.4.3指令系统概述操作数形式1.立即数

3.存储器操作数2.寄存器操作数表征数据隐含存放在某个寄存器中参加运算的数存放在指令给出的寄存器中,可以是8位、16位、32位。例:MOVAX,BX表示当前参加运算的数的地址存放在存储器的某一个或某两个单元中表示形式:[地址或寄存器

]

例:MOVAX,[1234H]MOV[BX],SI4.隐含操作数源操作数就是参加操作的数据本身,它们可以是8位、16位、32位。例:MOVAX,1234H2.4.3指令系统概述指令语句:[标号:]助记符[操作数][;注释]标号:指出该指令的起始地址;助记符:规定指令语句的操作性质;操作数:提供操作数所需要的信息;注释:说明程序或语句的功能。L1:MOVAX,[SI];传送数2.4.3指令系统概述8086指令系统包含一百多条基本指令,按照指令的不同功能可将指令划分为以下几类:数据传送类指令算术运算类指令逻辑运算与位移指令串操作指令控制转移指令处理器控制指令符号

意义说明op1,op2,op3操作数,一般OP1为目的操作数,OP2为源操作数imm立即数,imm8/16/32---8位/16位/32位立即数reg寄存器,reg8/16/32---8位/16位/32位寄存器mem存储器,mem8/16/32---8位/16位/32位存储器sreg段寄存器,sreg8/16/32---8位/16位/32位段寄存器X表示相应标志位状态依运算或操作结果决定0表示相应标志位无条件清“0”1表示相应标志位无条件置“1”U表示相应标志位未定义,状态随机_表示相应标志位不受影响,保持原状态80X86指令系统中使用的符号说明数据传送是计算机中最基本、最常用、最重要的一类操作。如:主要用于实现CPU内部寄存器之间、CPU与存储器之间,CPU与I/O端口之间的数据传送或交换。在实际程序中,功能与C语言中的赋值语句相似。●各种初始化操作●取操作数●保存结果2.4.4数据传送类指令数据传送指令主要包括:IN/OUT指令通用数据传送指令堆栈指令地址传送指令输入/输出指令标志寄存器传送指令MOV传送指令XCHG交换指令XLAT查表指令LEA指令PUSH/POP堆栈指令(1)MOV数据传送指令指令用途:是在汇编程序中,用于取操作数,保存结果、为循环变量设置初值和其他初始化操作。指令格式:MOV目的操作数,源操作数指令功能:将源操作数的内容传送到目的操作数中例如:MOVAX,1020H

MOVBX,AXMOV[0120H],BX注意:MOV指令中数据传送关系立即数(imm)CS(sreg)DS、ES、SS、(sreg)存储器(M)通用寄存器(reg)可以改变CS和IP值吗?如何实现立即数向段寄存器赋值?如何实现存储器向存储器传数?⑴MOVDS,100⑵MOV[1000H],23H错。源、目的操作数不能同为存储器寻址。⑶MOV[1000H],[2000H]错。立即数不能直接赋给段寄存器。错。目的操作数长度不确定。⑷MOVDL,BX⑸MOVCS,AX错。源和目的操作数类型不一致错。不能用传送指令改变代码段寄存器。⑹MOVAX,[0100H+BX+BP]错。地址寄存器不能同为基址寄存器。

例:识别下列指令的正确性,对错误的指令,说明错误的原因。MOVAX,100MOVDS,AXMOVWORDPTR[1000H],23HMOVAX,[2000H]MOV[1000H],AX给内存单元30000赋值1111,将内存单元30000的值赋值给31000(1)给段寄存器赋值movax,3000movds,ax(2)将1111赋值给地址30000movwordprt[0000],1111(3)将地址30000赋值给30100movax,[0000]mov[1000],ax例题(2)XCHG交换指令指令格式:XCHG目的操作数,源操作数指令功能:将源操作数内容与目的操作数内容交换例如:MOVAX,1122H

MOVBX,3344HXCHGAX,BX说明:⑴操作数只能为寄存器或存储器操作数,而且不能两者同为存储器操作数。MOVDX,AXMOVAX,BXMOVBX,DXXCHGAX,BX(3)XLAT查表指令(换码指令)使用前要先建立表,并对BX和AL赋值。指令格式:XLAT指令说明:该指令隐含两个操作数:BX存放表起始地址的偏移量,AL存放所要查找元素的序号,从0开始。执行该指令时,CPU完成如下操作:DS:((BX)+(AL))AL

即将DS段中有效地址为EA=(BX)+(AL)所对应的存储器单元中的一个字节内容送入AL,从而实现AL中一个字节的代码变换。例2.9已知一个关于0~9的数字的ASCII码表定义如图所示,用查表指令XLAT求出5的ASCII码的指令序列。DS:((BX)+(AL))ALTABLE偏移地址535HMOVBX,OFFSETTABLEMOVAL,5XLATTABLE30H031H132H233H334H4TABLE+535H536H637H738H839H9(4)压栈/弹栈指令SS:SPSS堆栈段栈底栈顶10000H1000AH1000BH1000CH1000DH1000EH1000FHAX01020304按后进先出(LIFO)方式工作的存储区域。由SS指示堆栈段的段基址,堆栈SS:SP始终指向堆栈的顶部。堆栈的最高地址叫栈底。堆栈以字或双字进行压入弹出操作。说明:(4-1)压栈指令--PUSH说明:源操作数可以是寄存器和存储器,也可以是段寄存器。80286以上的微机还允许压栈立即数。指令格式:PUSH源操作数指令功能:将源操作数内容压入堆栈执行操作:16位:(SP)-2SP,源操作数[SS:SP]32位:(ESP)-4ESP,源操作数[SS:ESP]设(AX)=1020H,PUSHAX

执行示意图如下(SP)2010存储区(SS段)低地址高地址(SP)-2SP源操作数[SS:SP](4-2)弹栈指令--POP指令格式:POP目的操作数指令功能:将栈顶元素弹出送目的操作数执行操作:16位:[SS:SP]

目的操作数,(SP)+2SP32位:[SS:ESP]目的操作数,(ESP)+4ESP说明:目的操作数可以允许是寄存器和存储器,以及除CS以外的段寄存器。POPBX的执行示意图如下图所示低地址存储区(SS段)(SP)高地址BX(SP)+2SP[SS:SP]

目的操作数2010堆栈指令的操作数只能为字或双字。PUSH和POP要成对出现,以保持堆栈平衡SP自动进行增减量(-2,+2)或(-4,+4)。压栈顺序是先压高字节后压低字节,弹栈则是先弹低字节后弹高字节。☆堆栈指令使用说明:例:用堆栈指令将地址为:给30000H赋值1122,给31000H赋值3344,两个字单元内容互换。MOVAX,3000HMOVDS,AXMOVWORDPTR[0000H],1122MOVWORDPTR[1000H],3344PUSHWORDPTR[0000H]PUSHWORDPTR[1000H]POPWORDPTR[0000H]POPWODRPTR[1000H](5)地址传送类指令目的操作数只能是寄存器,源操作数只能是存储器操作数指令格式:LEA目的操作数,源操作数指令功能:将源操作数所表示的有效地址送指定的寄存器LEAEAX,20H[EBX*2][ESI]先计算EA=(EBX)×2+(ESI)+20H,再将EA的结果送寄存器提问:LEA指令与MOV指令有什么区别?设:(DS)=2000H,(BX)=0400H,(SI)=003CH执行指令LEABX,[BX+SI+0F62H]MOVBX,[BX+SI+0F62H]注意:MOV与LEA指令的区别(6-1)输入指令指令格式:IN累加器(AL/AX/EAX),端口指令功能:将指定端口中的内容传送到累加器中执行操作:(端口)

累加器(AL/AX/EAX)

INAL,20HINEAX,0230HMOVDX,0230HINEAX,DX端口地址小于255时,以8位立即数方式直接寻址,大于255时,只能通过寄存器DX间接寻址(6-2)输出指令指令格式:OUT端口,累加器(AL/AX/EAX)指令功能:将累加器中的内容传送到指定I/O端口中执行操作:累加器(AL/AX/EAX)端口OUT01FFH,EAXOUT63H,ALMOVDX,01FFHOUTDX,EAX端口地址小于255时,以8位立即数方式直接寻址,大于255时,只能通过寄存器DX间接寻址例1:若某输入外设通过端口地址为60H的端口向计算机输入16位二进制数据,写出输入数据的指令。IN

AX,60H例2:计算机通过端口地址为03F8H的端口,将内存1000H单元中的8位二进制数据输出,写出输出数据的指令。OUT

DX,ALMOV

DX,03F8HMOV

AL,[1000H]1、数据传送指令不影响标志位。2、除XCHG指令外,都是从源到目的的单向传送。3、注意MOV指令与LEA指令的区别。4、段寄存器只能在MOV、PUSH、POP指令中作为操作数。但下列指令不合法:

MOVCS,regPOPCS5、指令有多种格式,一般都遵循以下规则:双操作数指令中不允许两个操作数均为存储器操作数单操作数指令不允许立即寻址方式目的操作数不允许使用立即寻址方式数据传送指令小结假定(AX)=0001H,(DX)=0100H,执行下列指令后,(AL)=(),

1:PUSHAX2:PUSHDX3:POPAX4:POPDXA、21HB、20HC、00HD、01H假设(SS)=1000H,(DS)=2000H,(BP)=0100H,(DI)=0200H,(10300H)=11H,(10301H)=12H,(20300H)=33H,(20301H)=44H,执行指令LEADX,[BP][DI]后,(DX)=()。A、1211HB、4433HC、0301HD、0300H执行指令MOVEDX,[BP][DI]后,(DX)=()。A、1211HB、4433HC、0301HD、0300H假定(SS)=2000H,(SP)=0100H,(AX)=2107H,执行指令PUSHAX后,存放数据21H的物理地址是()。A、20102HB、20101HC、200FEHD、200FFH指令MOV[0500H],AX中目的操作数的寻址方式是

;若已知(DS)=1000H,(ES)=2000H,则指令执行后,结果存放单元物理地址是:

。算术运算指令支持加、减、乘、除四种基本算术运算,其操作对象可以是字节、字、双字的无符号和有符号的二进制整数;也可以是无符号的压缩/非压缩BCD码数;还支持符号扩展指令和十进制调整指令。

它的操作结果一般会影响标志寄存器中的状态标志位,如ZF、CF、SF、OF、AF、PF等。2.4.5算术运算类指令(1-1)ADD加法指令指令格式:ADD目的操作数,源操作数指令功能:将源操作数和目的操作数相加,结果保留在目的操作数中。执行操作:(目的操作数)+(源操作数)目的操作数ADDAX,1234HADD[1000H],BLADD1000H,BL源和目的操作数可以是字节、字、双字,但类型要一致源操作数可以是通用寄存器、存储器或立即数,而目的操作数不能为立即数源和目的操作数不能同为存储器操作数。例:请写出如下步骤对应的指令(AX)=7834H,(BX)=8640H,(AX)=(AX)+(BX)MOVAX,7834HMOVBX,8640HADDAX,BXAX0111100000110100+BX10000110010000001111111001110100OF=?,SF=?,ZF=?,AF=?,PF=?,CF=?010010OFSFZFPFCFDF1OVNGZRPECYDN0NVPLNZPONCUPNVNGNZPENCDebug对标志位的表示OF:溢出SF:符号ZF:零AF:半进位PF:奇偶位CF:进位

(1-2)ADC带进位加法指令指令格式:ADC目的操作数,源操作数指令功能:将源操作数和目的操作数及进位标志相加,结果保留在目的操作数中。执行操作:(目的操作数)+(源操作数)

+CF目的操作数提问:为什么要加上CF的值呢?CPU为什么提供这么一条指令?求0198H和0183H的和0198+0183031B1可以看出,加法也分为两步进行:低位相加高位相加再加上低位相加产生的进位值用途:常用与多精度、多字节、多字、多双字的数相加。如:001EF000H+000100HMOVAL,98HMOVBL,83HMOVAH,01HMOVBH,01HADDAL,BLADCAH,BHMOVAX,0198HMOVBX,0183HADDAX,BX(1-3)INC加1指令指令格式:INC目的操作数指令功能:将目的操作数内容加1。执行操作:(目的操作数)+1目的操作数INCCXINCBYTEPTR[DI]CPU根据结果设置各标志位,但不影响进位标志CF。操作数被认为是无符号数。操作数可以是寄存器或者存储器单元。一般用于循环程序中修改循环次数或地址指针。(2-1)SUB减法指令指令格式:SUB目的操作数,源操作数指令功能:将源操作数和目的操作数相减,结果保留在目的操作数中。执行操作:(目的操作数)-(源操作数)目的操作数SUBAX,1234HSUB[1000H],BLSUB1000H,BL源和目的操作数可以是字节、字、双字,但类型要一致源操作数可以是通用寄存器、存储器或立即数,而目的操作数不能为立即数源和目的操作数不能同为存储器操作数。例:请写出如下步骤对应的指令(AL)=C1H,(BL)=7FH,(AL)=(AL)-(BL)MOVAL,C1HMOVBL,7FHSUBAL,BLOF=?,SF=?,ZF=?,AF=?,PF=?,CF=?100110AL11000001+(-BL)补

10000001010000101用补码加法实现减法时,各位之间产生的进位,与对应减法各位产生的借位是相反的。OF:溢出SF:符号ZF:零AF:半进位PF:奇偶位CF:进位

(2-2)SBB带借位减法指令指令格式:SBB目的操作数,源操作数指令功能:将目的操作数减去源操作数及进位标志,结果保留在目的操作数中。执行操作:(目的操作数)-(源操作数)

-CF目的操作数用途:常用与多精度、多字节、多字、多双字的数相减。(2-3)DEC减1指令指令格式:DEC目的操作数指令功能:将目的操作数内容减1。执行操作:(目的操作数)-1目的操作数DECCXDECBYTEPTR[SI]CPU根据结果设置各标志位,但不影响进位标志CF。操作数被认为是无符号数。操作数可以是寄存器或者存储器单元。一般用于循环程序中修改循环次数或地址指针。(3)NEG整数变反指令(求补)指令格式:NEG目的操作数指令功能:用0减去目的操作数,所得结果即为操作数的补码,结果存于目的操作数中。执行操作:0-(目的操作数)目的操作数NEGAXNEG[1000H]也可以表示成:将操作数按位取反后加1源和目的操作数可以是字节、字、双字的寄存器或存储器。常用于求负数的绝对值。指令影响状态标志OF、SF、ZF、AF、PF和CF。MOVAX,FF64H(1111111101100100)NEGAL;AX=FF9CH,OF=0、SF=1、ZF=0、PF=1、CF=1SUBAL,9DH;AX=FFFFH,OF=0、SF=1、ZF=0、PF=1、CF=1NEGAX;AX=0001H,OF=0、SF=0、ZF=0、PF=0、CF=1DECAL;AX=0000H,OF=0、SF=0、ZF=1、PF=1、CF=1(3)

温馨提示

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

评论

0/150

提交评论