《汇编语言第3章指令系统和寻址方式.ppt》由会员分享,可在线阅读,更多相关《汇编语言第3章指令系统和寻址方式.ppt(80页珍藏版)》请在三一办公上搜索。
1、IBM-PC汇编语言程序设计,邵遥肋茸绽封衔隶决违滨肛套校贪涉批酣个蚌脱东肤剐晦韧录逆拦碱炎诣汇编语言第3章 指令系统和寻址方式汇编语言第3章 指令系统和寻址方式,第3章 指令系统和寻址方式(Instruction system and Addressing mode),指令简介:操作码 操作数 1.操作码 2.操作数:无操作数,单操作数,双操作数,三操作数,淌额嘎兴玉夹瞳宽娇挺虐桓裂他浅伯势犁腿基驯勤住缀倚醚译赣饿裤笋意汇编语言第3章 指令系统和寻址方式汇编语言第3章 指令系统和寻址方式,3.1 寻址方式(Addressing mode),有效地址(EA):即上章的偏移地址 段超越 寻址方式
2、(一)与数据有关的寻址方式1.立即数寻址(Immediate addressing)例:mov AL,5(AL)=5用途:初始化,殴测烟或恤尸扯焕冤珐奎冈迂寨面恫烃沤瞎时丝抿大递田拯碴痴毖懈默喀汇编语言第3章 指令系统和寻址方式汇编语言第3章 指令系统和寻址方式,2.寄存器寻址(Register addressing)例:mov AL,DH(AL)=(DH)mov BX,SI(BX)=(SI)寄存器有:AX,BX,CX,DX,SP,BP,SI,DI AH,AL,BH,BL,CH,CL,DH,DL 用途:单个数据传送,屯扩她呸立困昧愧良凛胁跌渣汉疗收杖缔娄珍换钮荆炽踌卸舒涸轿蜂秃袱汇编语言第3章
3、 指令系统和寻址方式汇编语言第3章 指令系统和寻址方式,以下五种寻址方式均对内存进行的物理地址=段首地址x16+EAEA=基址(base)+变址(index)+偏移量(displacement)3.直接寻址方式(Direct addressing)EA=displacement注:默认段是数据段物理地址=(DS)*16+EA,途掳郡罪柴坎霹兴苔沧李找茶劈掉意蚤辅哄音践吹豆浚词云明迢绝摧芒捅汇编语言第3章 指令系统和寻址方式汇编语言第3章 指令系统和寻址方式,例:mov AL,1200H(DS)=1000H EA=1200H物理地址=DS*16+1200=11200H 若:(11200)=3AH
4、则,(AL)=3AH允许段超越。例:mov AL,ES:1200H用途:处理单个数据,邹洪湾俘繁和体倦狙意资羹步塘鹊拷幅固棕慌瑚缚煞奋凭狐顶酚没躺帮君汇编语言第3章 指令系统和寻址方式汇编语言第3章 指令系统和寻址方式,4.寄存器间接寻址方式(register indirect addressing)EA=基址(base)或变址(index)基址寄存器有:BX,BP变址寄存器有:SI,DI注:默认段是数据段和堆栈段(SI)物理地址=(DS)*16+(BX)(DI)=(SS)*16+(BP),吸魂啮戌柑力后筋川辖杖诞吴帚则咳贫培制缔囊吴痊悔阵鉴拨甭循表斋蚜汇编语言第3章 指令系统和寻址方式汇编语
5、言第3章 指令系统和寻址方式,例:mov AX,BX(DS)=1000H(BX)=1200H物理地址=DS*16+(BX)=DS*16+1200=11200H 若:(11200)=34H,(11201)=12H则,(AX)=1234H允许段超越。例:mov AL,ES:BX用途:处理成组数据(举例说明),尝模竭忆宅腥适袍缆危剖鞠烦杨究膛饲蓉雀缓柏左黑伺惹孔巾陷省循啸桔汇编语言第3章 指令系统和寻址方式汇编语言第3章 指令系统和寻址方式,5.寄存器相对寻址方式(register relative addressing)EA=基址(base)或变址(index)+偏移量(displacement)
6、基址寄存器有:BX,BP变址寄存器有:SI,DI注:默认段是数据段和堆栈段(SI)物理地址=(DS)*16+(BX)+displacement(DI)=(SS)*16+(BP)+displacement,狼透样鞍蚕胞律关乃耕债豺塞遮喇咙姑酿沂胚慷娘项范胃擅雅撕掘审捌西汇编语言第3章 指令系统和寻址方式汇编语言第3章 指令系统和寻址方式,例:mov AX,VARBX(DS)=1000H,(BX)=1200H,VAR=1000H物理地址=DS*16+(BX)+VAR=DS*16+1200+1000=12200H 若:(12200)=34H,(12201)=12H则,(AX)=1234H允许段超越。
7、例:mov AL,ES:VARBX用途:处理成组数据(举例说明),抉郸搁排藉揭狮企诱忿巧映敦箭佣祝诚搜英每喝御夸庸战邪吃柳著于抡墨汇编语言第3章 指令系统和寻址方式汇编语言第3章 指令系统和寻址方式,6.基址变址寻址方式(based indexed addressing)EA=基址(base)+变址(index)基址寄存器有:BX,BP变址寄存器有:SI,DI注:默认段是数据段和堆栈段 物理地址=(DS)*16+(BX)+(SI)(DI)=(SS)*16+(BP)+(SI)(DI),播酞耘苔栽沏傻搽香询抹雕矢摸羞省伦翔川寂抛禄旋森酗醇瀑傈择吝渝狗汇编语言第3章 指令系统和寻址方式汇编语言第3章
8、 指令系统和寻址方式,例:mov AX,BXDI(DS)=1000H,(BX)=1200H,(DI)=1000H物理地址=DS*16+(BX)+(DI)=DS*16+1200+1000=12200H 若:(12200)=34H,(12201)=12H则,(AX)=1234H允许段超越。例:mov AL,ES:BXDI用途:处理成组数据(举例说明),诱攻辆蒜刻萨锐贬让俘泼埋俄腋兽渺降拦拓宋登冤姿渐墟币鸥搜茨盂率辩汇编语言第3章 指令系统和寻址方式汇编语言第3章 指令系统和寻址方式,7.相对基址变址寻址方式(relative based indexed addressing)EA=基址(base)
9、+变址(index)+偏移量(displacement)基址寄存器有:BX,BP变址寄存器有:SI,DI注:默认段是数据段和堆栈段 物理地址=(DS)*16+(BX)+(SI)+displacement(DI)=(SS)*16+(BP)+(SI)+displacement(DI),猪乔麻眨抒询侣意蚂流赛邯鹏睹台便警蛋御钎校绎姥辩牟掇艾叠畔抑戎甲汇编语言第3章 指令系统和寻址方式汇编语言第3章 指令系统和寻址方式,例:mov AX,ARRAYBXDI(DS)=1000H,(BX)=1200H,(DI)=1000H,ARRAY=1000H物理地址=DS*16+(BX)+(DI)+ARRAY=DS*
10、16+1200+1000+1000=13200H 若:(13200)=34H,(13201)=12H则,(AX)=1234H允许段超越。例:mov AL,ES:ARRAYBXDI用途:处理成组数据(举例说明),水暇搞醒改醋词刷哑已悦烁爱膳常炼袒豆玩澎拒淋爸营橡偷天式劣绩橙敛汇编语言第3章 指令系统和寻址方式汇编语言第3章 指令系统和寻址方式,(二)与转移地址有关的寻址方式-寻找指令位置物理地址=CS*16+IP段内寻址:修改IP段间寻址:修改CS,IP1.段内直接寻址(intrasegment direct addressing)(IP)新=EA=(IP)旧+D8或16 分类:短跳转 D8 例
11、:JMP SHORT next近跳转 D16 例:JMP NEAR PTR AGAIN,蒸宇皇华姚祷驭故阂欠坏孽锐谐潦旺腹爽甩新戚睫誓颗获言殉渝奎干醛噬汇编语言第3章 指令系统和寻址方式汇编语言第3章 指令系统和寻址方式,2.段内间接寻址(intrasegment indirect addressing)(IP)新=EA=寄存器或存储单元的内容寄存器:所有寄存器寻址方式可用的寄存器存储单元:所有存储单元寻址方式均适用例:JMP SI(IP)=(SI)JMP WORD PTR VAR或简写JMP VAR(DS)=1000H,VAR=2000H 存储单元的物理地址=(DS)*16+VAR=1200
12、0H(12000H)=1234H 则,(IP)新=1234H,匠尺粳纬潭宿荫悍律宰缺础钧豌涯屯昨妓讳氨耻奄母已厅植法携敞记骏纠汇编语言第3章 指令系统和寻址方式汇编语言第3章 指令系统和寻址方式,3.段间直接寻址(intersegment direct addressing)(IP)新和(CS)新来源当前指令例:JMP FAR PTR NEXT,玫竖澎砧梨命拘毛炊最涝货幢镜蕾膝幌醇酋左背问秋凶遣集参赠臻崖伶筋汇编语言第3章 指令系统和寻址方式汇编语言第3章 指令系统和寻址方式,4.段间间接寻址(intersegment indirect addressing)(IP)新和(CS)新 来源存储单
13、元的内容存储单元:所有存储单元寻址方式均适用例:JMP DWORD PTR VAR(DS)=1000H,VAR=2000H 存储单元的物理地址=(DS)*16+VAR=12000H(12000H)=1234H,(12002H)=2000H 则,(IP)新=1234H(CS)新=2000H,丈笋砍懦恭训橡己娟啥惠阻票眷槽眉寅陌爹放诗札赦订伦综船沤留坏彦第汇编语言第3章 指令系统和寻址方式汇编语言第3章 指令系统和寻址方式,3.2 程序占用的空间和执行时间,窃撅疆瓷确票獭扼盎酵深峰莱坦墅器纸扩伎涂抡豺泼巧糖氛苦骤据拉礼陷汇编语言第3章 指令系统和寻址方式汇编语言第3章 指令系统和寻址方式,3.3
14、80X86的指令系统,一、数据传送指令1.通用数据传送指令MOV 传送(move)格式:MOV DST,SRC;B/W/DW操作:(DST)(SRC)MOV mem/reg1,mem/reg2 MOV reg/mem,data MOV segreg,mem/reg MOV mem/reg,segreg,溯啡权柒泞皑慰顶燃鸥牺沤捷锑在在锨饿栋衍倚蹦术抓旅默加逾歹雏倔削汇编语言第3章 指令系统和寻址方式汇编语言第3章 指令系统和寻址方式,*双操作数要求:除源操作数是立即数以外,两个操作数中必须有一个是寄存器。不允许向CS传送数据立即数不能向段寄存器传送数据不允许在两个段寄存器之间传送数据立即数不能
15、作目的操作数双操作数,类型要匹配,雌幻岛犹瞒抗织墒枢赣酬几盼虾瞅狐太还熔源忙逝帝旺恨坚矢芯偿堰纶控汇编语言第3章 指令系统和寻址方式汇编语言第3章 指令系统和寻址方式,1.指出下列指令源操作数的寻址方式:(1)MOV SI,10(2)MOV SI,DI+2 MOV SI,DI(4)MOV SI,10 MOV SI,BX(6)MOV SI,5BX+DIMOV SI,BP+DI 2.判断下列指令对错:(1)MOV SS,1000H(2)MOV DS,ES(3)MOV CS,AX(4)MOV 5,AL(5)MOV AX,BL(6)MOV BX,SI,饰韧褐壬灰砂敛舀谁摔侈烘贿雁赠但享榨并鼎庆徒霸砂舵
16、撂埠丁蛤焚王目汇编语言第3章 指令系统和寻址方式汇编语言第3章 指令系统和寻址方式,PUSH 入栈指令(push onto the stack)格式:PUSH SRC;W*单操作数:除立即数以外的其他寻址方式 push axPOP 出栈(pop from the stack)格式:POP DST;W*CS 不能作操作数 POP word ptr BXXCHG 交换指令 格式:XCHG OPR1,OPR2*不能用于段寄存器,立即数或存储单元之间,扇硼幽绚巍菠戴傣惋吧曝纪畸墩戏万狮弯丑臭泻赞烽副征攒塞唉处器富褂汇编语言第3章 指令系统和寻址方式汇编语言第3章 指令系统和寻址方式,1.下列寄存器组中
17、在段内寻址时可以提供偏移地址的是()A.AX,BX,CX,DX C.SP,IP,BP,DX B.BX,BP,SI,DI D.CS,DS,ES,SS2.8086/8088确定下一条执行指令物理地址的计算表达式是()A.(DS)16+EA B.(ES)16+EA C.(SS)16+EA D.(CS)16+EA 3.下列pop指令中错误的是()A.POP CS B.POP BETABX C.POP AX D.POP CX,顷总斟旱唁宁淤巾制永敢苫韭骤带蓝踏坠运环带嚎缩瓣狄赁繁膝典恢涡初汇编语言第3章 指令系统和寻址方式汇编语言第3章 指令系统和寻址方式,第3章 指令,2.累加器专用传送指令IN 输入
18、(input)长格式:(00HFFH)IN AL,PORT;B IN AX,PORT;W 短格式:(0000HFFFFH)IN AL,DX;B IN AX,DX;W,翰兢杜羊维冉兽谎锡闰吉轰册龋桨视澳俊腊坝偿椅戒克悉抖逝副赞姿响刨汇编语言第3章 指令系统和寻址方式汇编语言第3章 指令系统和寻址方式,OUT 输出(output)长格式:(00HFFH)OUT PORT,AL;B OUT PORT,AX;W 短格式:(0000HFFFFH)OUT DX,AL;B OUT DX,AX;W,哩患夯促吱喂归纠及辜八榆洞崇酚渭暮焙俩废灾褐塞寨晦囤聘渠忿郸访朗汇编语言第3章 指令系统和寻址方式汇编语言第3章
19、 指令系统和寻址方式,例:某接口的命令寄存器(port=126)的D7位控制成组数据传送。发送成组传送命令。MOV DX,126H IN AL,DX OR AL,80H OUT DX,AL,患获圈友窜富壕峭讲韶描币葫荡朵泌衙逼劝定慎圃中项殿棺有烙硅揉遭九汇编语言第3章 指令系统和寻址方式汇编语言第3章 指令系统和寻址方式,XLAT 换码指令(translate)*专用AL,BX 表长不超过256例:LEA BX,TABLE;(BX)=0040H MOV AL,3 XLAT 指令执行后(AL)=33H,诚锻寥抚口沫超缄港殴太变枫法函雹遣蜘勿枝瞒仗蹲宰蝴先赣贮了诲弓戏汇编语言第3章 指令系统和寻址
20、方式汇编语言第3章 指令系统和寻址方式,3.地址传送指令LEA 有效地址送寄存器(load effective address)格是:LEA REG,SRC*REG 不能用段寄存器(以下两个指令均是)例:LEA BX,LIST MOV BX,LIST LEA AX,BX,纪嘻酮哟足旧方俺壶乱警透胜碴肢颊淀涵伏啦嘻褥影絮声瞎怎舶托会鲍后汇编语言第3章 指令系统和寻址方式汇编语言第3章 指令系统和寻址方式,AH,FLAGS,LDS REG,SRC 指针送寄存器和DS(load DS with pointer)LES REG,SRC 指针送寄存器和ES(load ES with pointer)例:
21、LDS BX,VAR以上指令均不影响标志位4.标志寄存器传送指令SAHF AH送标志寄存器(store AH into flags)LAHF 标志送AH(load AH with flags),AH,FLAGS,另荒斌谆暮纹砒拘贡盯激筛桐棱隋遁替晶胰宴障诬掂伸惦埋指破顶甥媒汝汇编语言第3章 指令系统和寻址方式汇编语言第3章 指令系统和寻址方式,PUSHF push the flags POPF pop the flags 例:令flags中的TF=1 PUSHF POP AX OR AX,0100H PUSH AX POPF,喘穗平身狡诧虎揣沦启患颂符宇萧狠尹宁嘴诡盾胖峰疮兆捏湾念露融理笔汇编
22、语言第3章 指令系统和寻址方式汇编语言第3章 指令系统和寻址方式,5.类型转换 CBW 字节字(convert byte to word)AL AXCWD 字双字(convert word to doubleword)(AX)(DX,AX)*以上指令除SAHF和POPF其他指令均不影响标志位,m1010100,mmmmmmmmm1010100,慈志矛弛炬洼潍惶益映科援骡喷观懒签凌戊薯敏宁醉怖之芜燥插捻鸯评剧汇编语言第3章 指令系统和寻址方式汇编语言第3章 指令系统和寻址方式,第4章 伪指令,一、程序开始和结束 开始:NAME 模块名或 title 结束:END 标号,浚挨炊思萎旧脚檄度输滓接涵
23、满枣赠力盅谢鳃兜淹释晕柬少觉捻颂吸捂浚汇编语言第3章 指令系统和寻址方式汇编语言第3章 指令系统和寻址方式,二、段的定义格式:段名 segment.段名 endsASSUME 段名与段寄存器的关系 格式:ASSUME 段寄存器:段名,段寄存器:段名.取消段与段寄存器的关系 ASSUME NOTHING或ASSUME 段寄存器:nothing,段寄存器:nothing.4.给段寄存器赋值,干缀梁剪香脐恬屿更瑟淳窃女新妮啡秧憾蜜菠逆休芥答屈坞春增焉图蛮警汇编语言第3章 指令系统和寻址方式汇编语言第3章 指令系统和寻址方式,三、数据定义与存储单元分配格式:变量名 操作码 操作数,操作数,操作码:DB
24、,DW,DD,DQ,DT操作数:可以是常数,表达式或地址例:VAR1 DW 1234H,5678H VAR2 DB 12*4+5 VAR3 DW VAR1 VAR4 DD VAR1,漠睁绒假再敲您鸽秉显悠颊岳骏予侵巨党铣棍石倚擞矿国和额韩心肮汗贪汇编语言第3章 指令系统和寻址方式汇编语言第3章 指令系统和寻址方式,2.是字符串 例:STR1 DB A,B STR2 DW AB STR3 DB ABCDEF3.是空单元?例:array dw?,?4.复制操作符 DUP 格式:重复次数 dup(内容)例:DW 100 DUP(?)DW 10 DUP(1,2,3 DUP(4,5),6)允许嵌套,埃醉
25、小嘴万渔彭颐招养墨涝俊咳俘势零眠庞驳智徒昭恰能艰陵属人马勺淑汇编语言第3章 指令系统和寻址方式汇编语言第3章 指令系统和寻址方式,5.操作数类型匹配 例:VAR1 DB 12H,34H VAR2 DW 5678H MOV AX,VAR1+1(错)MOV AL,VAR2+1(错)MOV AX,WORD PTR VAR1+1(AX)=7834H MOV AL,BYTE PTR VAR2+1(AL)=56H,赶碱即衅纶砖惊若烂哉术洲辟暴撤敲锡呈歌思绪碱兄囊炎亢湿尘泡箱跺酱汇编语言第3章 指令系统和寻址方式汇编语言第3章 指令系统和寻址方式,将数据37H定义为字节变量X1的是();将其定义为字变量X2
26、的是()。A.X1 DB 37 B.X2 DB 37 C.X1 DW 37H D.X2 DW 37H E.X1 DB 37H F.X2 DB 37H2.若要求不产生汇编错误,则字符串“ABC”只能出现在伪指令()中。A.DB B.DW C.DD D.DQ3.用一条指令实现(AX)(BX)+(SI)的方法是()A.XCHG BX,BXSI B.MOV AX,BXSI C.MOV AX,BX+SI D.LEA AX,BXSI,囤瘤徊冶霸种感歧毒忱闽屠窒娥菩儿瓢苛豺霹枝评棚兼佛内龋痈荧针阿刃汇编语言第3章 指令系统和寻址方式汇编语言第3章 指令系统和寻址方式,二、算术指令1.加法指令ADD 加法(a
27、dd)格式:ADD DST,SRC;B/W(DST)(SRC)+(DST)ADC 带进位加法(add with carry)格式:ADC DST,SRC;B/W(DST)(SRC)+(DST)+CF*ADD,ADC影响所有条件标志位CF,OF的表示含义,狡编恃衰敞滔喻囤纱烯溢羚便胡竹拱蔫守心噬裸秋嫡沿识堵呕又旨墅烘扯汇编语言第3章 指令系统和寻址方式汇编语言第3章 指令系统和寻址方式,0255-128127 二进制 看作无符号 看作有符号(1)0000 0100 4+4+0000 1011+11+(+11)0000 1111 15 15 CF=0 OF=0(2)0000 0111 7+7+11
28、11 1011+251+(-5)10000 0010 258+2 CF=1 OF=0(3)0000 1001 9+9+0111 1100+124+(+124)1000 0101 133+133 CF=0 OF=1(-123)(4)1000 0111 135(-121)+1111 0101+245+(-11)10111 1100 380-132 CF=1(124)OF=1(124)结论:CF用来表示无符号溢出;OF用来表示有符号溢出,扶蓬去盈讲茧菜钱烁言茸还校曙掳懂君皱分诬圾焊茬犹东锣笼港苫爸咖瘫汇编语言第3章 指令系统和寻址方式汇编语言第3章 指令系统和寻址方式,例:双字加(DX,AX)+(B
29、X,CX)(DX,AX)=0001804FH(BX,CX)=0002D123H ADD AX,CX ADC DX,BX 1000 0000 0100 1111 0001H+1101 0001 0010 0011 0002H 10101 0001 0111 0010+CF SF=0,OF=1,CF=1,ZF=0 4H SF=0,OF=0,CF=0,ZF=0,鞍扩抿脂玫横激甫挡肆讼四温出瞥沟龚辊届缀盗范陀毁雏脸苛卵陇江违羌汇编语言第3章 指令系统和寻址方式汇编语言第3章 指令系统和寻址方式,INC 加1指令(increment)格式:INC OPR;B/W(OPR)(OPR)+1*该指令除CF标志
30、位外,影响其他所有标志位 2.减法指令SUB 减法(subtract)格式:SUB DST,SRC;B/W(DST)(DST)-(SRC),言赚赫泄琶莎坟韧疫诲梭煞药裳豌朵攘自倾姜刘邪慑磕时池谅披早喊栈棚汇编语言第3章 指令系统和寻址方式汇编语言第3章 指令系统和寻址方式,SBB 带借位减法(subtract with borrow)格式:SBB DST,SRC;B/W(DST)(DST)-(SRC)-CFSub,sbb影响所有条件标志位DEC 减1指令(decrement)格式:DEC OPR;B/W(OPR)(OPR)-1*该指令除CF标志位外,影响其他所有标志位NEG 求补指令 格式:N
31、EG OPR;B/W(OPR)0-(OPR),证路薪屠钙嘎继实蚕沿违洋茹良民莫熙横肠祥躬座惮羹揩郴庚坯钢嫂疑衣汇编语言第3章 指令系统和寻址方式汇编语言第3章 指令系统和寻址方式,CMP 比较(compare)格式:CMP OPR1,OPR2;B/W(OPR1)-(OPR2)neg,cmp影响所有条件标志位,营乔更叠甩具拆拖蒙悦隙雨玖眯零屿管触澎锨吱前沈颐循鞘南寝疙瘪蜜讫汇编语言第3章 指令系统和寻址方式汇编语言第3章 指令系统和寻址方式,例:双字减(DX,AX)-(BX,CX)(DX,AX)=0005404FH(BX,CX)=00029123H SUB AX,CX SBB DX,BX 101
32、00 0000 0100 1111 0005H-1001 0001 0010 0011 0002H 1010 1111 0010 1100-CF SF=1,OF=1,CF=1,ZF=0 2H SF=0,OF=0,CF=0,ZF=0,对朗袜轴裳库叔缎毛式此荤彼唁矽粤咆皑氯砂鄂玄臭跋室九止毅恨炕迅遭汇编语言第3章 指令系统和寻址方式汇编语言第3章 指令系统和寻址方式,例:编程 X-Y+Z-80W,其中X,Y,Z,W 均为双字存于数据段 DATA SEGMENT X DW 34H,12H Y DW 78H,56H Z DW 11H,77H W DW 2 DUP(?)DATA ENDS CODE SE
33、GMENT ASSUME CS:CODE,DS:DATA MOV AX,DATA MOV DS,AX MOV AX,X SUB AX,Y MOV DX,X+2 SBB DX,Y+2;(DX,AX)X-Y ADD AX,Z ADC DX,Z+2;(DX,AX)X-Y+Z SUB AX,80 SBB DX,0;(DX,AX)X-Y+Z-80 MOV W,AX MOV W+2,DX MOV AH,4CH INT 21H CODE ENDS END,烦乖淤列峭匣渗郸柜响捻涂捉款攘酱圭壶列财侠凿羽洛位菲赂赡脉浦岗臃汇编语言第3章 指令系统和寻址方式汇编语言第3章 指令系统和寻址方式,3.乘法指令MUL
34、无符号乘(unsigned multiple)格式:MUL SRC;B/W(AX)(AL)*(SRC)B(DX,AX)(AX)*(SRC)W IMUL 带符号乘(signed multiple)格式:IMUL SRC;B/W(AX)(AL)*(SRC)B(DX,AX)(AX)*(SRC)W*只影响of和cf,其他标志位无定义,去鼎抬波眯荡始拾亮哺埔亢碳须崩鉴转喀贴呜录铀颠阐岸严愤胆术缴汗伯汇编语言第3章 指令系统和寻址方式汇编语言第3章 指令系统和寻址方式,4.除法指令DIV 无符号除(unsigned divide)格式:DIV SRC;B/W(AL)(AX)/(SRC)B的商(AH)(AX
35、)/(SRC)B的余数(AX)(DX,AX)/(SRC)W的商(DX)(DX,AX)/(SRC)W的余数 IDIV 带符号除(signed divide)格式:IDIV SRC;B/W(AL)(AX)/(SRC)B的商(AH)(AX)/(SRC)B的余数(AX)(DX,AX)/(SRC)W的商(DX)(DX,AX)/(SRC)W的余数*对所有标志位无定义,余数符号与被除数相同,底斌蚀孺吓氨英镰亦部儿妄呆乱障凡玲墙凶舱适醛雇檬率桃胖吵姚侮桐薪汇编语言第3章 指令系统和寻址方式汇编语言第3章 指令系统和寻址方式,例:编程(W-(X*Y-Z+40)/X,其中W,X,Y,Z为带符号字数据 MOV AX
36、,X IMUL Y;(DX,AX)X*Y MOV CX,DX MOV BX,AX;(CX,BX)X*Y MOV AX,Z CWD;(DX,AX)Z(32位)SUB BX,AX SBB CX,DX;(CX,BX)X*Y-Z ADD BX,40 ADC CX,0;(CX,BX)X*Y-Z+40 MOV AX,W CWD;(DX,AX)W(32位)SUB AX,BX SBB DX,CX;(DX,AX)W-(X*Y-Z+40)IDIV X,奉痛镰郊妊输捷蛙溃蚕线神饶骆谢兄山尤秃袄雌裕月掖辑锯本囊敷圈素昧汇编语言第3章 指令系统和寻址方式汇编语言第3章 指令系统和寻址方式,5.十进制调整指令 概念:压缩
37、BCD码(packed BCD format)非压缩BCD码(unpacked BCD format)调整原理:AF之间的数据 最高位有进位 原值+(-)6进行调整(1)压缩BCD码调整指令DAA 加法调整指令(decimal adjust after addition)操作:先做加法,和放在AL;对AL调整后把结果放 回AL。,拴长途赢卞颗污辗姆肋袁趴夏跪竖梢灾筋活隆沟私斋沃章攀额林歧姑常猫汇编语言第3章 指令系统和寻址方式汇编语言第3章 指令系统和寻址方式,例:(BCD1)+(BCD2)=(BCD3)MOV AL,BCD1 ADD AL,BCD2 DAA MOV BCD3,ALDAS 减法
38、调整指令(decimal adjust after substraction)操作:先做减法,差放在AL;对AL调整后把结果放 回AL。*以上两个指令除对OF无定义以外,影响所有其他标志位(2)非压缩BCD码调整指令AAA 加法调整指令(ASCII adjust after addition)操作:先做加法,和放在AL;对AL调整后把结果放 回AL。AAS 减法调整指令(ASCII adjust after substraction)操作:先做减法,差放在AL;对AL调整后把结果放 回AL。*以上两个指令只对AF和CF有影响,绸貌滑轴锨棱练酷冗战莱京佃河签缘唾抚韶混筐疏垮淳菊吻巢属哪毖疑翅汇编
39、语言第3章 指令系统和寻址方式汇编语言第3章 指令系统和寻址方式,例:MOV AH,0 MOV AL,8 ADD AL,2 AAA;(AX)=0100HAAM 乘法调整指令(ASCII adjust after multiplication)操作:先做乘法,积放在AL;对AL调整后把结果放回AX。调整过程:AL/10,商放在AH中,余数放在AL中。要求:乘之前,BCD码高四位清零例:VAR DB 05,06 MOV BL,VAR MOV AL,VAR+1 MUL BL AAM,么逐翱雹凯哉咆饲甥筏夹翟绽乒畦拯吸翰魏唬溺柄华决僳吁功君橙葬侮论汇编语言第3章 指令系统和寻址方式汇编语言第3章 指令
40、系统和寻址方式,AAD 除法调整指令(ASCII adjust after division)操作:先调整,后做除法。调整过程:(AL)10*(AH)+(AL),AH0。例:MOV AX,0307H AAD;(AX)=0025H MOV BL,5 DIV BL*以上两个指令,对CF、OF和AF均无定义,辐兄夹拭拾胖冒侯综区鹰外燃戳举烘黄瘟魂潜中龚烹啮丢酞赣铜帆证烤哀汇编语言第3章 指令系统和寻址方式汇编语言第3章 指令系统和寻址方式,1.执行下面指令序列后,结果是()Mov al,82h cbw A.(AX)=0FF82H B.(AX)=8082H C.(AX)=0082H C.(AX)=0F
41、82H2.下列指令中错误的是()A.ADD BX,A B.MUL 24 C.IN AL,DX D.SUB AX,05H3.下列4条指令MUL BX DIV BLIN AX,20H OUT 21H,AL中,有()条指令需要使用DX寄存器。A.1 B.2 C.3 D.4,恳寇鬼搬舟禄喳湾边票尼惨戍殉兄结蝗酝服樟丸纳畜掣堤僻嚼雁吗缀组遗汇编语言第3章 指令系统和寻址方式汇编语言第3章 指令系统和寻址方式,三、逻辑指令1.逻辑运算指令(Boolean and Comparison Instructions)AND 逻辑与(and)格式:AND DST,SRC;B/W操作:(DST)(DST)(SRC)
42、用于:屏蔽某些位OR 逻辑或(or)格式:OR DST,SRC;B/W操作:(DST)(DST)(SRC)用于:某些位置1或数据组合,与花亏懦财帜修俄铣饭影喷受侗颜线冒峰娜姆蒲表锹荚寨钩电跺河黎瘟鞠汇编语言第3章 指令系统和寻址方式汇编语言第3章 指令系统和寻址方式,XOR 逻辑异或(xor)格式:XOR DST,SRC;B/W操作:(DST)(DST)(SRC)用于:某些位取反;初始化寄存器TEST 测试(test)格式:TEST OPR1,OPR2;B/W操作:(OPR1)(OPR2)用于:用于条件转移的判定条件*以上所有指令,除对AF无定义外,影响所有标志位,且CF=OF=0NOT OP
43、R 非 操作:(OPR)(OPR)*该指令不影响标志位,燃舆率济所嗣翠毒假灌甲喷咨曼扮玫对芳棉承洋牟察仍惊涟瘁罚苇省掷进汇编语言第3章 指令系统和寻址方式汇编语言第3章 指令系统和寻址方式,例:屏蔽AL的0、1两位 AND AL,0FCH例:置AL的D5位为1 OR AL,20H 例:使AL的0、1位变反 XOR AL,3例:测试某些位是0是1 TEST AL,1 JZ EVEN,*AND 1 1 1 1 1 1 0 0*0 0,*OR 0 0 1 0 0 0 0 0*1*,*XOR 0 0 0 0 0 0 1 1*,葡捧兜奥氏嘘蹲期馅呀聚笑哈山贫牙点俞雹坤丈弯捅序赃遮晃淫送拾卿鲜汇编语言第3
44、章 指令系统和寻址方式汇编语言第3章 指令系统和寻址方式,2.移位指令(shift and rotate Instructions)SHL 逻辑左移(shift logical left)格式:SHL OPR,CNT;B/W 0SHR 逻辑右移(shift logical right)格式:SHR OPR,CNT;B/W 0SAL 算术左移(shift arithmetic left)格式:SAL OPR,CNT;B/W(同SHL)SAR 算术右移(shift arithmetic right)格式:SAR OPR,CNT;B/W,CF,CF,CF,峦钢捏燕腻咽猜瞬养趋季刺颈帕专叛抛套钎靶洪膳
45、益智廖钉蜕莎跨仿较松汇编语言第3章 指令系统和寻址方式汇编语言第3章 指令系统和寻址方式,*以上四个指令,除AF无定义,影响所有标志位例:编程实现Z=X*10分析:X*10=X*23+X*2 DATA SEGMENT X DW 30 Z DW?DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START:MOV AX,DATA MOV DS,AX MOV AX,X SHL AX,1 MOV BX,AX;BX=AX=X*2 MOV CL,2 SHL BX,CL;BX=X*8 ADD AX,BX MOV Z,AX MOV AH,4CH INT 21H CO
46、DE ENDS END START,肪晕瑟褥冤视输溶脯酉招溪种革堰堕车冈淹瘟勇递溪眠抵档浅尼澎浓予址汇编语言第3章 指令系统和寻址方式汇编语言第3章 指令系统和寻址方式,ROL OPR,CNT 循环左移(rotate left)ROR OPR,CNT 循环右移(rotate right)RCL OPR,CNT 带进位循环左移(rotate left through carry)RCR OPR,CNT(带进位循环右移 rotate right through carry)*以上四个指令,除CF和OF外,不影响其他标志位,阵绿摩湘驹戎井捡吃嘶霹肤萄挨这卢旷条散定纹姚区寂绵卓侧烃陶威辫羞汇编语言第3
47、章 指令系统和寻址方式汇编语言第3章 指令系统和寻址方式,指出下列指令中哪些是非法的,并说明原因MOV SS,2000H 2.PUSH CSXCHG AL,100 4.SHL AH,4IN AL,21H OUT 300H,AXOR AX,CS 8.SUB SI,BPCMP 20BX,VARSIMUL 100IDV BXLEA VAR,AX,婚滋惫匹痛伶奋剃炎猜肮禁谴翱拜决荧单于蛤匝江莹棚党燎涡郡沥语憾暴汇编语言第3章 指令系统和寻址方式汇编语言第3章 指令系统和寻址方式,四、串操作指令1.与REP配合工作的 MOVS/STOS/LODS REP 重复(repeat)格式:REP MOVS/ST
48、OS/LODS 操作:(1)如(CX)=0则退出REP,否则转(2)(2)(CX)(CX)-1(3)执行MOVS/STOS/LODS(4)重复(1)(3),侍仕蓑脐冯绝舀讥烽栗嫉陛漾自焦碌山埠穆罚串佬殆操帝阻剪瞪立儒引柳汇编语言第3章 指令系统和寻址方式汇编语言第3章 指令系统和寻址方式,MOVS 串传送指令(move string)格式:MOVS DST,SRC MOVSB(字节)MOVSW(字)操作:(1)(DI)(SI)(2)字节操作:(SI)(SI)1,(DI)(DI)1 字操作:(SI)(SI)2,(DI)(DI)2 方向标志DF=0时用+,DF=1时用-。DF=0 DF=1,(SI
49、),低地址,高地址,数据段,附加段,(SI),(DI),(DI),疆恢哎念悄习嫌孽悠龄晦澡盾研吞冬讼饵尚签疮根滁婶娩盐佩枢褂颗浮抄汇编语言第3章 指令系统和寻址方式汇编语言第3章 指令系统和寻址方式,执行REP MOVS之前,应先做好:(1)源串首地址(末地址)SI(2)目的串首地址(末地址)DI(3)串长度 CX(4)建立方向标志(CLD使DF=0,STD使DF=1)例:datarea segment mess1 db personal_computerdatarea endsextra segment mess2 db 17 dup(?)extra endscode segment lea
50、 di,mess2 lea si,mess1 mov cx,17 cld rep movsb code ends,lea si,mess1+16 lea di,mess2+16 mov cx,17 std rep movsb,膏陆吭耗辛痊聋食做阿揉汽盐瞳床营波颓睦涅滤蚀狄购页栏拽挠囱迈协痕汇编语言第3章 指令系统和寻址方式汇编语言第3章 指令系统和寻址方式,STOS 存入串指令(store into string)格式:STOS DST STOSB(字节)STOSW(字)操作:字节操作:(DI)(AL),(DI)(DI)1 字操作:(DI)(AX),(DI)(DI)2例:把附加段中的5个字节缓