




已阅读5页,还剩36页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1,算术运算(Arithmetic)指令(1),ADD (Addition) 加法 (dest)(dest)+(src) ADD dest,src; 8位/16位操作数, 影响FLAGS ADD AX,BX; ADD CL,10H;ADD SP,2; ADD 2000H, AL; ADD WORD PTRBX, 20 例 AL=7EH(01111110B) AH=5BH(01011011B); ADD AL,AH AL=D9H(11011001B) SF=1,CF=0 ZF=0;AF=1;PF(EVEN)=0;OF=1 ; CF=1 无符号数进位(256/65536) OF=1 有符号数加溢出(-128127/-3276832767),2,算术运算(Arithmetic)指令(2),ADC (ADD with Carry) (dest)(dest)+(src)+(CF) 例:MOV BX, OFFSET FIRST; 多位数连加: LH MOV SI,OFFSET SECOND MOV AX, SI ADD BX, AX MOV AX, SI+2 ADC BX+2,AX;类似P77例 四字节LH逐个ADC,INC (Increment by 1) (dest)(dest)+1 加一操作 INC AX; INC DL; INC WORD PTR ES:2000H INC BYTE PTRBX; INC WORD PTR CS:DI+20,?问题1:运算符 专用指令:目标操作数加1,?问题2:如何在二进制运算基础上实现十进制BCD运算指令,3,算术运算(Arithmetic)指令(3),AAA*(ASCII adjust for Addition) 非压缩BCD加法调整 (单字节)只对Unpacked BCD (00-09H)有意义; 隐含为:AL,AH(AH:0008,AL:0009) 等效:IF(AL) (AH=1,AL=5) 连加?,打*指令一般了解,4,算术运算(Arithmetic)指令(4),DAA*(Decimal adjust for Addition) 压缩BCD加法调整 (单字节)只对Packed BCD (00-99H) 有意义; 等效:IF(AL)(CF=1=AF , AL=27H, 可连加),打*指令一般了解,5,算术运算(Arithmetic)指令(5),减法 乘法 除法 SUB/SBB/DEC/ MUL/AAM DIV/AAD AAS/DAS*(调整) IMUL(有符号乘) IDIV (有符号除) 减法:CF=1 借位 SUB AL,CH; SBB AX,BX; SUB BYTE PTR2000H, 20 SBB AX, BP+1000 DEC SI; DEC WORD PTR 2000H DEC BYTE PTR SI;,打*指令一般了解,6,算术运算(Arithmetic)指令(6),NEG (Negate) 8位/16位求补(改变符号)绝对值不变 NEG dest; (dest)0-(dest) 改F 例:NEG AL; NEG BX; NEG BYTE PTR CS:2000H 例: LEA SI,AREA1 LEA DI,AREA2 MOV CX,100 CHECK: MOV AL,SI OR AL,AL JNS NEXT NEG AL NEXT: DI,AL INC SI INC DI DEC CX JNZ CHECK,7,算术运算(Arithmetic)指令(6),CMP (Compare) (dest)-(src) 改F(CSOF) 例: CMP AL,CH; CMP AX,BX; CMP BYTE PTR2000H, 20 JC NEXT ; 利用FLAGS结果,无符号数比较 JG NEXT ; 有符号数比较: 满足 SF OF =0 时 大于,(1)两个无符号数比较 用CF CF=0 无借位 CF=1 有借位 (2)两个有符号数比较 用SF OF=0: SF=0 为正数 SF=1 为负数 OF=1: SF=1 为正数 SF=0 为负数,8,比较两数大小 LEA BX,DATA MOV AL,BX INC BX CMP AL,BX JNC DONE MOV AL,BX DONE: MOV MAX,AL,9,算术运算(Arithmetic)指令(7),16位乘法 MUL CX; MUL WORD PTR BX 默认AX*OPRD 积= DX(高16位)|AX(低16位) 8位乘法 MUL CL; MUL BYTE PTR BX+1 默认AL*OPRD 积= AX 16位除法 DIV CX; DIV WORD PTR BX 默认被除数DX(高16位)|AX(低16位) /OPRD(16位) 结果 DX=余数 AX=商 8位除法 DIV CL; DIV BYTE PTR BX+1 默认AX/OPRD(字节) 结果 AH=余数 AL=商,注意: 除0/溢出 (字节除:商255 OR 字:商65535)除零中断,10,算术运算(Arithmetic)指令(八),IMUL/IDIV 有符号数乘/除法 CBW/CWD 符号扩展 AAM* (ASCII adjust for Multiply) AL(100) 转换成Unpacked BCD (00-09H)到AX 等效:AH(AL)/10; (商); (AL)(AL)%10 (余数)SF,ZF,PF 单字节! AAD*( ASCII adjust for Divide):UPKed-BCD AX: AL=AH*10+AL;AH=0 单字节! (AX HEX) 注意:AAD-DIV(B)-AAM,打*指令一般了解,11,逻辑运算与移位(Logical & shifting),逻 辑 运 算 AND dest,src; AND AX, BX; AND CL,08H OR dest, src; OR AL,55HH; OR WORD PTR BX, DH XOR dest, src (logical Exclsive or ) XOR AX,AX; XOR CL, BX NOT dest ;B:dest=255-dest; W:dest=65535-dest NOT AL; NOT WORD PTR BX NOT BYTE PTR ES: 2000H,12,逻辑运算与移位(Logical & shifting),逻 辑 运 算 . 8086/8088无直接位操作: 如 SETB/CLRB/JB/JNB) 置位(1)OR AL, 80H ;BIT7=1 OR CL, 04H 复位(0)AND AL, 7FH ;BIT7=0 TEST dest,src 逻辑与测试 TEST AL,80H; TEST AX,0FFFFH;ZF= AND AL,80H; AND AX,0FFFFH .TEST与AND指令 的差别. 位判别,13,逻辑移位( Logical shifting) SHL/SAL (SHift logical Left/Shift Arithmetic Left) 1位/CL位 相当于无符号数*2 SHL/SAL dest,1 ; SHL AL,1; SHL CX,1 SHL/SAL dest,CL SHL WORD PTRBX,CL CF dest(MSB LSB) 0 移一次 当 MSBCF则OF=1,逻辑运算与移位(Logical & shifting),14,逻辑移位( Logical shifting) SHR(Shift logical right) /2 SHR dest, 1(CL) 0dest(MSBLSB)CF 当只移动1位,新的最高位和次高位不同时,OF=1 超过1位时,OF不定。,逻辑运算与移位(Logical & shifting),FACTOR*10 MOV AX,FACTOR SHL AX,1 MOV BX,AX SHL AX,1 SHL AX,1 ADD AX,BX,15,算术移位(Arithmetic Shifting) SAR(Shift Arithmetic right) 带符号/2 SAR dest, 1; SAR dest,CL MSBdest(MSBLSB)CF MOV AL, 10001000B; SAR AL,1 ;10001000B=(88H= -78H) AL=11000100B(C4H=-60=-3CH) SAR AL,11111111B; (0FFH=-1),逻辑运算与移位(Logical & shifting),16,循环移位指令(Rotate Shifting) ROL(Rotate left) ROL dest 1/CL AL=10001000B ROL AL, 1 AL= ROR(Rotate right) ROR dest 1/CL ROR WORD PTRBX, CL 8位或16位操作数移位/循环,逻辑运算与移位(Logical & shifting),00010001B CF=1,17,循环移位指令(Rotate Shifting) RCL(Rotate Through Carry Flag left) RCL dest 1/CL RCR(Rotate Through Carry Flag right) RCR dest 1/CL AL=84H 48H (高低四位交换) AL=10001000B00010001B (高低 顺序交换),逻辑运算与移位(Logical & shifting),C F,Dmax D1 D0,18,例2-3 将ASCII码转换成BCD码,mov ax,3000h mov ds,ax mov si,0100h mov di,0200h mov cx,0032h next: mov al,si inc si and al,0fh mov bl,al,mov al,si inc si push cx mov cl,4 shl al,cl pop cx add al,bl mov di,al inc di loop next,19,串操作(String Manipulation),MOVSB-W/CMPSB-W/ SCANSB-W/LODSB/STOSW,SI,DI,B/W,B/W,CX个单元 (字节或字),方向+ DF=0,SI=src pointer (DS) DI=dest pointer(ES) DF控制INC(DF=0)/DEC B+-1/W+-2 重复前缀: REP(Z)=REPEREPNZ=REPNE,20,movsb movsw,mov ax,3000h mov ds,ax mov es,ax mov si,0100h mov di,0200h mov cx,100 cld nt: movsb loop nt,mov ax,3000h mov ds,ax mov es,ax mov si,0100h mov di,0200h mov cx,100 cld rep movsb,21,串操作功能与默认操作数,REP(Z) MOVS (CX次) REPE(Z)CMPS/SCAS (重复至CX=0或ZF=0) REPNE(ZF=0)Repeat while (CX0 )and (ZF=0)。以指令结果与CX计数为条件 -重复前缀本身影响标志位(CX-1)? MOVSB /W-(ES):(DI)(DS): ( SI)不影响标志位 CMPSB/W-(DS): ( SI) -(ES):(DI)影响标志位 SCASB/W- (AL)/(AX)(ES): (DI) 影响标志位 LODSB/W(load String): (AL/AX)(DS): (SI) STOSB/W(Store string) : (AL/AX)(ES): (DI),22,cmpsb cmpsw,lea si,str1 lea di,str2 mov cx,l1 cmp cx,l2 jne uneq cld repz cmpsb,mov al,0ffh jcxz exit1 uneq: mov al,00h exit1: mov m1,al 比较两个字符串是否相同,23,转移控制 (Control Transfer),转移指令-无条件跳转(Unconditional Jump) CS:IP= Instruction Pointer 下条指令地址(指针) JMP SHORT_LABEL; 近短跳转 IP 128+127 SHORT 向前引用! IP=IP+disp8 JMP(JUMP)NEAR_LABEL IP=IP+disp16段内跳转 JMP FAR_LABEL; 段间地址 CS:IP=新地址 JMP SHORT JMP NEAR PTR JMP FAR PTR REG16/mem16 JMP 2000H; JMP BX; JMP 0FFFFH:0 (热启动) JMP FAR PTR TABLESI; JMP NEAR PTR BPDI,24,转移控制 (Control Transfer),转移指令-条件跳转(conditional Jump) (利用CMP,TEST、计算、移位指令等结果改变程序流) JCC SHORT_LABEL; 限近短跳转 IP 128+127 满足条件 IP=IP+disp8,否则顺序执行 (IF ELSE) JZ/JE -JNZ/JNE (ZF)=1 -(ZF)=0 JS -JNS (SF)=1 -(SF)=0 JP/JPE -JNP/JPO (PF)=0 -(PF)=1 JO -JNO (OF)=1 -(OF)=0 JC -JNC (CF)=1 -(CF)=0,25,转移控制 (Control Transfer),转移指令-条件跳转(conditional Jump) Unsigned大小比较 JB/JNAE -JNB/JAE (CF)=1 -(CF)=0 JA/JNBE -JNA/JBE (CF)=0&(ZF)=0 -(CF)=1 OR (ZF)=1 (运算+,+-,-,-+后) 无符号数大于条件 signed大小比较 JG/JNLE -JNG/JLE (SF)=(OF) &(ZF)=0 -(SF)(OF)OR(ZF)=1 JL/JNGE -JNL/JGE (SF) (OF) &(ZF)=0 -(SF)= (OF) OR(ZF)=1,26,转移控制 (Control Transfer),LOOP short_label ; loop CX times 循环控制 (Loop) LOOPZ/LOOPE short_label; (loop while zero/equal) 循环直到(CX)=0 or (ZF=0) LOOPNE/LOOPNZ short_label; (Loop while NZ/NE) 循环直到(CX)=0 or (ZF=1) JCXZ if CX=0 Jump to (Jump On CX Zero) CX为零控制调转 . 循环跳转超过-128/+127时? . Do while/ while Do/ For (i=0;i100;i+)的实现,27,CALL 段内段间:直接/间接调用(过程/子程序Subroutine) RET (RETF) 过程返回 (分远近,产生不同RET码(C3/CBH),过程调用指令 ( Call a procedure ),P66图2.11,28,过程调用指令 ( Call a procedure ),CALL NEAR_PROC; (SP)(SP)-2,(SP)+1,(SP)(IP); (IP)(IP)+proc_disp CALL reg16/mem16 . ; (IP)reg16/mem16 CALL FAR_PROC; (SP)(SP)-2,(SP)+1,(SP)(CS); (CS)SEG F_PROC (SP)(SP)-2,(SP)+1,(SP)(IP); (IP)OFFSET F_PROC CALL MEM32; (CS)MEM32+2, (IP)MEM32 例:CALL 2000H; CALL BX; CALL NEAR PTR ES:SI CALL 2000:3000H; CALL FAR PTR2000H,29,过程返回指令 ( Return From Call ),RET(C3H ); (IP)(SP)+1:(SP), (SP)(SP)+2 RET pop_value ;(C2H data_low data_high) (IP)(SP)+1:(SP), (SP)(SP)+2; (SP)(SP)+pop_value =ADD SP,Pop_value RETF (CBH) ; (IP)(SP)+1:(SP), (SP)(SP)+2 (CS)(SP)+1:(SP), (SP)(SP)+2 RETF pop_value ; (CAH data_low data_high) IP:CS弹出 (SP)(SP)+pop_value,30,子程序(Subroutine)与函数(Function),C函数调用 传递参数从右到左压入堆栈,再压入返回地址(W/DW)后转移,返回后修改SP(ADD SP,n); (Small/Compact) Int T_PROC(int a,int b) ;C函数 _ T_PROC proc NEAR ;汇编子程序(过程) PUSH BP; MOV BP,SP : BP=保存BP, BP+2=RET_IP, BP+4=a BP+6=b , POP BP RET; 返回后ADD SP,4-C_DECL 返回值:char,short,int =AX, float ,double:AX=EA, long:DX,AX; Near Pointer:AX,Far Pointer :DX,AX 其他模式Large, Huge,PASCAL函数调用传递参数地址从左到右,先参数后转移, 返回同时修改SP(RET n),31,中断指令 Interrupt,INT(Interrupt) INT n ; (SP)(SP)-2,(SP)+1,(SP)(FLAGS); (IF)0 (TF)0 (SP)(SP)-2,(SP)+1,(SP)(CS); (CS)0:n*4+2 书6.3 (SP)(SP)-2,(SP)+1,(SP)(IP); (IP)0:n*4 IRET(Interrupt Return) (IP) (SP)+1,(SP), (SP)(SP)2 (CS) (SP)+1,(SP), (SP)(SP)2 (FALGS)(SP)+1,(SP)(IP), (SP)(SP)2 特例:INTO (Interruop if overflow) =INT 4(CS)(0:12H),(IP)(0:10H) 单字节指令,(n中断类型号)中断向量xxxxCS:xxxxIP,32,MPU控制 (Processor Control,CLC(Clear Carry flag)CF=0 STC(Set Carry flag) CF=1 CMC(CoMplement Carry flag) CF=NOT CF CLD(CLear Direction flag) DF=0 Up STD(SeT Direction Flag) DF=1 Down CLI(CLear Interrupt flag) IF=0 STI(SeT Interrupt flag) IF=1 空操作/暂停 NOP ;No OPeration) (3*T) HLT(halt)CPU暂停-(有效INTR/NMI/RESET退出),标志位操作,33,MPU控制 (Processor Control),( WAIT(WAIT while TEST# pin not asserted) 有效INTR/TEST#=0结束-CPU与外部硬件同步 ESC(Escape) 扩展指令: 使其他器件(External Device)使用8086/88的寻址方式。 11011xxx modxxxr/m -8087 FLD FST FSTP FMUL FTEST, FSTSW Z,PI,Log2,loge. LOCK(lock bus)-指令前缀。 控制总线锁定信号LOCK#=0(有效)直到执行完下一条指令,等待、扩展和锁定,34,MPU控制 (Processor Control),段超越、重复前缀 段超越前缀ES:/CS:/DS:/SS MOV AL,BX; 8A 07 MOV AL,ES:BX 26 8A 07 重复前缀REP/ REPE/REPZ/ REPNE/REPN MOVSB A4 REP MOVSB F3 A4,35,IA-16 指令汇总,80286以后IA-16:扩展: PUSH SRC; PUSH 2000H SAL dst, count(不再限于1); IMUL src ;(AL/AX*src) IMUL reg16,data ; (reg16)(reg16)*data 三操作数:IMUL reg16-1,reg16-2/mem16,data; (reg16-1)(reg16-2/mem16)*data IMUL DL IMUL AX,10 IMUL DI,BX,3 IMUL BX,CX,6 新指令:PUSHA POPA REP INS/OUTS (B,W)(DX)ES:DI 虚地址保护模式指令 (16M,24位AB),P430-445 8086/8088指令,第3章汇编程序
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年安全员C证云南版高频题集
- 2025年健康管理实务考试试题及答案解析
- 2025年建筑环境设计师专业水平检测试题及答案解析
- 2025年航空安全管理专家考试试题及答案解析
- 2025年机关消防演练测试题及答案
- 机电润滑基础知识培训课件
- 2025年企业员工安全考核题库及答案
- 2025年慈善基金会招聘笔试预测题
- 2025年安全生产安全文化测试题含答案
- 2025年工程造价师资格认证考试试题及答案解析
- 2025至2030中国家用美容仪器行业项目调研及市场前景预测评估报告
- GB 30080-2025铜及铜合金熔铸安全设计与生产规范
- 2025国投生物制造创新研究院有限公司招聘(31人)笔试备考题库及答案解析
- 人教版九年级化学上册教学课件:第七单元 课题一 第1课时 燃烧的条件 灭火的原理和方法
- 国网面试模拟题:电网运营与规划类面试题目及答案
- 关于外墙维修的方案(3篇)
- 医院空气净化标准
- 抑郁病诊断证明书
- 维克多高中英语3500词汇
- 中国监察制度史
- 供水公司主要安全风险公告栏(总)
评论
0/150
提交评论