




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、算术运算(Arithmetic)指令二进制运算十进制调整加 ADD, ADC, INC AAA, DAA减 SUB, SBB, DEC, NEG, CMPAAS, DAS乘 MUL, IMULAAM除DIV, IDIVAAD 符号扩展指令(CBW、CWD)加法运算指令ADD (Addition) 加法 用法:ADD dest,src; 执行 (dest)(dest)+(src)如:ADD WORD PTRBX, 20 例: AL=7EH(01111110B) AH=5BH(01011011B) ADD AL,AH AL=D9H(11011001B) SF=1, OF=1, AF=1;CF=0,
2、ZF=0,PF=0; 加法运算指令利用Debug观察add操作中寄存器的变化:Debug中十六进制数末尾不需要加h加法运算指令Debug常用命令集 命令含义使用方法a (Assemble) 逐行汇编a addresse (Enter) 修改内存字节 e address listg (Go) 执行程序g =addressaddress.q (Quit) 结束qr (Register) 显示和修改寄存器r register name t (Trace) 跟踪执行t =address valueu (Unassemble) 反汇编 u address 或range? 联机帮助 ?加法运算指令Debu
3、g中标志寄存器的表示:寄存器含义(A/B)ABOF溢出(是/否) OV NVDF方向(减量/增量)DNUPIF中断(允许/关闭)EIDISF符号(负/正)NGPLZF零(是/否)ZRNZAF辅助进位(是/否)ACNAPF奇偶(偶/奇)PEPOCF进位(是/否)CYNC加法运算指令ADC (ADD with Carry) (dest)(dest)+(src)+(CF)带进位加法, 例:加法运算指令INC (Increment by 1) (dest) (dest)+1加一操作例:CF和OF位举例 (P74)MOV AL, 7EHMOV BL, 5BHADD AL, BL01111110 + 01
4、011011 = 1101,1011CF = 0(无符号数相加结果未超出255)OF = 1(带符号数相加结果超出了127)SUB AL, BL01111110 + 10100101 = 1,0010,0011CF = 1(无符号数相加结果超出了255)OF = 0(带符号数相加结果未超出127)加法运算指令例: 将buffer为首的4个字节内存内容相加,存放在AX中。 1318271Abuffer MOV CX, 4 LEA BX, buffer CLC MOV AX, 0lop1: ADC AL, BX ADC AH,0 INC BX DEC CX JNZ lop1Review数据传送指令
5、:1.通用数据传送 MOV PUSH POP XCHG2.累加器专用传送 IN OUT XLAT 3.地址传送 LEA LDS LES标志传送 PUSHF POPF LAHF SAHF 减法运算指令分类指令格式执行操作 SUB dst, src (dst) (dst) - (src) SBB dst, src (dst) (dst) - (src) - CF DEC oprd (oprd) (oprd) - 1 NEG oprd (oprd) 0 - (oprd) CMP oprd1, oprd2 (oprd1) - (oprd2) 减法运算指令注意点 SUB、SBB、CMP为双操作数, DE
6、C、NEG为单操作数。 SBB为带进位减法。 除DEC不影响CF标志外, 对SF、ZF、AF、PF、OF均有影响 NEG求补运算,等价于用0减去操作数。其对标志位的影响,由0减去该操作数的过程决定。减法运算指令SUB (普通减法)例:SF=1, AF=1,CF=1减法运算指令SBB 带借位减法SBB dst, src (dst) (dst) - (src) - CF DEC 自减1 DEC oprd (oprd) (oprd) - 1 NEG (Negate) 8位/16位求补(改变符号)绝对值不变 NEG dest; (dest) 0 - (dest) 例:NEG ALNEG BXNEG B
7、YTE PTR DI+20H减法运算指令CMP (Compare比较操作) (dest)-(src) 例:乘法指令乘法:MUL、IMUL(有符号乘) 、AAM8位乘法 MUL CL; MUL BYTE PTR BX+1执行AL*OPRD 积= AX 16位乘法 MUL CX; MUL WORD PTR BX 执行AX*OPRD 积= DX(高16位)| AX(低16位)除法指令除法:DIV、IDIV (有符号除) 、AAD8位除法 DIV CL; DIV BYTE PTR BX+1 默认被除数: AX结果 AH=余数 AL=商16位除法 DIV CX; DIV WORD PTR BX 默认被除
8、数: DX(高16位)| AX(低16位) 结果 DX=余数 AX=商AAA加法的ASCII(不压缩的BCD码)调整指令,隐含操作数AL和AH指令操作为:加法调整(AL) (AL)+6(AH) (AH)+1(AF) 1(CF) (AF)(AL) (AL)&0FH)(AL) (AL)&0FH)(AL)&0FH)9或(AF)=1YNDAA 加法的十进制(压缩的BCD码)调整指令,隐含操作数AL指令操作为: 如果 (AL)&0FH)9 或 (AF)=1 则 (AL) (AL)+6 (AF) 1 如果 (AL)9FH 或 CF=1 则 (AL) (AL)+60H (CF) 1加法调整AAS 减法的AS
9、CII(不压缩的BCD码)调整指令,隐含操作数AL和AH。指令操作为:减法调整(AL) (AL)6(AH) (AH)1(AF) 1(CF) (AF)(AL) (AL)&0FH)(AL) (AL)&0FH)(AL)&0FH)9或(AF)=1YNDAS 减法的十进制(压缩的BCD码)调整指令,隐含操作数AL指令操作为: 如果 (AL)&0FH)9 或 (AF)=1 则 (AL) (AL)6 (AF) 1 如果 (AL)9FH 或 (CF)=1 则 (AL) (AL)60H (CF) 1减法调整乘法调整AAM 乘法的ASCII调整指令,隐含操作数AL和AH(AH) (AL) / 0AH(AL) (A
10、L)%0AH 操作的实质是将AL寄存器中的二进制数转换成不压缩的BCD码,十位存放在AH,个位存放在AL。执行操作举例:MOV AL,07HMOV BL,09HMUL BL ;(AX)=07H09H=003FHAAM ;(AH)=06H,(AL)=03H,(SF)=0,(ZF)=0,(PF)=1除法调整AAD 除法的ASCII调整指令,隐含操作数AL和AH (AL) (AH)*0AH+(AL) (AH) 0执行操作 操作的实质是将AX寄存器的不压缩的BCD码转成二进制,并存放在AL中。举例:MOV AX,0703HMOV BL,02HAAD ;(AL)=49H(即十进制数73)DIV BL ;
11、(AL)=24H(商),(AH)=01H(余数)AAM ;(AH)=03H,(AL)=06H 符号扩展指令:CBW/CWD对于无符号数,扩展字长只要在高位添上足够个数的零。对于带符号数,扩展字长时,正数与负数的处理方法不同。正数的符号位为0,负数的符号位为1,扩展字长应分别在高位添上相应符号位。CBW/CWD 符号扩展CBW将一个字节(8位)转换为字(16位),隐含操作数AL和AH。如果(AL)80H,则(AH) 0否则(AH) FFHCWD将一个字(16位)转换为双字(32位) ,隐含操作数AX和DX。如果(AX)8000H,则(DX) 0否则(DX) FFFFH符号扩展CBW的演示逻辑运算
12、与移位(Logical & shifting)逻辑运算AND、OR、XOR、NOT、TEST 移 位 SHL、SAL、SHR、SAR 循环移位 ROL、ROR、RCL、RCR 这一类指令包括以下几组:逻辑运算指令格式 执行操作 AND dst , src (dst) (dst)(src) OR dst , src (dst) (dst)(src) NOT oprd (oprd) (oprd) XOR dst , src (dst) (dst)(src) TEST oprd1 , oprd2 (oprd1)(oprd2) 逻辑运算 举例:AND AL , 0000 1111BOR BX , 00
13、FFHNOT CLXOR DL, ALTEST AL, 0000 0001B可进行字节或字操作NOT指令不影响标志TEST只影响标志位,不影响操作数。移位(shifting)SHL oprd, 1CLSAL oprd, 1CLSHR oprd, 1CLSAR oprd, 1CL0CF0CFCF0CF执行操作指令格式移位(shifting) 移位规则1.左移: 高位低位;右移:高位低位2.移出位进入CF标志3.对移位指令,移出CF标志后丢失4.逻辑左移、算术左移的结果相同5.逻辑右移,新移入的信息以0填入算术右移,保持最高有效位原来的值(符号位不变)例:若(AL)=96H, CF=0;执行 SH
14、L AL, 11001011000101100执行前:(AL)=96H ,CF=0执行后:(AL)=2CH ,CF=1循环移位(Rotate Shifting)指令格式执行操作CFCFCFCFROL oprd, 1CLROR oprd, 1CLRCL oprd, 1CLRCR oprd, 1CL循环移位(Rotate Shifting) 移位规则1.左移: 高位低位;右移:高位低位2.移出位进入CF标志3.对循环移位指令,改变各位的位置,信息不丢失4.带进位循环移位,CF标志参加循环移位例:若(AL)=96H, CF=0;执行 ROL AL, 11001011000101101执行前:(AL)
15、=96H ,CF=0执行后:(AL)=2DH ,CF=1串操作(String Manipulation) 串的基本概念 顺序存放在内存中的一组数据,称为串。串操作种类 串传送 MOVS 将串从内存某一区域传送到另一区域。 串取 LODS 从串中取出某一元素。 串存 STOS 将某个数据存入串中。 串比较 CMPS 对两个串进行比较。 搜索串 SCAS 在串中搜索(查找)某数据(关键字) 串操作(String Manipulation) 串处理指令格式重复控制前缀 串指令控制重复次数 基本操作MOVSB、MOVSW 串传送 REP LODSB、 LODSW 串取 REPZ/REPE STOSB、
16、 STOSW 串存 REPNZ /REPNE CMPSB、CMPSW 串比较SCASB、 SCASW 搜索串例 REP MOVSB ;该指令重复执行MOVSB直至 CX为0REPZ CMPSB ;该指令重复执行CMPSB直至 ZF为0 或 CX为0REPNZ SCASW ;该指令重复执行SCASW直至 ZF不为0 或 CX为0串操作(String Manipulation) 串指令的特点1. 源串 由DS : SI指向的单元;目的串 由ES : DI指向的单元。2. 操作后的地址指针是增量还是减量取决于方向标志DF。3. 串操作指令前面可以加REP,则指令将重复进行,重复次数由CX决定。4.
17、若串操作指令的基本操作影响ZF (CMPS和SCAS) ,则可加重复前缀REPE或REPNE。5. 串操作指令在助记符后面加上字母B(字节操作)或者W(字操作)。格式 MOVSB 字节传送 MOVSW 字传送 MOVSB 执行操作 (ES:DI ) (DS:SI ) 字节传送 (SI ) (SI ) 1 修改源串指针 (DI) (DI ) 1 修改目的串指针其中:DF = 0 ,用 + ; DF = 1 ,用 - MOVSW 执行操作 (ES:DI ) (DS:SI ) 字传送(SI ) (SI ) 2 修改源串指针(DI ) (DI ) 2 修改目的串指针其中:DF = 0 ,用 + ; D
18、F = 1 ,用 -串传送格式 LODSB 取字节 LODSW 取字 LODSB执行操作 (AL) (DS:SI ) 从源串取入AL (SI) (SI ) 1 修改源串指针 其中:DF = 0 ,用 + ; DF = 1 ,用 - LODSW 执行操作 (AX) (DS:SI ) 从源串取入AX(SI ) (SI ) 2 修改源串指针其中:DF = 0 ,用 + ; DF = 1 ,用 -串取格式 STOSB 存入字节 STOSW 存入字 STOSB 执行操作 (ES:DI ) (AL ) 将AL存入目的串 (DI) (DI ) 1 修改目的串指针其中:DF = 0 ,用 + ; DF = 1
19、 ,用 - STOSW 执行操作 (ES:DI ) (AX ) 将AX存入目的串 (DI ) (DI ) 2 修改目的串指针其中:DF = 0 ,用 + ; DF = 1 ,用 -存入串格式 CMPSB 字节比较 CMPSW 字比较 CMPSB执行操作 (DS:SI ) (ES:DI ) 字节比较 (SI ) (SI ) 1 修改源串指针 (DI) (DI ) 1 修改目的串指针其中:DF = 0 ,用 + ; DF = 1 ,用 - CMPSW执行操作 (DS:SI ) (ES:DI ) 字比较(SI ) (SI ) 2 修改源串指针(DI ) (DI ) 2 修改目的串指针其中:DF =
20、0 ,用 + ; DF = 1 ,用 -串比较格式 SCASB 取字节 SCASW 取字 SCASB执行操作 (AL ) (ES:DI ) 从目的串搜索字节 (DI) (DI ) 1 修改目的串指针其中:DF = 0 ,用 + ; DF = 1 ,用 - SCASW执行操作 (AX ) (ES:DI ) 从目的串搜索字 (DI ) (DI ) 2 修改目的串指针其中:DF = 0 ,用 + ; DF = 1 ,用 -两数相减,只影响标志,不影响操作数。搜索串范例 例 “用REP MOVS 进行数据块传送”编程步骤如下:设置传送方向 用CLD 使DF = 0, 地址增加方向(正向) 用STD 使
21、 DF = 1, 地址减小方向(反向)设置源串地址 将源串首地址(DF=0),或末地址(DF=1)放入 DS、SI中设置目的串地址 将目的串首地址(DF=0),或末地址(DF=1)放入 ES、DI中设置串长度 将串的长度(传送次数)放入CX中。字节传送用 REP MOVSB 字传送 用 REP MOVSW例 把数据段中首地址位BUFFER1的200个字节传送到附加段首地址位BUFFER2的内存区中。CLD ;设置方向标志DF0,地址增量模式LEA SI,BUFFER1 ;(SI) 源串首址指针LEA DI,BUFFER2 ;(DI) 目标串首址指针MOV CX,200 ;(CX) 字符串长度R
22、EP MOVSB ;传送200个字节 ;传送结束范例 Review (1) 数据传送指令按传送内容,可分为四类:1.通用数据传送 MOV PUSH POP XCHG2.累加器专用传送 IN OUT XLAT 3.地址传送 LEA LDS LES标志传送 PUSHF POPF LAHF SAHF 特点:1. 除POPF、SAHF外,其他传送指令对标志位均无影响2. 唯一允许以段寄存器做操作数的指令种类; 且只有MOV、PUSH、POP这三条允许Review(2)算术运算指令二进制运算十进制调整加 ADD, ADC, INC AAA, DAA减 SUB, SBB, DEC, NEG, CMPAAS
23、, DAS乘 MUL, IMULAAM除DIV, IDIVAAD 符号扩展指令(CBW、CWD)Review(3)逻辑运算与移位指令逻辑运算AND、OR、XOR、NOT、TEST 移 位 SHL、SAL、SHR、SAR 循环移位 ROL、ROR、RCL、RCR 这一类指令包括以下几组:Review(4)串操作指令 串处理指令格式重复控制前缀 串指令控制重复次数 基本操作MOVSB、MOVSW 串传送 REP LODSB、 LODSW 串取 REPZ/REPE STOSB、 STOSW 串存 REPNZ /REPNE CMPSB、CMPSW 串比较SCASB、 SCASW 搜索串例 REP MO
24、VSB ;该指令重复执行MOVSB直至 CX为0REPZ CMPSB ;该指令重复执行CMPSB直至 ZF为0 或 CX为0REPNZ SCASW ;该指令重复执行SCASW直至 ZF不为0 或 CX为0控制转移(Control Transfer)在8086/8088中,指令的地址固定由CS和IP两个寄存器决定。DSESSSCSIP数据暂存器PSW标志寄存器执行部件控制电路指令译码器AXBXCXDXAHBHCHDHSIDIBPSPALBLCLDL寄存器组指令队列总线接口控制电路运算器地址加法器、指令1指令2指令3指令4、数据1数据2数据3、地址总线AB数据总线DB控制总线CB地址译码器控制转移
25、指令的分类重点掌握: JMP, JZ, JNZ, JC, LOOP CALL, RET, INT n, IRET指令类型 助记符无条件转移 JMP条件转移 JE/JZ, JNE/JNZ, JS, JNS, JO, JNO JP, JNP, JC, JNC, JCXZ JA/JNBE, JAE/JNB, JB/JNAE, JBE/JNA JG/JNLE, JGE/JNL, JL/JNGE, JLE/JNG循环控制 LOOP, LOOPE/LOOPZ, LOOPNE/LOOPNZ过程调用 CALL, RET中断指令 INT, INTO, IRET无条件跳转(Unconditional Jump)J
26、MP near_label段内直接转移IP=IP+disp(16位) disp 范围在 -3276832767之间JMP short_label;段内直接短转移IP=IP+disp(8位)disp 范围在 -128127之间JMP reg16/mem16段内间接转移JMP far_label; 段间直接转移 JMP mem32段间间接转移条件跳转(Conditional Jump) (见书P112) Jcc short_label; 助记符中的“cc”表示跳转条件。操作数必须是短标号,即跳转偏移必须在128127之间。满足条件则转向目标地址去执行,否则执行Jcc的下一条指令。例 CMP AX,
27、 BXJZ zero ; 转移条件:ZF =1zero:MOV flag,0条件跳转(Conditional Jump)按转移条件不同,条件转移指令可以分为四大类: 以单个状态标志作为转移条件 以CX的值为0作为转移条件助记符转移条件JZZF=1JSSF=1JOOF=1JPPF=1JCCF=1助记符转移条件JNZZF=0JNSSF=0JNOOF=0JNPPF=0JNCCF=0助记符转移条件JCXZCX=0条件跳转(Conditional Jump) 以两个无符号数比较的结果作为转移条件助记符转移条件说明JA/JNBECF 0且 ZF=0高于/不低于等于JAE/JNB/JNCCF=0高于等于/不
28、低于/无进位JB/JNAE/JCCF=1低于/不高于等于/有进位JBE/JNACF=1或ZF=1低于等于/不高于条件跳转(Conditional Jump) 以两个带符号数比较的结果作为转移条件助记符转移条件说明JG/JNLESF=OF且ZF=0大于/不小于等于JGE/JNLSFOF大于等于/不小于JL/JNGESFOF =1且ZF=0小于/不大于等于JLE/JNGSFZF=1或ZF=1小于等于/不大于条件跳转(Conditional Jump)例:在string字符串中查找空格字符,串长度为N。 MOV CX, N MOV AX, SEG string MOV DS, AX LEA BX,s
29、tring MOV AL,20H ;或用 next: CMP AL,BX JZ find INC BX DEC CX JNZ next 未找到处理JMP exit find: 找到处理exit: 结束出口ABC DstringDS:BX循环控制 (Loopxx)使用格式: LOOPxx符号地址执行: (CX)(CX) 1,此操作不影响标志 检查转移条件,满足,转向目标地址去执行; 不满足,执行LOOPxx后一条指令转移方式:只允许段内直接短方式,跳转范围-128127助记符转移条件不转移条件LOOPCX0CX=0LOOPZCX0且ZF=1CX=0或ZF=0LOOPNZCX0且ZF=0CX=0或
30、ZF=1过程调用指令 (Call a procedure)CALL 调用(过程/子程序Subroutine)RET 过程返回主程序调用返回子程序1子程序2调用返回断点1断点2断点2(L)断点2(H)断点1(L)断点1(H)低地址高地址堆栈段(SP) 先推入后推入先弹出后弹出过程调用指令 (Call a procedure)CALL near_proc;段内直接调用(SP)(SP)-2, (SP)+1,(SP)(IP); (IP)(IP)+ dispCALL reg16/mem16;段内间接调用 (SP)(SP)-2, (SP)+1,(SP)(IP); (IP)reg16/mem16CALL f
31、ar_proc; 段间直接调用 (SP)(SP)-2, (SP)+1,(SP)(CS) (CS) SEG far_proc (SP)(SP)-2, (SP)+1,(SP)(IP) (IP) OFFSET far_proc过程调用指令 (Call a procedure)CALL MEM32;段间间接调用 (SP)(SP)-2,(SP)+1,(SP)(CS) (CS)(mem32+2) (SP)(SP)-2,(SP)+1,(SP)(IP); (IP)(mem32)例:CALL PROC ;PROC为近过程 CALL BXCALL TIMER ;TIMER为远过程CALL DWORD PTR200
32、0H过程返回指令 ( Return From Call )指令机器码执行操作RETC3H(IP)(SP)+1,(SP) (SP)(SP)+2RET pop_valueC2H data_low data_high(IP)(SP)+1,(SP), (SP)(SP)+2 (SP)(SP)+pop_valueRETCBH(IP)(SP)+1,(SP), (SP)(SP)+2(CS)(SP)+1,(SP), (SP) (SP)+2RET pop_valueCAH data_low data_high(IP)(SP)+1,(SP), (SP)(SP)+2(CS)(SP)+1,(SP), (SP) (SP)
33、+2(SP)(SP)+pop_value 中断指令 Interrupt中断(Interrupt) 有时当系统运行或程序运行期间遇到某些特殊情况, 需要计算机自动执行一组专门的例行程序来进行处理。中断子程序 一种特殊的子程序。以类型号N来区分,共有256个类型号( 0255)。中断种类 中断分为内部(软)中断和外部(硬)中断两种。 内部中断如除法运算中除数为0、中断指令引起的中断。 外部中断处理I/O设备与CPU之间的通信。中断指令 Interrupt 中断向量表指存放 256 个中断向量的内存区域 每个中断向量占4个单元 256 个中断向量占1K个单元 (4 256 = 1024 = 1K)中断向量表地址为 0:0 0:03FFH,即低端1K内存中断向量类型N的中断向量固定存放在4个内存单元中,如下图: 偏移地址段地址0:N4 0:N4 2其中:前两个单元存放偏移地址后两个单元 存放段地址中断指令 Interrupt指令说明执行操作INT n中断 (S
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 河道垃圾清理施工方案
- 外墙保温真石漆劳务分包合同
- 房屋居间租赁服务合同
- 嘉兴拆烟囱施工方案
- 合同协议生产合同
- 心理学认知过程与个性发展题库
- 人力资源行业数据统计表一览(按职位类型)
- 个人学习成长记录表
- 吉林压花地坪施工方案
- 建筑劳务木工班组合同
- 空中乘务职业教育专业教学资源库申报书
- 人教版PEP五年级下册英语unit1单元复习课件
- 心肌炎病人的护理
- 四川麻将业余一级考级题库
- 【人教版】三年级下册数学课件《口算乘法》两位数乘两位数优秀(第1课时)
- 《小小理财家》课件PPT
- 《相交线与平行线》复习课一等奖课件
- 部编版四年级语文下册第3单元大单元整体教学设计课件(教案配套)
- q gw2sjss.65金风风力发电机组防腐技术rna部分归档版
- 廉政建设监理实施细则
- 健康证体检表
评论
0/150
提交评论