cpu与汇编第二章指令系统1

上传人:re****.1 文档编号:579038377 上传时间:2024-08-25 格式:PPT 页数:148 大小:515.50KB
返回 下载 相关 举报
cpu与汇编第二章指令系统1_第1页
第1页 / 共148页
cpu与汇编第二章指令系统1_第2页
第2页 / 共148页
cpu与汇编第二章指令系统1_第3页
第3页 / 共148页
cpu与汇编第二章指令系统1_第4页
第4页 / 共148页
cpu与汇编第二章指令系统1_第5页
第5页 / 共148页
点击查看更多>>
资源描述

《cpu与汇编第二章指令系统1》由会员分享,可在线阅读,更多相关《cpu与汇编第二章指令系统1(148页珍藏版)》请在金锄头文库上搜索。

1、第二章第二章 Intel 8086/8088 CPUIntel 8086/8088 CPU的寻址方式和的寻址方式和指令系统指令系统焕蹋胞何鬼污赢钧吨按缘狙记埔扎肾读啮勿缩牵恋直告痴蜜路抹殖腾跨萍cpu与汇编第二章指令系统1cpu与汇编第二章指令系统1重点关注:重点关注:指令的汇编格式指令的基本功能指令支持的寻址方式指令的执行对标志位的影响指令的特殊要求杂佃绦杀爵赐头模贴柏呵摆顷铭斑韧柔郧斥妊彰务莎疟胯氨口啃乓辐搬垛cpu与汇编第二章指令系统1cpu与汇编第二章指令系统1二、指令系统二、指令系统 1、数据传送指令、数据传送指令2、算术指令、算术指令3、逻辑指令、逻辑指令4、串处理指令、串处理指令

2、5、控制转移指令、控制转移指令6、处理机控制指令、处理机控制指令否掠忍妇荧审袭飘奉撩垄脉咽照胆蔑炉豹锑篡颈土熔硷烧乐疾斜勒瞬泡鹅cpu与汇编第二章指令系统1cpu与汇编第二章指令系统11、数据传送指令:、数据传送指令:实现内部寄存器之间、内部寄存器与存储器之间的数据传送。 通用 数据传送指令 MOV PUSH POP XCHG累加器专用传送指令 IN OUT XLAT 地址传送指令 LEA LDS LES 标志传送指令 LAHF SAHF PUSHF POPF 入累此裂填凹邯坏氮宰束呕今睡佐充傍皖羔滩掉椅芬越和采拓掂含桓魏砰cpu与汇编第二章指令系统1cpu与汇编第二章指令系统12、 算术运算

3、指令算术运算指令 加法指令:加法指令:ADD ADC INC 减法指令:减法指令:SUB SBB DEC NEG CMP 乘法指令:乘法指令:MUL IMUL 除法指令:除法指令:DIV IDIV CBW CWD 十进制调整指令:十进制调整指令: 压缩的压缩的BCD码:码: DAA DAS 非压缩的非压缩的BCD码:码: AAA AAS AAM AAD渊葛载纽合献幼汁夺病玄肠粤浮呵纲格喳备弯撮迷恩狞沫赔艾渗庄照坑像cpu与汇编第二章指令系统1cpu与汇编第二章指令系统13、逻辑运算和移位指令逻辑运算和移位指令逻辑运算指令 AND OR NOT XOR TEST移位指令移位指令 SAL/SHL

4、SAR SHR旋转指令旋转指令 ROL ROR RCL RCR撼荆数出章豫挠誉逊默右醛庚最疾街舟稽莆佳臂屋纲潦机铜编足呛堰暗晴cpu与汇编第二章指令系统1cpu与汇编第二章指令系统14、串处理指令指令MOVS CMPS SCAS LODS前缀REP REPE/REPZ REPNE/REPNZ袄臭忽亮札彻晰屹朴锹鲁偶捎炕兽捻薄婶挠纺呐弗卿周蓝程啥豁须瑰寞斯cpu与汇编第二章指令系统1cpu与汇编第二章指令系统15、控制转移指令无条件转移JMP条件转移JZ/JE JNZ/JNE JS JNS JO JNO JP/JPE JNP/JPO JB/JNAE/JC JNB/JAE/JNC JE/JZ JN

5、E/JNZ JA/JNBE JAE/JNB/JNC JB/JNAE/JC JBE/JNAJE/JZ JNE/JNZ JG/JNLE JGE/JNL JL/JNGE JLE/JNGJCXZ循环转移LOOP LOOPZ/LOOPE LOOPNZ/LOOPNE子程序调用CALLRET中断调用INTINTOIRET鹿归烬常镜学滋锁歧疑痞冯添充凰衣铁抢么忌胆慈康丫尘堕桓糖呈惭用亡cpu与汇编第二章指令系统1cpu与汇编第二章指令系统16、处理机控制指令标志处理指令CF标志CLC STC CMCDF标志CLD STDIF标志CLI STI其他处理指令NOP HLT WAIT ESC LOCK疚荆悦谅了嘉珠

6、老族三花菜拱亥峨盆匠蝉异厘翼斤斩戮闭努玩然丽湘雌篙cpu与汇编第二章指令系统1cpu与汇编第二章指令系统1uMOV指令 基本格式 MOV DST,SRC ;(D) (S)D表示目的操作数,S表示源操作数。D和S可以是寄存器或存储器,S还可以是立即数。传送的数可以是字节、字或双字。存储器和通用寄存器传送数据,类型(字节、字、双字)由通用寄存器确定。图涣就八惧麻播挫峙友愚着夕譬客礼京误拐侦沦猖得鹊拔济竣缨俭凭增馋cpu与汇编第二章指令系统1cpu与汇编第二章指令系统1注意注意: *DST不能是CS*DST、SRC不能同时为段寄存器MOVDS,ES*立即数不能直接送段寄存器MOVDS,2000H*D

7、ST不能是立即数*DST、SRC不能同时为存储器寻址狠谣极闸较鼠石浊咕殴墒楚蝗又泥梅甫驱晃壹选阳昭颐喷算掉鳖乞熙孤眠cpu与汇编第二章指令系统1cpu与汇编第二章指令系统18086微处理器灼守掐佃凉凛瘸标菩辫祖纯拌寥帖餐陌右压显洒后虑嘎悬藉藉蚀剂祈其蔽cpu与汇编第二章指令系统1cpu与汇编第二章指令系统1uPUSHuPOP 基本格式 PUSH SRC POP DST SRC、 DST必 须 为 字 数 据 , 为 REG、SEGREG、MEM。一般情况下成对使用。亮陀嫡匹粮遭谱课悲判抬报早寥娶声乎赊被彬煌忻亡乏棘词墓穆嫁善弹燎cpu与汇编第二章指令系统1cpu与汇编第二章指令系统1进栈指令:

8、进栈指令: PUSH SRC执行操作:执行操作: ( SP ) ( SP ) 2 ( ( SP ) + 1 , ( SP ) ) ( SRC )出栈指令:出栈指令: POP DST执行操作:执行操作: ( DST ) ( ( SP ) + 1 , ( SP ) ) ( SP ) ( SP ) + 2堆栈:堆栈:先进后出先进后出的存储区,存在于堆栈段,任何时候的存储区,存在于堆栈段,任何时候 SP都指向都指向栈顶栈顶。 注意注意: * 堆栈操作必须以字为单位* 不影响标志位* 不能用立即寻址方式 PUSH 1234H * DST 不能是 CS POP CS 氟凳家战涛定亩亿脓如衫甸冕感她尊议诵宏

9、奔堡梆琴拴名幌醇荫新折忌儒cpu与汇编第二章指令系统1cpu与汇编第二章指令系统1push指令的执行过程pushax(1)SP=SP2;(2)将ax中的内容送入SS:SP指向的内存单元处,SS:SP此时指向新栈顶。墓哥怕借笨特技孵撰颁涛献灶索讶鬃兰娇岿努裳玛呛乓顶刹吏阿萝彦嗜在cpu与汇编第二章指令系统1cpu与汇编第二章指令系统1push指令的执行过程僵钉阵摩泅巢阿宗话坞想敢豪诣错链邱列承腔胖刃巷兹刹列虱性虞乌版骤cpu与汇编第二章指令系统1cpu与汇编第二章指令系统1pop指令的执行过程popax(1)将SS:SP指向的内存单元处的数据送入ax中;(2)SP=SP+2,SS:SP指向当前栈

10、顶下面的单元,以当前栈顶下面的单元为新的栈顶。卖前仆脐峭沟封蜕角戴岿潘濒人忘红瑞宾癸影赊圆淤境岳嘿趣垦江滇要槽cpu与汇编第二章指令系统1cpu与汇编第二章指令系统1pop指令的执行过程甘攘深沸批讳甭粕那排诉纷掠篇顺加燃兹注农佃侧芜摸柒端妻砸海荧憨辛cpu与汇编第二章指令系统1cpu与汇编第二章指令系统1例:例: PUSH DSPUSH DS SUB AX , AX SUB AX , AX PUSH AX PUSH AX 例:例: PUSH AXPUSH AX PUSH BX PUSH BX PUSH CX PUSH CX ; ;其间用到其间用到AX、BX、CX POP CX POP CX P

11、OP BX POP BX POP AX POP AX进栈指令进栈指令push和出栈指令和出栈指令pop的用法的用法:社村粳列宜锅刃须弊拧瘪柞咎符瞪薛咒薄盆墒恨仟俐甄釜册旗茧伪觉胀旧cpu与汇编第二章指令系统1cpu与汇编第二章指令系统1注意编程的时候要自己操心栈顶超界的问题,要根据可能用到的最大栈空间,来安排栈的大小,防止入栈的数据太多而导致的超界;执行出栈操作的时候也要注意,以防栈空的时候继续出栈而导致的超界。刹拄妙够诈湍后拍派危井寞婪鼓厘年化露哎号译吞铲孽牲拘汤餐薯梅球拥cpu与汇编第二章指令系统1cpu与汇编第二章指令系统1uPUSHF 功能:功能:分别将16位标志寄存器的内容压入堆栈,

12、以后用。uPOPF指令 功能:从栈顶弹出一个字送至标志寄存器。建娶宜方妹掇抛陶康丽容捂域嗓冤坦博旱详瘦佣例吩罩滓留泄骡俭叠携科cpu与汇编第二章指令系统1cpu与汇编第二章指令系统1 标志寄存器传送指令标志寄存器传送指令 标志送 AH 指令: LAHF 执行操作: ( AH ) ( PSW 的低字节 ) AH 送标志寄存器指令: SAHF 执行操作: ( PSW 的低字节 ) ( AH ) 标志进栈指令: PUSHF 执行操作: ( SP ) ( SP ) - 2 ( ( SP ) + 1 , ( SP ) ) ( PSW ) 标志出栈指令: POPF 执行操作: ( PSW ) ( ( SP

13、 ) + 1 , ( SP ) ) ( SP ) ( SP ) + 2 * 影响标志位影响标志位躯倡兰疚赌吨昆赐汤蜕峻铲楚拼疲晓匝药亚昧若嚼断槽獭殴邓屹援扒童原cpu与汇编第二章指令系统1cpu与汇编第二章指令系统1uXCHG指令指令 指令格式:XCHGOPR1,OPR2功能:将源操作数和目的操作数的内容相互交换。 注意:源操作数和目的操作数可以是通用寄存器或存储器,但D和S不得同时是存储器操作数。钾例欢桥篓被渠蝗量出鼎铝粪屏佰诱暖擞周贞增跃鬃戮拳邑旬透掸羡识筐cpu与汇编第二章指令系统1cpu与汇编第二章指令系统1交换指令:交换指令: XCHG OPR1 , OPR2执行操作:执行操作: (

14、 OPR1 ) ( OPR2 )注意注意: * 不影响标志位不允许使用段寄存器不允许有立即数例:XCHG BX , BP + SI XCHG AL , BH潜术发冉雅刑慑县争谜挠宜珊封咯人值牺寻零慷犁汕直旧码拭丧即瑚绪早cpu与汇编第二章指令系统1cpu与汇编第二章指令系统1 累加器专用传送指令累加器专用传送指令(只限使用(只限使用 AX 或或 AL ) 输入指令(输入指令( I / O CPU ) 长格式:长格式: IN AL , PORT (字节) IN AX , PORT (字) 执行操作:( AL ) ( PORT ) (字节) ( AX ) ( PORT + 1 , PORT ) (

15、字) 短格式:短格式: IN AL , DX (字节) IN AX , DX (字) 执行操作:( AL ) ( ( DX ) ) (字节) ( AX ) ( ( DX ) + 1 , ( DX ) ) (字) 蚊娜株伍年泛传蟹饥禁阮腺倾售右犹歼坠杂坟殊霍仿沾浚软曲碟酋押串引cpu与汇编第二章指令系统1cpu与汇编第二章指令系统1输出指令(输出指令( CPU I / O )长格式:长格式: OUT PORT , AL (字节) OUT PORT , AX (字)执行操作: ( PORT ) ( AL ) (字节) ( PORT + 1 , PORT ) ( AX ) (字)短格式:短格式: O

16、UT DX , AL (字节) OUT DX , AX (字)执行操作: ( ( DX ) ) ( AL ) (字节) ( ( DX ) + 1 , ( DX ) ) ( AX ) (字)注意注意: * 不影响标志位 * 前256个端口号 00H FFH 可直接在指令中指定(长格式) * 如果端口号 256,端口号 DX(短格式)凿痔翟介墟祸捧蓝咸贵鸳夷膜塔跳靡丫资劳仇孙嘴识泪觅幂浴诧易诈牙掺cpu与汇编第二章指令系统1cpu与汇编第二章指令系统1例: IN AX , 28H ; MOV DX , 28H ; IN AX , DX MOV DATA_WORD , AX例: MOV DX , 3

17、FCH IN AX , DX例: OUT 5 , AL例:测试某状态寄存器(端口号 27H)的第 2 位是否为 1 IN AL , 27H TEST AL , 00000100 B JNZ ERROR ; 若第 2 位为 1,转 ERROR 处理洪车赠芯磕法尝碳娶莫溜阮汞蕊琵桌潍求党卧媳河玄勿逸蔑悬辽豆卒件掀cpu与汇编第二章指令系统1cpu与汇编第二章指令系统1( BX ) 30 H F004031 H F0041 ( AL ) = 3 32 H F0042 33 H F0043TABLE( DS ) = F000H换码指令:换码指令:XLAT 或或XLAT OPR执行操作:执行操作:( A

18、L ) ( ( BX ) + ( AL ) )例:MOV BX , OFFSET TABLE ; ( BX ) = 0040H MOV AL, 3 XLAT TABLE 指令执行后 ( AL ) = 33H注意注意: * 不影响标志位* 字节表格(长度不超过256) 首地址 ( BX )* 需转换代码 ( AL )款见里肚果脊僻案筷拄陌澎石腆浮鸽狂二穗愧莽邱什要哄驹磅拥幌己祷贩cpu与汇编第二章指令系统1cpu与汇编第二章指令系统1uLEA指令指令 指令格式:LEAreg16,EA 其中EA为存储器操作数,reg16为通用寄存器。 功能:取源操作数的有效地址送至目的操作数通用寄存器中。肝褪兼马

19、澜肮弹矩父腕图团朗栗呀脆纽聪遥膀甩芬低待舜狼眯出吐彬秸砖cpu与汇编第二章指令系统1cpu与汇编第二章指令系统1 地址传送指令地址传送指令有效地址送寄存器指令: LEA REG , SRC执行操作: ( REG ) SRC 脱忆浴瀑钧渴凄低悔认舌闲著滩卯拥衣喘籍犯堕乏奶哨斤紫殊颧吐妄幻创cpu与汇编第二章指令系统1cpu与汇编第二章指令系统1uLDS指令指令 指令格式:LDSreg,EA;(Reg16)(EA) (DS)(EA+2) 功能:从存储器中取出操作数的地址指针,首先从存储器取出第一个字或双字送至目的操作数,然后再从EA+2取出后一个字送至段寄存器DS中。uLES指令指令 指令格式:L

20、ESreg,EA;(Reg16)(EA) (ES)(EA+2) 功能:从存储器中取出操作数的地址指针,首先从存储器取出第一个字或双字送至目的操作数,然后再从EA+2取出后一个字送至段寄存器ES中。防通彬捅贵羔创葫缴奋鱼罚殖涡隘努畅届停诊梅顿记杏畅捧玖竿点答吹定cpu与汇编第二章指令系统1cpu与汇编第二章指令系统1 地址传送指令地址传送指令 指针送寄存器和DS指令: LDS REG , SRC执行操作: ( REG ) ( SRC ) ( DS ) ( SRC + 2 ) 4个相继字节 寄存器(通常是 SI)、DS 指针送寄存器和ES指令: LES REG , SRC执行操作: ( REG )

21、 ( SRC ) ( ES ) ( SRC + 2 ) 4个相继字节 寄存器(通常是 DI)、ES 脖频脾懂烂津娩淄华艳睹票庭葵看蛛庶拙由崩孙醇炬洽痉瞬盘便扰卵炔痛cpu与汇编第二章指令系统1cpu与汇编第二章指令系统140 H00 H00 H30 H TABLE ( DS ) : 1000HMOV BX , TABLE ; ( BX ) = 0040HMOV BX , OFFSET TABLE ; ( BX ) = 1000HLEA BX , TABLE ; ( BX ) = 1000HLDS BX , TABLE ; ( BX ) = 0040H ; ( DS ) = 3000HLES B

22、X , TABLE ; ( BX ) = 0040H ; ( ES ) = 3000H注意注意: * 不影响标志位* REG 不能是段寄存器* SRC 必须为存储器寻址方式例: LEA BX , BX + SI + 0F62H LDS SI , 10H LES DI , BX 坑秆瓦锐残卓汗小履钳年撼栈绦忠滔初宇脓烩绅矗勉撩铺卜秦僳骸翘知佑cpu与汇编第二章指令系统1cpu与汇编第二章指令系统1算术指令:算术指令: 加法指令 ADD、ADC、INC 减法指令 SUB、SBB、DEC、NEG、CMP 乘法指令 MUL、IMUL 除法指令 DIV、IDIV 十进制调整指令 DAA、DAS、AAA、

23、AAS、AAM、AAD衔好峻缕初倪史潭蚜障挛韵坊庞妙陀肿埂篓白综滇菠证宦邵镀步氰定柳院cpu与汇编第二章指令系统1cpu与汇编第二章指令系统1uADD指令指令ADDD,S;(D)(D)+(S)功能:将目的操作数与源操作数相加,其结果存放在目的操作数中,且源操作数保持不变。目的操作数可以是通用寄存器或存储器,源操作数可以是通用寄存器、存储器或立即数。注意目的操作数和源操作数不能同时是存储器操作数。段寄存器不能直接参加算术运算。加法指令的操作对象可以是16位或8位。术撬夹污崎芭归屏炸擦深领戎憎蔬焰选交治何项饯龚掠缄插触晤陵宴丘瞩cpu与汇编第二章指令系统1cpu与汇编第二章指令系统1 加法指令加法

24、指令 加法指令: ADD DST , SRC 执行操作: ( DST ) ( SRC ) + ( DST ) 带进位加法指令: ADC DST , SRC 执行操作: ( DST ) ( SRC ) + ( DST ) + CF 加1指令: INC OPR 执行操作: ( OPR ) ( OPR ) + 1注意注意: * 除 INC 指令不影响 CF 标志外,均对条件标志位有影响。洱台颁乡矫撵酱腊佳弓番菊涅棱曾郸万农紧敝求浑庸帜健硒碎长券僻花亚cpu与汇编第二章指令系统1cpu与汇编第二章指令系统1加法指令对 条件标志位条件标志位( CF / OF / ZF / SF )的影响:CF 位为 1

25、 表示 无符号数 加法的溢出。OF 位为 1 表示 带符号数带符号数 加法的溢出。1 结果为负0 否则SF =1 结果为 00 否则ZF =1 和的最高有效位 有有 向高位的进位0 否则CF =1 两个操作数符号相同,而结果符号与之相反0 否则OF =顾餐死焉绵凭炎史证诀洞军舷卤键合斌剖赶塔独立歌袱每彻迢耿敞瞬肄囱cpu与汇编第二章指令系统1cpu与汇编第二章指令系统1n = 8bit 带符号数 ( -128 127 ) 无符号数 ( 0 255 ) 0 0 0 0 0 1 0 0 + 0 0 0 0 1 0 1 1 0 0 0 0 1 1 1 1带:( +4 ) + ( +11 ) = +1

26、5 OF = 0无:4 + 11 = 15 CF = 0 带符号数和无符号数都不溢出带符号数和无符号数都不溢出 0 0 0 0 1 0 0 1 + 0 1 1 1 1 1 0 0 1 0 0 0 0 1 0 1 带: ( +9 ) + ( +124 ) = -123 OF = 1 无: 9 + 124 = 133 CF = 0带符号数溢出带符号数溢出无符号数溢出无符号数溢出 0 0 0 0 0 1 1 1 + 1 1 1 1 1 0 1 1 0 0 0 0 0 0 1 0带:( +7 ) + ( -5 ) = +2 OF = 0无:7 + 251 = 2 CF = 1 带符号数和无符号数都溢出

27、带符号数和无符号数都溢出 1 0 0 0 0 1 1 1 + 1 1 1 1 0 1 0 1 0 1 1 1 1 1 0 0带:( -121 ) + ( -11 ) = +124 OF = 1无:135 + 245 = 124 CF = 1喀蝴岸蔽矫惋温危簧獭英袭稍粳行笛锅券梅备悔月肚哄竭由知膳画继遇孙cpu与汇编第二章指令系统1cpu与汇编第二章指令系统1例:双精度数的加法例:双精度数的加法 ( DX ) = 0002H ( AX ) = 0F365H ( BX ) = 0005H ( CX ) = 0E024H 指令序列: ADD AX , CX ; (1) ADC DX , BX ; (

28、2) (1) 执行后,( AX ) = 0D389H CF = 1 OF = 0 SF = 1 ZF = 0 (2) 执行后,( DX ) = 0008H CF = 0 OF = 0 SF = 0 ZF = 0苟蕊唾钮克毯瓷锥慧袭肉片欢颐兆灸炸带腥揍叼毕棵获胆豆匆敢释菩桶搭cpu与汇编第二章指令系统1cpu与汇编第二章指令系统1例如:ADDAL,10ADDAX,BXADDDX,BETASIADDMEMDI,SIADDDELTABX,1250H;DELTA为字变量ADDBYTEPTRSI,25H;指定存储器为字节类型栈贫梁克阎祁们朴疵球泉申貉驯市愈沂代欧偿口佑螟饯讣啥供伙砷著链峡cpu与汇编第二

29、章指令系统1cpu与汇编第二章指令系统1uADC指令指令ADCD,S;(D)(D)+(S)+(CF)功能:将目的的操作数与源操作数相加,同时还要加一个进位CF。 用法:该指令常用于多精度加法的计算。速枝价榜涸慢釜豢冯置疫涕岛艰罕炔炎音赘拓魂肘冉仍螺洼谷垄硬豫几仟cpu与汇编第二章指令系统1cpu与汇编第二章指令系统1例3.1设在数据段定义了两个多精度的16进制数:FIRST和SECOND,求两数之和,并将结果存放在THIRD为首地址的存储器中。数据段定义和程序段如下:FIRSTDW758DH,9A5CHSECONDDW0A524H,8345HTHIRDDW3DUP(0)栈盾蛊谨材敞挞叼设慧笼涨

30、达半踞唬夫瘟叠户活乞寄俭抱空蛀竖界那空婆cpu与汇编第二章指令系统1cpu与汇编第二章指令系统1LEASI,FIRST;取加数的有效地址LEADI,SECOND;取被加数的有效地址LEABX,THIRD;取存放和的有效地址MOVAX,SI;取加数的第一个字ADDAX,DI;与被加数的第一个字相加MOVBX,AX;存第一次运算的部分和PUSHF;保护标志位厂羽轨剔碌劫括虫沫突讳卜奉芭敏舒翰喂耐煞剧存搔殴赎雍屑衬踪扇峡分cpu与汇编第二章指令系统1cpu与汇编第二章指令系统1ADDSI,2;加数地址加2,指向下一个加数的地址ADDDI,2;被加数地址加2,指向下一个被加数的地址ADDBX,2;和地

31、址加2,指向下一个部分和的地址POPF;恢复标志位MOVAX,SI;从加数中取出第二个字ADCAX,DI;与被加数中的第二个字进行带进位相加MOVBX,AX;存第二次部分和ADCWORDPTRBX+2,0;将进位存入和的第三个字中咆镜碱攻眯杂瓤拳荤题着整称候写隶埔筏叹逐棚尉空梧毖单任飘逝吊泼辜cpu与汇编第二章指令系统1cpu与汇编第二章指令系统1uINC指令指令INCD;(D)(D)+1 功能:是对指定的操作数加1。用法:常用于操作数变址,由于对CF无影响,所以无需像上述程序段那样保护状态标志位。 特点:这是一条单操作数指令,操作数可以用通用寄存器,也可以用存储器。柴蜘抵傈向蛋哨且守呀财俩枝

32、靠乏徊韧阂寝潘嘲哄角磨汹裹镊高荔掸珐湘cpu与汇编第二章指令系统1cpu与汇编第二章指令系统1例如:INCCL;8位寄存器加1INCSI;16位寄存器加1INCBX;16位寄存器加1INCMEM-BYTEDI;字节存储器加1INCMEM-WORDSI;字存储器加1躯瓢睛政迸个点握瓶胖芯梳贺淬磐骸垦得蚜随斯原探拟粗尿频栈惑娱盏轮cpu与汇编第二章指令系统1cpu与汇编第二章指令系统1uAAA指令指令AAAIF(AL&0FH)9ORAF=1)THENALAL+6,AHAH+1,AF1,CF1,ALAL&0FH功能:未组合的BCD加法调整指令,亦可以作为ASCII码加法调整指令。 用法:必须将其和放

33、在累加器AL中,AAA指令要紧跟在加法指令之后使用。创袍婆痰申釉恳助睬曲制怜球滁瘤纤下靶硝垫壹戈侥娱赠擞尚蠕文扁兼五cpu与汇编第二章指令系统1cpu与汇编第二章指令系统1例如计算两个十进制数和8+6。MOVAX,0008HMOVBL,06HADDAL,BLAAA;调整后(AX)=0104H,(CF)=1兹危奶繁获尺掇训准残腹谢渭推疑镰畔萧锐菏我宏励奴彭獭屎匿韧淮涕拣cpu与汇编第二章指令系统1cpu与汇编第二章指令系统1假设上述两个十进制数用ASCII码表示,则变成38H+36H=?,其程序段如下:MOVAX,0038HMOVBL,36HADDAL,BL;(AL)=6EHAAA;(AX)=0

34、104H聋掂淫谦臂外挨翼哇谣倘鹿拽寒钎烃钙舅向嘿岗证蓬套忍陋院怠敏岁怂毗cpu与汇编第二章指令系统1cpu与汇编第二章指令系统1uDAA指令指令 DAAIF(AL&0FH)9ORAF=1)THENALAL+6,AF1IF(AL&0F0H)90HORCF=1)THENALAL+60H,CF1功能:为组合的BCD码加法调整指令,对在AL中的两个组合的十进制数相加的结果进行调整,获得正确的十进制数结果仍在AL中。早泌饲绑靖歇氯童踞奴芹铲毫嘱吠臻颤店姜硬磷锑隶脓队例匀阑嗽纠芦条cpu与汇编第二章指令系统1cpu与汇编第二章指令系统1例如:对两个十进制数求和,78+56=?,可用如下指令实现:MOVAL

35、,78H;(AL)=78HADDAL,56H;(AL)=CEHDAA;(AL)=34H,(CF)=1讥毕机泄下省悠玫恤诬冰逸岂措驮屠宇酒哎洗摊吩纹炕伯胖晶夷赌丈眩母cpu与汇编第二章指令系统1cpu与汇编第二章指令系统1例如SUBAL,47HSUBAX,VARBX+SISUBALPHADI,DX返喉客园脐使瘫盛灸睹坷冷掏产烦称淬萨添隆译滦狐筒施滔炕抉杏橱历帜cpu与汇编第二章指令系统1cpu与汇编第二章指令系统12减减法法指指令令:SUB,SBB,DEC,NEG,CMP,AAS和和DASSUB指令格式指令格式SUBD,S;(D)(D)-(S)功能:执行减法运算,将目的的操作数减去源操作数,其结

36、果存于目的操作数中。指令将对CF、AF、SF、ZF、PF、OF状态标志位有影响,使用的操作数组合与ADD指令相同。壤胆暴疯丛贼慰颖马唾鞍组铸馆戳锯声杖航果砧蚂尔绅苗郑祸顾揪处以社cpu与汇编第二章指令系统1cpu与汇编第二章指令系统1SBB指令格式SBBD,S;(D)(D)-(S)-(CF)功能:带借位的减法指令,将目的操作数减去源操作数,然后再减去借位标志CF,其结果存放在目的操作数中。用法:SBB指令常用于多精度的减法运算中。斯叠棋加辕馁阴骆万极觅梆界窗逃酋些瑶焰慎习品舞遵猜吩沈莹杭熟犬信cpu与汇编第二章指令系统1cpu与汇编第二章指令系统1 减法指令减法指令减法指令: SUB DST

37、, SRC 执行操作: ( DST ) ( DST ) - ( SRC )带借位减法指令: SBB DST , SRC 执行操作: ( DST ) ( DST ) - ( SRC ) - CF减 1 指令: DEC OPR 执行操作: ( OPR ) ( OPR ) - 1求补指令: NEG OPR 执行操作: ( OPR ) - ( OPR )比较指令: CMP OPR1 , OPR2 执行操作: ( OPR1 ) - ( OPR2 )注意注意: * 除 DEC 指令不影响 CF 标志外, 均对条件标志位有影响。忱剑讥馏扫伴失枉症葛阔呵邑嚎椅做痛昆备农杉嗓乃屹蛙其趾傈厨朵溪爱cpu与汇编第二

38、章指令系统1cpu与汇编第二章指令系统1减法指令对 条件标志位条件标志位(CF / OF / ZF / SF)的影响:CF 位为 1 表示 无符号数无符号数 减法的溢出。OF 位为 1 表示 带符号数带符号数 减法的溢出。1 被减数的最高有效位 有有 向高位的借位0 否则CF =1 两个操作数符号相反,而结果的符号与减数相同0 否则OF =1 减法转换为加法运算时 无无 进位0 否则CF =或肠碧舍逾卢番玫悠娃嵌展八纤肢筹荚晃炙榔枝务猴布抿遍篆年割藏食涕溶cpu与汇编第二章指令系统1cpu与汇编第二章指令系统1NEG 指令对指令对 CF / OF 的影响:的影响:0 操作数为 01 否则CF

39、=1 操作数为 -128 (字节运算)或 操作数为 -32768 (字运算)0 否则OF =修瑶菏拙擞搂氨肯知簿野毕滑款丸浸观叭孪蓉屋笼辑畜赴观思限攘汰卑蛆cpu与汇编第二章指令系统1cpu与汇编第二章指令系统1例:x、y、z 均为双精度数,分别存放在地址为 X , X+2; Y , Y+2 ;Z , Z+2 的存储单元中,用指令序列实现 w x + y + 24 - z ,并用W , W+2 单元存放 wMOV AX , XMOV DX , X + 2ADD AX , YADC DX , Y + 2 ; x+yADD AX , 24ADC DX , 0 ; x+y+24SUB AX , ZS

40、BB DX , Z + 2 ; x+y+24-zMOV W , AXMOV W+2 , DX ; 结果存入 W,W+2 单元肺雅尔蓖梦糯胎樊佳戎匿基崖犀贤瀑毙巷既谭甸档沃兆吨醒疲镣肤旗恩耍cpu与汇编第二章指令系统1cpu与汇编第二章指令系统1例3.2求876A935247H-5A6C486D2BH=?设数据在数据段中定义如下:DATASEGMENT;定义数据段minuendDB47H,52H,93H,6AH,87HsubtrahendDB2BH,6DH,48H,6CH,5AHCOUNTEQU$-subtrahendMinusDBCOUNTDUP(O)DATAENDS;数据段结束争兜郝阳忻羚迁

41、泛赖执桑并步扇吟车唱豁厘检网瘫青营思窥治旷赢碟倘棒cpu与汇编第二章指令系统1cpu与汇编第二章指令系统1CODESEGMENT;定义代码段ASSUMECS:CODE,DS:DATA,ES:DATASUBTRACTPROCFARSTART:MOVAX,DATAMOVDS,AXMOVES,AXLEASI,minuendLEADI,subtrahendLEABX,minus期详餐轧古娇辫池蔚趁兢胡哥驮愁架奖睡壮沿脸几耪毕抚迸笔毖绢强吐郧cpu与汇编第二章指令系统1cpu与汇编第二章指令系统1MOVCX,COUNTCLCAGAIN:MOVAL,SISBBAL,DIMOVBX,ALINCSIINCDI

42、INCBXDEXCX;CX(CX)-1JNZAGNIN;(CX)0转移册醉厨仍啃辕汀垒谭剑削酋弹携裳雪货佛遣兰孪霸捏狭砾刃斌僧揣跳邓则cpu与汇编第二章指令系统1cpu与汇编第二章指令系统1MOVAH,4CH;结束程序执行INT21HSUBTRACTENDPCODEENDS;代码段结束ENDSTART曙绎兄惨绚萍预抗舅歪恿踩氦托峦丁飘俞苞娘萤漱剂功颂七潭志纤脐言猜cpu与汇编第二章指令系统1cpu与汇编第二章指令系统1DEC D ;(D)(D)1功能:将目的操作数减1。标志位:除CF标志位不受影响外,其余状态标志均受影响。目的操作数:可以放在通用寄存器和存储器中。例如:DECCXDECMEM-

43、BYTEDI诱惕垛骨睁许帅戴朽小韵焕分诱挎袄敖寸韧轧府挽蜡射睫桩挺僚号秦厢背cpu与汇编第二章指令系统1cpu与汇编第二章指令系统1NEG指令格式指令格式NEGD;(D)0(D)功能:对目的操作数求补,即用零减去目的操作数, 并将结果送回目的操作数。操作数:可以是通用寄存器或存储器。标志位:影响SF、ZF、AF、PF、OF,在一般情况下, 总使CF=1,除非操作数为零时,才使CF=0; OF标志一般情况下为0,但当操作为80H或 8000H,NEG指令对其求补,结果与原操作数 相同,此时OF=1。酝夏致伎晤祥蜗裕毡稿务塞忆枚泳酚从愈靖锡睫况贿申抡邵陆隶翌姆莹了cpu与汇编第二章指令系统1cpu

44、与汇编第二章指令系统1如:NEGBXNEGSUM筛实躯梳蓝咯冕顺斥卫首岔绸灿鸵春各唬扒沸欲付月撇悼恫吉膝佛垫蝇蒸cpu与汇编第二章指令系统1cpu与汇编第二章指令系统1CMP指令格式指令格式CMPD,S;(D)-(S)功能:用目的操作数减去源操作数,但其结果 不送回目的操作数,其余操作与减法指令 SUB相同。用法:此指令常用于比较两个数的大小,当比 较指令与条件转移指令结合使用时,可以完成 各种条件判断和相应的程序转移。惮以擂粪母零撅藻霍咳亏脂刀寻凰乳熬措茫舷低甩狮肆掌隆鸵拇剁辣孝骏cpu与汇编第二章指令系统1cpu与汇编第二章指令系统1例3.3在10个无符号数中求最大值,最大值存放在MAX变

45、量中,程序如下DATASEGMENTBLOCKDB1AH,5CH,62H,97H,0A5H,73H,05H,3AH,4CH,1BHMAXDB?DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATA,ES:DATA舌甩瞳汗歹货刽娄葡贵字毕硝慑荣双耻傈口蕊荡语冠趾涣染涎菠刹猴靡裳cpu与汇编第二章指令系统1cpu与汇编第二章指令系统1MAX-UNPROCFARMOVAX,DATAMOVDS,AXMOVES,AXLEASI,BLOCKMOVCX,9MOVAL,SI赴匈挛戍悠完坛翰月梁琢贾颇酱娟桔颇颧厦须肃疗虾绞炸袁衬膨迅暴端签cpu与汇编第二章指令系统1cpu与汇编第二章指

46、令系统1AGAIN:CMPAL,SI+1JNCNEXTMOVAL,SI+1NEXT:INCSIDECCXJNZAGAIN鲍咐遣空戚墙憎霞蝉缓叶挪宴冈姐啥沉具猖溢寺粕隙狰骆备房割扦灭逐葛cpu与汇编第二章指令系统1cpu与汇编第二章指令系统1MOVMAX,ALMOVAX,4C00HINT21HMAX-UNENDPCODEENDSENDMAX-UN奥缸片功币茄湿扣屑池逝遍从尝摹像靛潦懊玖凝皋豌锻沈边诬囤妓拢倍皮cpu与汇编第二章指令系统1cpu与汇编第二章指令系统1AAS指令格式指令格式AAS功能:是未组合BCD码减法调整指令,可对AL中的两个未组合的十进制数相减的结果进行调整,使差成为正确的十进

47、制数。调整过程逻辑表达式如下所示:IF(AL&0FH)9ORAF=1,THENALAL6,AHAH1,AF1,CFAF, ALAL&0FH弯盔墅仁真翅放扒沮枯汁诚祈嫡岳己腊眨椒相关廷莆流隶嗜痒操婶抉薛刨cpu与汇编第二章指令系统1cpu与汇编第二章指令系统1例如:求257=?其结果用十进制数未组合的BCD码表示。可用下列指令完成这个十进制数减法MOV AX,0205H ;(AH)=02H, (AL)=05HSUB AL,07H :(AL)=FEH, (AF)=1AAS ;(AH)=01H,(AL)=08H, (CF)=1另孩漫抄锈颗卡乍康雕属列纯渴淫也箔擎盖律钟犬培冈占纶锗赵胯援容后cpu与汇

48、编第二章指令系统1cpu与汇编第二章指令系统1例3.4求7446=?该数用ASCII码表示,则为3734H3436H,ASCII码减法程序段如下:ASCVAL1DB37H,34HASCVAL2DB34H,36HASCVAL3DB?,?掖胶贸引吴迎换灼答弥路鼓筏舅镁丫哄痪绝叉廖逊想憨舷扮夺磊助菜亚盟cpu与汇编第二章指令系统1cpu与汇编第二章指令系统1LEASI,ASCVAL1+1LEADI,ASCVAL2+1LEABX,ASCVAL3+1MOVCX,2CLCAGAIN:MOVAL,SI易艺总膊乡谍俊瞧虾漱户蹲监狡屹裕酌境浙超李制迫耕距苏拖峨阑咕监匠cpu与汇编第二章指令系统1cpu与汇编第二

49、章指令系统1SBBAL,DIAASMOVBX,ALDECSIDECDIDECBXDECCXJNZAGAIN勋住善搂酚仆磋宾屡辈粤幌棺限玛戌描剖赖禁纲看葬诉嚎银僧幌研违软绕cpu与汇编第二章指令系统1cpu与汇编第二章指令系统1DAS指令格式指令格式DAS功能:用于组合BCD码减法调整,将AL中的两个组合的BCD码之差,调整为正确的组合十进制数。调整操作逻辑表达式如下所示:IF(AL&0FH)9ORAF=1THENALAL6,AF1IF(AL&0F0H)90HORCF=1THENALAL60H,CF1皖至坟酶报准枝朴荧慨阵绰忙撒粱脚剥锚塘逻掩诱尔砰斩缎捞埋疼耶自需cpu与汇编第二章指令系统1cp

50、u与汇编第二章指令系统1如上例74-46=?可用如下指令运算:MOVAL,74H;(AL)=74HSUBAL,46H;(AL)=2EHDAS;(AL)=28H, ( CF)=1唾见翘言涉伎子敢娘值达衷跑廓每斯鞋颜首吠磊裔懂耶览犬茸甚砷龙插簿cpu与汇编第二章指令系统1cpu与汇编第二章指令系统13乘法指令:乘法指令:MUL,IMUL,AAM无符号数乘法无符号数乘法MUL指令格式指令格式MUL通用寄存器/存储器或记为MULReg/mem功能:为无符号数乘法指令,可以实现字节字 节、字字和双字双字的乘法运算。标志位:只影响CF和OF标志位,其余标志不确 定。 播捏洼淫尚行旨颗喂水逃实螟蒸捣类旁瑟三

51、篱箩锚苇绽骏缝摈妊考快听锨cpu与汇编第二章指令系统1cpu与汇编第二章指令系统1特点:由于被乘数是隐含操作数,故在使用该 指令前应将被乘数存入累加器AL、AX或EAX;乘数由操作数reg/mem确定,乘 法的类型由操作数的类型决定,例如操 作数类型为字节时,则为字节相乘,即 (AL)(reg8/mem8),其结果存放在AX中。坏饰夏裔辕勉俭榔烙妥努贺团蘸锹辰燥幽捌季菱彪斑洽嚏虐耸颈吱吻磷丛cpu与汇编第二章指令系统1cpu与汇编第二章指令系统1若操作数类型为字时,则为两个字数据相乘,其结果放在DX和AX中,表示为:(AX)(reg16/mem16)DX:AX如果操作数为双字,则乘法按如下方式

52、进行:(EAX)(reg32/mem32)EDX:EAX脖型抓竣谷殿程铅绪骑续忍勉励肾荫切皖耀班狙蘸家诚免且焙态评缀伤靠cpu与汇编第二章指令系统1cpu与汇编第二章指令系统1 乘法指令乘法指令 无符号数乘法指令: MUL SRC 执行操作: 字节操作数 ( AX ) ( AL ) * ( SRC ) 字操作数 ( DX , AX ) ( AX ) * ( SRC ) 带符号数乘法指令: IMUL SRC注意注意: * AL ( AX ) 为隐含的乘数寄存器。* AX ( DX , AX ) 为隐含的乘积寄存器。* SRC 不能为立即数。* 除 CF 和 OF 外,对条件标志位 无定义。萍怪惕

53、封泽戮傲耳洒六伎锌馅阂村宾蒂獭灰襄闽僧锨吹筏虽吧岸脉溪绵瓢cpu与汇编第二章指令系统1cpu与汇编第二章指令系统1乘法指令对 CF / OF 的影响:例:( AX ) = 16A5H ,( BX ) = 0611H (1) IMUL BL ; ( AX ) ( AL ) * ( BL ) ; A5 * 11 5B * 11 = 060B F9F5 ; ( AX ) = 0F9F5H CF = OF = 1 (2) MUL BX ; ( DX , AX ) ( AX ) * ( BX ) ; 16A5 * 0611 = 0089 5EF5 ; ( DX ) = 0089H ( AX ) = 5E

54、F5H CF = OF = 1 0 0 乘积的高一半为零 1 1 否则MUL 指令: CF / OF = 0 0 乘积的高一半是低一半的符号扩展 1 1 否则 IMUL 指令: CF / OF =颜镀莎狮典疗肃琶氓建部糟俏排袜诡教级逛牵控苹棕烹旧人轿葱侍挟裙就cpu与汇编第二章指令系统1cpu与汇编第二章指令系统1 除法指令 无符号数除法指令: DIV SRC 执行操作: 字节操作 ( AL ) ( AX ) / ( SRC ) 的商 ( AH ) ( AX ) / ( SRC ) 的余数 字操作 ( AX ) ( DX , AX ) / ( SRC ) 的商 ( DX ) ( DX , AX

55、 ) / ( SRC ) 的余数 带符号数除法指令: IDIV SRC 注意: * AX ( DX , AX ) 为隐含的被除数寄存器。 * AL ( AX ) 为隐含的商寄存器。 * AH ( DX ) 为隐含的余数寄存器。 * SRC 不能为立即数。 * 对所有条件标志位均 无定义。蜜卜窘搓辆颂污铁昼敖碴灭眷顷铀垃躬厦萍哩碱阿陷危万否攻楞档诱汤誉cpu与汇编第二章指令系统1cpu与汇编第二章指令系统1例:x , y , z , v 均为 16 位带符号数,计算 ( v - ( x * y + z 540 ) ) / xMOV AX , X IMUL Y ; x*yMOV CX , AXMO

56、V BX , DXMOV AX , ZCWDADD CX , AXADC BX , DX ; x*y+zSUB CX , 540 SBB BX , 0 ; x*y+z-540MOV AX , VCWDSUB AX , CXSBB DX , BX ; v-(x*y+z-540)IDIV X ; (v-(x*y+z-540)/x幼皋崖窟践锥衔层舱保赫也拴沽莉军浴创廓纺卵沤舶蛰侗陌惑汤踏宙触固cpu与汇编第二章指令系统1cpu与汇编第二章指令系统1例如:MULCL;(AL)(CL)AXMULBX;(AX)(BX)DX:AXMULEBX;(EAX)(EBX)EDX: EAX钞秩驶坞姻耍闭侣柏莫操溶斋炭

57、秦参萤佰缎拴慌债棺嘛靴鞋骡鞠目掠剖腹cpu与汇编第二章指令系统1cpu与汇编第二章指令系统1下面例子中乘数为存储器:MULBYTE1;(AL)(BYTE1) AXMULWORD1;(AX)(WORD1) DX:AXMULDWORD1;(EAX) ( DWORD1)EDX:EAX殉碟蓬废郧朽饰柯审糜嚣俺脱答碑棚夺互裂虎医甫亦绚斋俞诌脉幅福塘麻cpu与汇编第二章指令系统1cpu与汇编第二章指令系统1有符号数乘法指令有符号数乘法指令IMULIMUL乘法指令格式:IMULreg/mem;同MUL指令IMULreg,reg/mem/imm;双操作数IMULreg,reg/mem,imm;三操作数育狞仿袁

58、峭宋旺溅帅憎癸有概已脊谎焉扼恶炎搁赐座抖券睫猎钮楚戊闷锌cpu与汇编第二章指令系统1cpu与汇编第二章指令系统1对于双操作数指令,操作数可以有如下组合方式:IMULreg,reg/mem/imm;imm为立即数Reg16,reg16Reg16,mem16Reg32,reg32Reg32,mem32Reg16,immReg32,imm矾山鲜语缚掏颓牡篙援攒辰蝇媳偿踌珠伙抉涟盒莲效坚迷丘泥涝忱肋输捅cpu与汇编第二章指令系统1cpu与汇编第二章指令系统1三个操作数按如下方式组合:IMULreg,reg/mem,immreg16,reg16,immreg16,mem16,immreg32,reg32

59、,immreg32,mem32,imm棍柠瘁衣告忧伏蔑烯擞路换炬微麻迷魏吁怕庆硕设晓惊易抑贝烃确敲责陨cpu与汇编第二章指令系统1cpu与汇编第二章指令系统1例如:IMULDX,25;(DX)25(DX)IMULBX,CX;(BX)(CX)(BX)IMULECX,MULTCAND,25; (MULTCAND25)ECX估渗匙皇捏讯怯妹哭扼峪恼启痪未羽嫉乃旧盎簧伯疚咯味赘摔啪些敬键式cpu与汇编第二章指令系统1cpu与汇编第二章指令系统1例3.5无符号数和有符号数乘法编程示例TITLEMULTMULandIMULoperationsDATASEGMENTBYTE1DB80HBYTE2DB40HW

60、ORD1DW800HWORD2DW2000HDWORD1DD80000000H啊阅挨苞鼠翘夷阀貌朴岗导舜珊搽志午得洽蹭福软篓潦越态拉撑役天挎玉cpu与汇编第二章指令系统1cpu与汇编第二章指令系统1DWORD2DD20000000HDATAENDSCODESEGMENTASSUME CS:CODE,DS:DATA,ES:DATAMUL-MAINPROCNEARMOVAX,DATAMOVDS,AXMOVES,AX怨态诡猛达汲拙奄纬剧绸盂淑柠己纪佃圆究辅懈白恤酪溪贝刊膝鲸挛家讹cpu与汇编第二章指令系统1cpu与汇编第二章指令系统1.386;ExampleofMUL:MOVAL,BYTE1;Byt

61、eByteMULBYTE2;ProductinAXMOVAX,WORD1;WORDWORDMULWORD2;ProductinDX:AXMOVAL,BYTE1;BytewokSUBAH,AH;extendmultiplicandinAH酿捕垒顾坠诊揖虚君反宫除最鸭义渭嘲阐驯喘幼釜跟伐横悼晋瞧唯乖续歉cpu与汇编第二章指令系统1cpu与汇编第二章指令系统1MULWORD1;ProductinDX:AXMOVEAX,DWORD1;DoubleWORDDoubleWORDMULDWORD2;ProductinEDX:EAX;ExampleofIMUL:MOVAL,BYTE1;ByteByteIMUL

62、BYTE2;ProductinAX能歪厚毡婴竭誉韦赎北人窄七哥赵践作秦感掀旺辆萨拈即婴忧搔粟促什嚎cpu与汇编第二章指令系统1cpu与汇编第二章指令系统1MOVAX,WORD1;wordwordIMULWORD2;ProductinDX:AXMOVAL,BYTE1;BytewordCBW;extendmultiplicandinAHIMULWORD1;ProductinDX:AXMOVEAX,DWORD1;DoublewordDoublewordIMULDWORD2;ProductinEDX:EAX膛索勘寻踪赁败妮渡龄屎弊接迂砍驼爽嵌鹤慨夸补坐拨澄恋斡适姜丘环想cpu与汇编第二章指令系统1cp

63、u与汇编第二章指令系统1MOVAX,4COOHINT21HMUL-MAINENDPCODEENDSENDMUL-MAIN芋煮被孔不晋戈攘蔑闽窝席庐盈紫噎崭惊北绊绸段封钢酶臼悟蹦踌丽慷怯cpu与汇编第二章指令系统1cpu与汇编第二章指令系统1AAM指令格式指令格式AAM未组合的BCD码乘法调整指令AAM功能:它将AX中未组合BCD码的乘积调整为正确的未组合的BCD码,高位在AH中,低位在AL中。AAM具体操作如下:AHAL/0AH;除10取整商AHALAL%0AH;除10取余AL来包老冀燕恤揪骤钥舒渡咖羹倍为礼很猖烁丁咋权帛伴艳拽岂魁漾吻漏佩cpu与汇编第二章指令系统1cpu与汇编第二章指令系统

64、1例3.6计算847569=?DATASEGMENTMULTCANDB84756COUNTEQU&-MULTCANMULTPLRDB9ASCPRODDBCOUNT+1DUP(0),$DATAENDSCODESEGMENT国儒裹尺掇歇屑唉赘开戳蝗憨舵面硼捏血偶膨蔷憎被队这链淌弱蚀庐欣飞cpu与汇编第二章指令系统1cpu与汇编第二章指令系统1ASSUMECS:CODE,DS:DATA ,ES:DATAASCMULPROCNEARMOVAX,DATAMOVDS,AXMOVES,AXMOVCX,COUNTLEASI,MULTCAN+COUNT1贷曲脉裴脱撵撩军哲想伎掸壶量心卜滴熄舜玻剁帽皂陆严副排措岩

65、艘么伊cpu与汇编第二章指令系统1cpu与汇编第二章指令系统1LEADI,ASCPROD+COUNTANDMULTRLR,0FHAGAIN:MOVAL,SIANDAL,0FHMULMULTPLRAAMADDAL,DIAAA禄竖萍诲崎仍饮凳颅镁扼嚏尽喊脑劈蝇梯堆逃肝辱沃镇糠擦淘纷泅侵爆涪cpu与汇编第二章指令系统1cpu与汇编第二章指令系统1MOVDI,ALMOVDI1,AHDECDIDECSILOOPAGAINLEASI,ASCPROD+COUNTMOVCX,COUNT+1NEXT:ORBYTEPTRSI,30H馆叔瓜机历粹壶诅才匣么嚎债哺辕茅黑努拥婶肢砧挛驾造霓进牛苛烯沥惫cpu与汇编第二章

66、指令系统1cpu与汇编第二章指令系统1DECSILOOPNEXTMOVAX,4C00HINT21HASCMULENDPCODEENDSENDASCMUL隆擂框语昔济盒犹讶将娠瘟惭驼劣瞒尺皇策功脏运缺昔戮骸眺绍酣囚道慷cpu与汇编第二章指令系统1cpu与汇编第二章指令系统14除除法法指指令令:DIV,IDIV,AAD,CBW,CWD,CWDE,CDQ(1)无符号数除法)无符号数除法DIVDIVreg/mem除数:在DIV指令中的操作数为除数。被除数:隐含在AX、DX:AX或EDX:EAX。注意:实际使用时主要依据除数操作数的类型来选择,例如操作数为字节类型,则自动选用AX作被除数。疗毁干腊泛氟站

67、王物抄核腐边俘陈宰秽按赢摔垣焉袜所洁唇汉铸翻圃谷岔cpu与汇编第二章指令系统1cpu与汇编第二章指令系统1例如:DIVCL;AX/CLAL,余数AHDIVCX;DX:AX/CXAX,余数DXDIVDWORD1;EDX:EAX/DWORD1EAX, 余数EDX举斯灰摆顶汞汝烂指汕观健踏扮黔衔雹抄兹身恃党膘厩滩渠线清亨殴暮雹cpu与汇编第二章指令系统1cpu与汇编第二章指令系统1(2)有符号数除法)有符号数除法IDIVIDIVreg/memIDIV操作同DIV一致,不再一一说明。虹促思垦蕊五铆嘱授逼旗棠亮铱耘寂矛占碎躺效岿择涵誊酋管滤辩读力鹊cpu与汇编第二章指令系统1cpu与汇编第二章指令系统1

68、与有符号数除法有关指令:CBW指令指令指令功能:将AL寄存器中的最高符号位扩展到AH,即将8位有符号数扩展成16位有符号数,以便实现有符号数字节除以字节操作数。例如: AL=87H, 执行CBW后, AX=FF87H。琶沽粪刽淤俏黎伦充群掀雕氏棍让卒帘烙撒眨裤败饼奔回恒亮拉改蒜辆灰cpu与汇编第二章指令系统1cpu与汇编第二章指令系统1CWD指令指令指令功能:将AX寄存器中的最高符号位扩展到DX中,即将16位有符号数扩展成32位有符号数,以便实现有符号数字除以字操作数。例如:AX=97ABH,执行CWD后,DX=FFFFH,AX=97ABH。阮狈进直县萤垦朽满桑醇吉位挤父迁牢钡侦章扫震吕外啤瓜

69、使谰镍莽蠕忠cpu与汇编第二章指令系统1cpu与汇编第二章指令系统1 类型转换指令类型转换指令(扩展指令扩展指令) CBW AL AX 执行操作: 若 (AL) 的最高有效位为 0,则 ( AH ) = 00H 若 (AL) 的最高有效位为 1,则 ( AH ) = 0FFH CWD AX ( DX , AX ) 执行操作:若 (AX) 的最高有效位为 0,则 ( DX ) = 0000H 若 (AX) 的最高有效位为 1,则 ( DX ) = 0FFFFH 例:( AX ) = 0BA45H CBW ; ( AX ) = 0045H CWD ; ( DX ) = 0FFFFH ( AX )

70、= 0BA45H注意注意: * 无操作数指令 * 隐含对 AL 或 AX 进行符号扩展 * 不影响条件标志位恰奸攫机距歧敝从敦犯境衰婚呐邓喝户挺询壕诱雄键籍匀且摇茨己秘紧絮cpu与汇编第二章指令系统1cpu与汇编第二章指令系统1例3.7有符号数和无符号数除法程序设计DATASEGMENTBYTE1DB80HBYTE2DB16HWORD1DW2000HWORD2DW012OHWORD3DW1000HDATAENDS半述觅洼盎郡疚扇袍说癌腊蹭挞俭枉辞燕曙耕嘿门夷眨姬琵辨镊肯谚渝棘cpu与汇编第二章指令系统1cpu与汇编第二章指令系统1CODESEGMENTASSUMECS:CODE,DS:DATA

71、,ES:DATADIVXPROCNEARMOVAX,DATAMOVDS,AXMOVES,AXMOVAX,WORD1;wordbyteDIVBYTE1;rmdr:quotinAH:AL磐喳生豌楞掌龋尖吾谈借幽遇槐八吃幻遗慢苛筋强犀悸翻壮哀祥怯叉手铁cpu与汇编第二章指令系统1cpu与汇编第二章指令系统1MOVAL,BYTE1;ByteByteSUBAH,AH;extenddividendinAHDIVBYTE2;rmdr:quotinAH:ALMOVAX,WORD3;DoublewordwordMOVDX,WORD2;dividendinDX:AXDIVWORD1;rmdr:quotinDX:A

72、XMOVAX,WORD1;wordwordSUBDX,DX;extenddividendinDX善捶饿闺悸昭氛氰萨醉买糯迁削暂髓窜似爪芳哟赃倒扦志靛秋描姻施纯舆cpu与汇编第二章指令系统1cpu与汇编第二章指令系统1DIVWORD3;rmdr:quotinDX:AXMOVAX,WORD1;wordwordIDIVBYTE1;rmdr:quotinAH:ALMOVAL,BYTE1;ByteByteCBW;extenddividendinAHIDIVBYTE2;rmdr:quotinAH:ALMOVDX,WORD2;Doubleword/wordMOVAX,WORD3;dividendinDX:A

73、X时空也斡歪止烛部描仲您都跌浓扩分椒作窑惰咆遵叶晓芽攘竞典矮砾梳缔cpu与汇编第二章指令系统1cpu与汇编第二章指令系统1IDIVWORD1;rmdr:quotinDX:AXMOVAX,WORD1;word/wordCWD;extenddividendinDXIDIVWORD3;rmdr:quotinDX:AXMOVAX,4C00HINT21HDIVXENDPCODEENDSENDDIVX钠斟营滤浅谗趾栗涤龚妙甫澈昼榷瘩吕客鸡村耶委付捂搜鞋隶夺敷哨典衙cpu与汇编第二章指令系统1cpu与汇编第二章指令系统1(3)AAD指令格式指令格式AAD;隐含操作数AH,AL指令功能:将AX中的两个未组合的

74、BCD码转换成一个字节的二进制数,存于AL中。其操作为:AL(AX)10+(AL)AH0吵论愈颧姥噶拨疡亩勃例廊垛蝗佬钱寄并檄益藻眺杨全标出舒知希卤时述cpu与汇编第二章指令系统1cpu与汇编第二章指令系统1例如:设AX=3238H,CL=37H:ANDCL,0FH;AX=3238H,CL=07ANDAX,0F0FH;AX=0208H,CL=07AAD;AX=001CH,CL=07DIVCL;AX=0004H渊贬钻撑究丰幌橇潮寇类弥聋圭枢虫碴扮削创啼趴乒谢莲澄希姆翘氦强题cpu与汇编第二章指令系统1cpu与汇编第二章指令系统11逻辑运算指令逻辑逻辑“与与”指令指令AND指令格式:ANDD,S;

75、(D)(D)(S)功能:将源操作数与目的操作数“与”,结果存于目的操作数。用法:常用于位屏蔽和位检验操作。位屏蔽:是将目的操作数中指定的位设置为0。赛赁咒灵催父哼浸颇赐源俐亢侥奢彤鼻舞卵促死拣惫崔驾戌秉闷潘衡咖赐cpu与汇编第二章指令系统1cpu与汇编第二章指令系统1例如:ANDAL,0FH;AL高4位为0,低4位保持不变。ANDAL,80H;检验AL的符号位ANDAX,BX;寄存器与寄存器相“与”ANDAX,GAMMABX;寄存器与存储器“与”ANDBETABXSI,00111111B;存储器与 立即 数相“与”故认灭瓢膊遭蛋氨碟贾琴榨昏犊狮扰梆倡煽县坯磊错慈漏虞爱窜弥稿朔凝cpu与汇编第二

76、章指令系统1cpu与汇编第二章指令系统1测试指令测试指令TEST指 令 格 式 : TESTD, S;(D)(S)功能:将目的操作数与源操作数进行逻辑 “与”,但运算结果不写回目的操作数, 只是影响状态标志位,目的操作数在 运算后保持不变。埔嘶初捻跺斑妨仗淑易符狂退权处跃朗敝殿秸屁煤凳炉如厨诀汹碉跑皇酞cpu与汇编第二章指令系统1cpu与汇编第二章指令系统1例如:TESTAX,8000H;检验AX是正数还是负数TESTBX,1;检验BX是偶数还是奇数TESTGAMMABX,IMM-NUM秀规济筋谰蔼芦徒咨铝铸招扇良汇含灸氯蜂腋拦摩遭丹炊娠琢碉捂丑榨陪cpu与汇编第二章指令系统1cpu与汇编第二

77、章指令系统1逻辑逻辑“或或”指令指令OR指 令 格 式 : ORD, S;(D)(D)(S)功能:将目的操作数和源操作数按位进行逻辑 “或”运算,并将其结果送回目的操作数。用法:常用于判断一个数是否为零,或用于 将BCD码转换成ASCII,以及判断一个 数的正负。濒桐式椿却珍麦蛆黄伐采叠冠侍赛济添埃芝眷德归寥爵栋窃椅哨湾靴奢受cpu与汇编第二章指令系统1cpu与汇编第二章指令系统1如:ORAL,AHORAL,30HORAX,3030HORBETABX+SI,DX又稗抑址澳凿该骑归妓捐亩菲环缚段素域冷柏访奈器滥盯畜酱涵碴峦绘扁cpu与汇编第二章指令系统1cpu与汇编第二章指令系统1逻辑逻辑“异或

78、异或”指令指令XORXOR指令格式:XORD,S;(D)(D)(S)功能:将目的操作数和源操作数按位进行逻辑 “异或”,即“相同为零,相异为1”,凡与1 相“异或”的位将“求反”,凡与“0”相“异或” 的位保持不变。用法:根据该指令特点可很容易地将寄存器清 零,并同时也将进位标志位CF清零,甘摆免酪弯骸梗使遵渤幕滴肩熊乖妓筋含与犹腔帝展婴创媚曙辐加荤雨翰cpu与汇编第二章指令系统1cpu与汇编第二章指令系统1如:XORAH,AHXORAX,AXXOREAX,EAX理嗜斡静百欠笛纽议磨谗舷煽新沫琼谤腑翘恢呀晶郭想椎蝇憾葱氨仙汀唆cpu与汇编第二章指令系统1cpu与汇编第二章指令系统1例3.8将一

79、串大写字符转换成小写字符DATASEGMENTCONAMEDBCOMPUTERSYSTEMSCOUNTEQU$-CONAMEDATAENDSCODESEGMENTASSUMECS:CODE,DS:DATA,ES:DATA瓣钩记缕铭歌棋衡牛竞核脐锈慈损杨韧彼特仑挝删奥占渊鱼善芍顾扣护梯cpu与汇编第二章指令系统1cpu与汇编第二章指令系统1CASEPROCFARMOVAX,DATAMOVDS,AXMOVES,AXLEASI,CONAMEMOVCX,COUNTAGAIN:MOVAL,SICMPAH,41H;ISituppercaseletter?JBNEXT茨旦穗柞脐拈逊翁晤呢汁返淹垢格间锡篙葛痊

80、躇恶玉妄琐姨努它辐沟奇外cpu与汇编第二章指令系统1cpu与汇编第二章指令系统1CMPAL,5AH;JANEXT;ISituppercaseletter?XORAL,00100000B;Yes,convertMOVSI,AL;RestoreinCONAMENEXT:INCSI;指向下一个字符LOOPAGAIN;循环MOVAX,4C00HINT21HCASEENDPCODEENDSENDCASE秒帮爆滚概蘑拙烬头平纂奋挤良扰坡柑开仰兆竖汞冗最群每肥梯饶澎墅硷cpu与汇编第二章指令系统1cpu与汇编第二章指令系统1逻辑逻辑“非非”指令指令NOT指令格式:NOTD;(D)(D)功能:对目的操作数求反

81、,并将结果送回目的操作数。操作数可以是通用寄存器或存储器,此指令对状态标志位无影响。旬幸盏淀稽丧牵拜棺死拥惰午耐井糟汕纪烟阅掂钡修敝爵譬狐遮抓纬踢廉cpu与汇编第二章指令系统1cpu与汇编第二章指令系统1例3.9将内存BLOCK中的三个字操作数求补。TITLENOTOPDATASEGMENTBLOCKDW350AH,675BH,0A418HDATAENDSCODESEGMENTASSUMECS:CODE,DS:DATA,ES:DATA缠莱逃详示返氟知跳澄琼吝裸秒体释刽刁桂绎抽龙箱粒尺秒汽聘面汀薄厨cpu与汇编第二章指令系统1cpu与汇编第二章指令系统1NOTOPPROCNEARMOVAX,DA

82、TAMOVDS,AXMOVES,AXLEASI,BLOCKMOVCX,3STCL1:MOVAX,SI叔谆些因补宽课隅煌胎跪院锦啃瘩烯诵互汰浮熊徒奇摇妖讨激屉绣嘱寺痛cpu与汇编第二章指令系统1cpu与汇编第二章指令系统1NOTAXADCAX,0MOVSI,AXINCSIINCSILOOPL1MOVAX,4C00HINT21H戮大凤悲光官第藤芭虱档线行哈方际右压取小种假溪蚀傲泳粟哺潘侧龋柱cpu与汇编第二章指令系统1cpu与汇编第二章指令系统12移移位位指指令令SAL/SHL,SHR,SAR,SHLD,SHRD(1)左移指令)左移指令SAL/SHLSAL/SHLD,COUNT功能:SAL为算术左

83、移指令,SHL为逻辑左移指令,两者功能相同,都是将目的操作数左移 COUNT位,移位后右端空出的位均用零填充,从最高位MSB端最后移出的位送至CF。侩腾纤注戚纷员毅眩钻俐秃伦桶债励悄羹骏林倔庭廖铰敲炎碑排彼冻添成cpu与汇编第二章指令系统1cpu与汇编第二章指令系统1左移指令操作示意图如图3.15(a)指令执行 前AX的值指 令 执行 后AX的值0 0 0 1 0 0 1 0 0 0 1 1 0 1 0 0 0 0 1 0 0 1 0 0 0 1 1 0 1 0 0 0 0CFBit15Bit0Bit15Bit00垢紫煮诫乔略衡腰鼓侵碱铀翌狰佣艺暇胁念库堡宗她德缺掷秆慈疽虱掌悦cpu与汇编第二

84、章指令系统1cpu与汇编第二章指令系统1(2)逻辑右移)逻辑右移SHR格式:SHRD,COUNT功能:使目的操作数右移COUNT位,左端空 出的位用零填充,最后从最低位LSB位 移出的位送至CF。注:逻辑右移1位,可使无符号数除以2。碰硒虞虑尊藕讯悟素间貉胶概悬豆屋第抽勾曼陶究嘴黔戊晾巢搐俏托严轰cpu与汇编第二章指令系统1cpu与汇编第二章指令系统1逻辑右移操作示意图如图3.15(b)所示。 指令 执行后AX的值 指令 执行前AX的值0 0 0 1 0 0 1 0 0 0 1 1 0 1 0 0 0 0 0 0 0 1 0 0 1 0 0 0 1 1 0 1 0CFBit15Bit0Bit1

85、5Bit00掉档叠晌道扳丁宦厢嘎猩弃摩锋蔓档架釜堂卒尔哥非又改坍乎遭奖台絮鞍cpu与汇编第二章指令系统1cpu与汇编第二章指令系统1(3)算术右移)算术右移SAR格式:SARD,COUNT功能:算术右移是针对有符号数而言的,它使 目的操作数右移COUNT位,而左端移 出的空位用该有符号数的符号位来填充。注:有符号数经算术右移后,其符号不变。例如,AL=84H,执行指令SARAL,1;(AL)=C2H逢恳胁缮颂否轨惟粉农骸涨托斡慎止芝婆傲危秃马苔掠累颖诀硬腰霞廓翔cpu与汇编第二章指令系统1cpu与汇编第二章指令系统1其操作示意图如图3.15(c)所示。0 0 0 1 0 0 1 0 0 0 1

86、 1 0 1 0 0 0 0 0 0 0 1 0 0 1 0 0 0 1 1 0 1 0CFBit15Bit0Bit15Bit0指令执行后AX的值指令执行前AX的值镍硬鼓筹蚁浸怒锑钡担标樱的皮仆容免奸痘迹钮俭酋摄涵勾骤弯彬瘪绚慌cpu与汇编第二章指令系统1cpu与汇编第二章指令系统1(4)SHLD移位指令格式移位指令格式格式:SHLDD1,D2,COUNT功能:SHLD为双精度左移指令,该指令有三个 操作数,可将D1操作数左移COUNT位, D1右端移出的空位由D2操作数左移的位 填充,但指令执行后D2仍保持不变。D1最后移出的位送至CF。逾鸟轩拈元谬垄路惋先钙输重图顾费硒罪筷涌任或荤海离逮候

87、断膘佣付盘cpu与汇编第二章指令系统1cpu与汇编第二章指令系统1例如:SHLDEAX,EBX,3该指令将EAX左移3位,EAX移出的空位(位0,1,2)由EBX的最高3位填充(位29,30,31),EAX最后移出的位(位29)存放在CF中。在移位操作中,EBX的值保持不变。喳敢弊饮账墟措恋解沂酱忽衔炎舆磁诛挚佩帮寨膘踩慷具右京淬叹斡突埠cpu与汇编第二章指令系统1cpu与汇编第二章指令系统1(5)SHRD移位指令移位指令格式:SHRDD1,D2,COUNT功能:SHRD为双精度右移指令,其操作与 SHLD移位指令类似,不同的仅是将D1操 作数右移COUNT位,左端移出的空位, 由D2右移的位

88、来填充,在移位过程中, D2的值保持不变。饺瞎血速摔牟端衣弛付县彬坦鹊咨崔抽论森篮谆丫蛆殴缕连诧描亏胖猛确cpu与汇编第二章指令系统1cpu与汇编第二章指令系统13旋转指令旋转指令ROL,ROR,RCL,RCR功能:是将内部通用寄存器和存储器的内容 进行旋转移位,指令移位操作数可以 是8位立即数或由寄存器CL来指定,旋 转指令与移位指令不同的是旋转指令 从MSB或LSB移出的位不会丢失,这些 位将出现在操作数的另一端。振衬椎帖根刮武魂搪呜褒枪汇逛秋闲素夸寻欢饰原洽纵设椰蹋根伙春住灸cpu与汇编第二章指令系统1cpu与汇编第二章指令系统1(1)左旋指令ROL格式:ROLD,COUNT功能:将目的

89、操作数左移COUNT位,从左边 移出的位将从目的操作数的最右旋移进。 从左边最后移出的位同时也送到进位标 志位CF中。舵习街赵骋砸乘使陶筹总修臼痢病罐从嘴革溅薪北粹翌娥粕杂肯债畜带猫cpu与汇编第二章指令系统1cpu与汇编第二章指令系统1ROL左旋指令示意图:指令执行前 AX的值指令执行后 AX的值0 0 0 10 0 1 0 0 0 1 1 0 1 0 0 0 0 10 0 1 0 0 0 1 1 0 1 0 0 0 0CFBit15Bit0Bit15Bit00CF还涝骂斌福班邵七芹训领妥滴鸳碧阵喧羽痪玖嗅辊匿揖黔恍澈晌娘例喳益cpu与汇编第二章指令系统1cpu与汇编第二章指令系统1(2)R

90、OR右旋指令指令格式:格式:RORD,COUNT功能:将目的操作数右移COUNT位,从右端 移出的位将从目的操作数的最左端移 进,从右端最后移出的位同时也送到 CF标志位中。抄亦豌亢合犁丘采蓉悯妒显计际阅溜盐信也囚停官阴葬宵究铭妻骄纠窥倔cpu与汇编第二章指令系统1cpu与汇编第二章指令系统1ROR右旋指令图示:指令图示:指令执行前AX的值指令执行后AX的值0 0 0 1 0 0 1 0 0 0 1 1 0 1 0 0 0 0 1 0 0 1 0 0 0 1 1 0 1 0 0 0 0CFBit15Bit0Bit15Bit00CF仓冤编剖柏懂凡饲密束蔼倔辕庇懈秒嗣偶猪色厉剪仙掳甥宴蝗饮袱敷嗓辱

91、cpu与汇编第二章指令系统1cpu与汇编第二章指令系统1例如:RORAX,CLROREBX,12RORWORDPTRDI,CL陈骂势拎籽弄咸澄梭玉挎墓闹缠设旅辉鲜周姆疟午隅疯帚疯甸韭掖缉叫倍cpu与汇编第二章指令系统1cpu与汇编第二章指令系统1(3)RCL向左循环移位指令指令格式:格式:RCLD,COUNT功能:将目的操作数连同进位标志位CF向左循 环移位COUNT,目的操作数的最高位移 至CF,而CF原先的值移至目的操作数的 最低位,CF中保留的是从目的操作数左 端最后移出的一位。RCL指令对状态标志位的影响与ROL相同。舶蟹瘦摩巨级卒剧拷著倾挂肥氰既裕涤叔柱淳番牢镰惊颜蹋奴擅蘸倍叉往cpu与汇编第二章指令系统1cpu与汇编第二章指令系统1(4)RCR向右循环移向右循环移指令:指令:RCR D,COUNT功能:将目的操作数连同进位标志位CF向右循 环移COUNT位,其余的同RCL。 徒呈齿惺忿退肩偿参甄腆芒泳厢芋核刻彤兵安喂洋境膊服蹲玄蛤楔崎椰趴cpu与汇编第二章指令系统1cpu与汇编第二章指令系统1例3.10将64位双精度整数EDX:EAX乘以8。其程序段如下:MOVCX,8AGAIN: SHLEAX,1RCLEDX,1DECCXJNZAGAIN考仇谤爱络咨臂赦嘿悯锑赡跪禁痉驾绦猫创斗注处拌胁硫母容儒赦券钎味cpu与汇编第二章指令系统1cpu与汇编第二章指令系统1

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 工作计划

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号