3.380868088指令系统

上传人:c****d 文档编号:243012524 上传时间:2024-09-13 格式:PPT 页数:42 大小:138.50KB
返回 下载 相关 举报
3.380868088指令系统_第1页
第1页 / 共42页
3.380868088指令系统_第2页
第2页 / 共42页
3.380868088指令系统_第3页
第3页 / 共42页
点击查看更多>>
资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,3.3 8086/8088指令系统,可分成如下6类:,数据传送指令,算术运算指令,逻辑运算和移位指令,串操作指令,程序控制指令,处理器控制指令,1,3.3.1 数据传送指令,可实现,存储器,寄存器,I/O,数据传送指令又可分为如下四种:,通用传送,目标地址传送,标志传送,输入输出,2,1.通用传送指令,(1),MOV dest,src; destsrc,传送的是字节还是字取决于指令中涉及的寄,存器是8位还是16位。,具体来说可实现:,MOV mem/reg1,mem/reg2,指令中两操作数中至少有一个为寄存器,例: MOVCL,DL,MOVAX,BX,MOVSI,CX,MOVCL,BX+5,3, MOV reg,data ;,立即数送寄存器, MOV mem,data ;,立即数送存储单元, MOV acc,mem ;,存储单元送累加器, MOV mem,acc ;,累加器送存储单元, MOV segreg,mem/reg ;,存储单元/寄存器送,段寄存器, MOV mem/reg,segreg ;,段寄存器送存储单,元/寄存器,4,MOV指令使用规则:,1) IP不能作目的寄存器,2) 不允许memmem,3) 不允许segregsegreg,4) 立即数不允许作为目的操作数,5) 不允许segreg立即数,6) 源操作数与目的操作数类型要一致,5,几个不能传送的解决办法:,用AX作桥梁,存储器存储器:,MOV AX,MEM1,MOV MEM2,AX,段寄存器段寄存器:,MOV AX,DS,MOV ES,AX,段寄存器立即数:,MOV AX,DATA,MOV DS,AX,6,应用举例:将,1000H,开始的,100,个存储单元,全部填充为,ASCII,码,2AH(*),。,程序段如下:,MOV DI,,,1000H,MOV CX,,,64H,MOV AL,,,2AH,AGAIN,:,MOV DI,,,AL,INC DI,DEC CX,JNZ AGAIN,HLT,7,上程序段存放在,代码段,中,設(CS)=109EH,则各条指令存放地址如下:,CS : IP 指令,109E : 0100 MOV DI,1000H,109E : 0103 MOV CX,64H,109E : 0106 MOV AL,2AH,109E : 0108 MOV DI,AL,109E : 010A INC DI,109E : 010B DEC CX,109E : 010C JNZ 0108,109E : 010E HLT,109E : 0110,8,写入2AH(*)后,数据段中相应存储单元的内容改变如下:,DS:1000,2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A,DS:1010,2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A,DS:1020,2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A,DS:1030,2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A,DS:1040,2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A,DS:1050,2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A,DS:1060,2A 2A 2A 2A,9,什么是堆栈?,按,“,后进先出(LIFO),”,方式工作的存储区域。堆栈,以字为单位,进行压入弹出操作。,为什么要设置堆栈?,为什么要按,“,后进先出,”,方式工作?,参见下图,(2) 堆栈操作指令,10,主程序,IP,继续执行,主程序,执行子程序,转子程序,压栈,弹出,返回主程序,主程序,IP,IP(下),继续执行,主程序,转子程序1,返回主程序,IP,执行子程序 2,转子程序2,返回子程序1,IP(下),执行子,程序1,继续执行,子程序1,(a),(b),子程序调用示意图,(a) 主程序调子程序; (b) 子程序嵌套示意图,压栈,弹出,IP(下),11,规定由SS指示堆栈段的段基址,堆栈指针SP始终指向堆栈的顶部,SP的初值规定了所用堆栈区的大小。堆栈的最高地址叫栈底。,SP,SS,堆栈段,进栈方向,退栈方向,栈底,栈顶,12, 压栈指令,PUSH src ; src为16位操作数,例:PUSHAX;将AX内容压栈,执行操作:(SP)-1高字节AH,(SP)-2低字节AL,(SP)(SP)- 2,13,设(AX)=1020H,执行示意图如图,低地址,存储区,(SS段),执行前,(AX)=1020,(SP),存储区,(SS段),进栈方向,执行后,20,10,(AL),(AH),2-8,PUSH AX指令执行示意图,(SP),-,2,(SP),高地址,低地址,高地址,(SP),-,1,14,压栈指令的格式为:,PUSH reg,PUSH mem/reg,PUSH segreg,例如:,PUSH AX,PUSH BX,PUSH DS,注意进栈方向是,高地址,向,低地址,发展。,15, 弹出指令,POPdest,例:,POPBX;将栈顶内容弹至BX,执行操作:(BL)(SP),(BH)(SP)+1,(SP)(SP)+2,16,POP BX 的执行示意图如下图所示,低地址,存储区,(SS段),出栈方向,执行前,20,10,POP BX指令执行示意图,(SP),存储区,(SS段),执行后,(BX)=1020,(SP),(SP)+1,(SP)+2,BX,20,10,高地址,低地址,高地址,17,堆栈指令使用时应注意几点:,堆栈操作总是按,字,进行,不能从栈顶弹出一个字给,CS,堆栈指针为SS:SP,SP永远指向栈顶,SP自动进行增减量(-2,+2),18,格式:XCHG reg,mem/reg,功能:交换两操作数的内容。,要求:两操作数中必须有一个在寄存器中;,操作数不能为段寄存器和立即数;,源和目地操作数类型要一致。,举例:,XCHGAX,BX,XCHG2000,CL,(3)交换指令XCHG,19,(4)查表指令XLAT,执行的操作:AL(BX)+(AL),又叫,查表转换指令,,它可根据表项序号查出表中对应代码的内容。执行时先将表的首地址(偏移地址)送到BX中,表项序号存于AL中。,例如:内存数据段有一张16进制数的ASCII码表,设首地址为2000H,如欲查出表中第11个代码(代码序号从0开始)即十六进制数B的ASCII码。ASCII表在DS段中,并假设(DS)=4000H。见下页图。,20,30,31,32,.,39,41,42,.,45,46,.,42000H+,0,42000H+,0BH,0,1,2,9,A,B,E,F,十六进制数ASCII码表,存储器,21,则可用如下几条指令实现,:,MOV BX,2000H,;(BX)表首地址,MOV AL,0BH,;(AL)序号,XALT,; 查表转换,执行后得到:(AL)= 42H =,B,注意:转换表长度最大为256个表项(字节)。,22,(5)字节-字转换指令,格式:CBW ;把AL的符号位复制到AH,CWD ;把AX的符号位复制到DX,用途:用于有符号数的除法。,例如:(AL) = A7H,则执行CBW后,AH的内,容为FFH。,23,2. 输入输出(I/O)指令,只限于用,累加器AL或AX,来传送信息。,功能,: (,累加器)I/O端口,(1)输入指令IN,格式:,IN acc,PORT ;PORT端口号0255,IN acc,DX ;DX表示的端口范围达64K,例:,IN AL,80H ;(AL)(80H端口),IN AL,DX ;(AL)(DX),24,例:OUT 68H,AX ;(69H,68H)(AX),OUT DX,AL ;(DX)(AL),在使用间接寻址的IN/OUT指令时,要事先用传送指令把I/O端口号设置到DX寄存器,如:,MOV DX,220H,IN AL,DX ;,将220H端口内容读入AL,(2) 输出指令OUT,格式:OUT port,acc OUT DX,acc,25,3. 地址传送指令,共有三条:,格式:LEA reg,mem ; 将指定存储器的16位偏移,地址送指定寄存器,LDS reg, mem32; DS:reg(mem开始的四,个内存单元),LES reg, mem32; 同上,但DS改为ES,要求,源操作数,必须是一个,内存操作数,,目的操作数必须是一个16位的通用寄存器。,26,设:(SI)=1000H,则执行该指令后,(BX)=1010H,注意以下两条指令差别:,LEA BX,BUFFER,MOV BX,BUFFER,前者表示将符号地址为BUFFER,的存储单元的偏侈地址取到,BX,中;,后者表示将BUFFER存储单元中的内容取到,BX,中.,例:LEABX,SI+10H,27,下面两条指令等效:,LEA BX,BUFFER,MOV BX, OFFSET BUFFER,其中,OFFSET BUFFER,表示存储器单元BUFFER的偏移地址。,二者都可用于取,存储器单元的偏移地址,,但LEA指令可以取动态的地址,OFFSET只能取静态的地址。,28,4.标志传送指令,共有四条:,(1)读标志指令,LAHF,LAHF,把标志寄存器低8位中的5个标志位传送到AH中的指定位,如下图所示:,OF,DF,IF,TF,SF,ZF,AF,PF,CF,AH,LAHF,指令的功能,FLAG,29,(2)设置标志指令,SAHF,SAHF,的功能与,LAHF,的功能正好相反,用图来示意,只要将上图中5个箭头方向反一下即可。,OF,DF,IF,TF,SF,ZF,AF,PF,CF,AH,SAHF,指令的功能,FLAG,30,执行的操作:(SP)-1标志寄存器高8位,(SP)-2标志寄存器低8位,(SP)(SP)-2,(4)从栈顶弹出标志寄存器指令,POPF,执行的操作:标志寄存器低8位(SP),标志寄存器高8位(SP)+1,(SP)(SP)+2,PUSHF,和,POPF,指令用于保护和恢复标志寄存器内容。,(3)把标志寄存器推入栈顶指令,PUSHF,31,例如:,PUSHAX,PUSHCX,PUSHF,;保护标志寄存器内容,;这段程序要用到AX,CX以及标志位,POPF,;恢复标志寄存器内容,POPCX,POPAX,. . .,32,数据传送指令中,除SAHF和POPF这两条指令外,其余所有指令均不影响标志位。,33,3.3.2 算术运算指令,涉及,两种类型数据,: 无符号数和有符号数。对加减法指令,无符号和有符号数可采用同一套指令,但应注意:,参加的操作数必须都是无符号数或都是有符号数。,需使用不同的标志位来检查无符号数和有符号数的运算结果是否溢出。,34,两个,8位数相加时有4种情况:,无符号数和有符号数均不溢出,二进制相加 无符号数加 有符号数加,0000 1000 8 +8,+0001 1110,+ 30,+ (+30),0010 0110 38 +38,结果38 CF=0 OF=0,35, 无符号数溢出,0000 1000 8 +8,+1111 1101,+253,+(-3),1,0000 0101 261 +5,结果5 CF=1 OF=0, 有符号数溢出,0000 1000 8 +8,+0111 1101,+125,+(+125),1000 0101 133 +133,结果-123 CF=0 OF=1,(补码表示),36, 无符号数和有符号数均溢出,1000 1000 136 -120,+1111 0111,+247,+(-9),1,0111 1111 383 -129,结果127 CF=1 OF=1,上面四种情况说明,,CF,标志可用来表示无符号数的溢出,,OF,标志可用来表示有符号数的溢出,。,有符号数的溢出是一种,出错状态,,在运算过程中应当避免。,37,共有5条:,(1) 不带进位的加法指令ADD,格式: ADD acc,data,ADD mem/reg,data,ADD,mem/reg1,mem/reg2,例:ADDAL,30H,ADDAX,BX+20H,ADDCX,SI,ADDDI,200H,ADD指令对标志位(指状态标志)都有影响。,1.,加法指令,38,(2) 带进位位的加法指令ADC,ADC指令在形式上和功能上都有与ADD类似,只是相加时还要包括进位标志CF的内容,例如:,ADC AL,68H ;AL(AL)+68H+(CF),ADC AX,CX ;AX(AX)+(CX)+(CF),ADC BX,DI ;BX(BX)+DI+1DI,+(CF),39,例:有两个4字节的无符号数相加:,2C56F8AC+309E47BE=?,设被加数、加数分别存放在BUFFER1及BUFFER2开始的两个存储区内,结果放回BUFFER1存储区,如下页图所示。,因CPU只能进行8位或16位的加法运算,为此可将加法分4次进行。,ADC指令主要用于多字节加法运算中,40,56H,2CH,BEH,47H,BUFFER1,BUFFER2,ACH,F8H,9EH,30H,被加数,加数,数据段,多字节加法示意图,.,.,41,程序段如下:,MOV CX,4 ;置循环次数,MOV SI,0 ;置SI初值为零,CLC ;清进位标志CF,LL,: MOV AL,BUFFER2SI,ADC BUFFER1SI,AL ;,带进位加,INC SI ;(SI)+1,DEC CX ;(CX)-1,JNZ LL ;若(CX),0,则转LL,思考:若最高位有进位,如何改?,42,
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!