首页 汇编第3章(2)

汇编第3章(2)

举报
开通vip

汇编第3章(2)nullnull3.3 80x86的指令系统80x86的指令系统中共有136种基本指令, 可以分成6个功能组: 数据传送(Data transfer) 25 算术运算(Arithmetic) 21 逻辑运算和移位指令(Logic& Shift) 21 串处理(String manipulation) 7 控制转移(Control Transfer) 4...

汇编第3章(2)
nullnull3.3 80x86的指令系统80x86的指令系统中共有136种基本指令, 可以分成6个功能组: 数据传送(Data transfer) 25 算术运算(Arithmetic) 21 逻辑运算和移位指令(Logic& Shift) 21 串处理(String manipulation) 7 控制转移(Control Transfer) 47 处理机控制(Processor Control) 15null先介绍以下内容: 1. 学习指令的要点 2. 指令中操作数的 关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf 示 3. 书写指令注意事项 null先介绍以下内容: 1. 指令助记符表 2. 学习指令的要点 3. 利用DEBUG程序,学习指令系统 4. 指令中操作数的表示 5. 书写指令注意事项 null1. 指令助记符表nullnull1. 学习指令的要点 从以下几个方面来掌握一条指令: 指令的助记符 指令的 格式 pdf格式笔记格式下载页码格式下载公文格式下载简报格式下载 :操作数的个数、类型(B,W,DW) 执行的操作:指令执行后的结果 包括: 哪些寄存器、内存单元的值发生了变化 对标志位有无影响,哪些受影响 特点及注意事项 只介绍常用的指令,其他需要时可自学。null重点关注: 指令的汇编格式 指令的基本功能 指令支持的寻址方式 指令的执行对标志位的影响 指令的特殊要求null编程完成 B5h + 8Fh = ? 学习加法ADD指令及其对状态标志位的影响。3. 利用DEBUG学习指令系统(示例)null2. 指令中操作数的表示 )注释时表示寄存器、存储器、端口的内容oprd1oprd2两操作数nullnullnullnullnullnullnullnull 数据传送是最基本、最重要的一种操作 实际程序中,使用的比例最高 change PROC LEA SI, num+2 MOV CL, num+1 MOV CH, 0 MOV AX, 0 MOV DI, 10 next: MUL DI MOV BH, 0 MOV BL, [SI] AND BL, 0FH ADD AX, BX INC SI LOOP next zero: MOV BX, AX RET change ENDP 汇编子程例:3.3.1 数据传送指令null 按传送内容,可分为四类: 通用数据传送指令  累加器专用传送指令  地址传送指令  标志寄存器传送指令 特点: 1. 除POPF/FD、SAHF外,其他传送指令对标志位均无影响 2. 唯一允许以段寄存器做操作数的指令 且只有MOV、PUSH、POP这三条允许null通用传送指令(8) MOV MOVSX MOVZX PUSH POP PUSHA/ PUSHAD POPA /POPAD XCHG 传送 带符号扩展传送 带零扩展传送 进栈 出栈 所有寄存器进栈 所有寄存器出栈 交换null(1)MOV传送指令 格式 MOV DST,SRC 执行 ( DST ) ← ( SRC )null例 : ①reg/mem/segreg ← reg 通用寄存器/存储器/段寄存器←通用寄存器 MOV AL , BL MOV [ BX ] , AL MOV DS , AX ②reg/segreg ← mem 通用寄存器/段寄存器 ← 存储器 MOV AL , [ BX ] MOV DS , [ BX+SI ] ③reg/mem ← segreg 通用寄存器/存储器 ← 段寄存器 MOV BX , CS MOV [ BX ] , DS ④reg/mem ← data 通用寄存器/存储器 ←立即数 MOV Al , 9 MOV BX , OFFSET buffer MOV BYTE PTR [ value ] , 0 MOV WORD PTR [ BX ] , 1nullMOV指令特点及注意事项: 双操作数指令 (注意双操作指令的特点) 可进行字节或字传送 不允许存储器传送到存储器 MOV [ BX ] , value MOV [DI], [SI] MOV AX ,value MOV [ BX ] ,AX MOV AL ,[SI] MOV [ DI ] ,ALnullnullnull例 编程将CL寄存器的内容传送到200:100H单元中。MOV [200:100H ], CLnull MOV指令应用(自学) 例: 实现将AREA1开始的100个数据传送到AREA2开始的单元。 ……AREA1:AREA2:100个数据null 分析 定性数据统计分析pdf销售业绩分析模板建筑结构震害分析销售进度分析表京东商城竞争战略分析 题意: ①可以用200条MOV指令来完成100个数据传送, 指令操作重复,每个数据传送后的地址是变化的。 ② 可以利用循环, 但每循环一次要修改地址(源地址和目的地址), 必须把地址放在寄存器当中,用寄存器间接寻址来寻找操作数.null得到如下程序: … MOV SI,OFFSET AREA1 MOV DI,OFFSET AREA2 MOV CX,100 AGAIN : MOV AL,[SI] MOV [DI],AL INC SI ;修改地址指针 INC DI ;修改地址指针 DEC CX ;修改个数 JNZ AGAIN …nullMOVSX  带符号扩展传送 MOVZX   带零扩展传送格   式: MOVSX/ MOVZX  DST,SRC 执行的操作: (DST)符号扩展( SRC ) 例: MOVSX EAX,CL MOVSX EDX,[EDI] MOVZX DX,AL MOVZX EAX,[EDI]null注意: 1.目的操作数必须是16位或32位寄存器 2.源操作数的长度一定要小于目的操作数 3.MOVSX的源操作数应是有符号数,而MOVZX的 源操作数应是无符号数null什么是堆栈,为什么需要堆栈 堆栈是按照先进后出原则组织的一段内存区域存在 于堆栈段中,SP在任何时候都指向栈顶。 通常用于存放一些重要数据, 如:程序的地址、或是需要恢复的数据。 为方便数据的存放和恢复, 设置专门的指针,指向堆栈中要操作的单元。 段值由 SS 给出,偏移地址由 SP 给出 SS → 堆栈段寄存器 (stack segment) SP → 堆栈指针寄存器 (stack point)堆栈:“先进后出”的存储区,null堆栈使用的场合 用堆栈保存恢复信息 子程序的调用、返回以及中断调用、返回 用堆栈传送数据 (程序 设计 领导形象设计圆作业设计ao工艺污水处理厂设计附属工程施工组织设计清扫机器人结构设计 中介绍)nullnull 进栈指令: PUSH SRC 执行操作: (SP)  (SP) - 2 ( (SP)+1, (SP) )  (SRC) 把一个字从源操作数(src)由SP指向堆栈顶部。特点: 单操作数指令 操作数为16位,可以是reg/segreg/mem, 不可以是data reg : AX, BX, CX, DX, SI, DI, BP, BX segreg : CS, DS, ES, SS mem : 字类型null例: 假设 (AX) = 2107 H , 执行 PUSH AX (SP)低地址高地址(SP) 07H 21H低地址高地址进栈方向* ** * * * * *PUSH AX 执行前PUSH AX 执行后nullD:\MASM>DEBUG -A ;汇编两条指令 1693:0100 MOV AX, 1234 1693:0103 PUSH AX 1693:0104 -R ;显示指令执行前寄存器值 AX=0000 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000 DS=1693 ES=1693 SS=1693 CS=1693 IP=0100 NV UP EI PL NZ NA PO NC 1693:0100 B83412 MOV AX, 1234 -T=100 2 ;执行CS:100开始处的两条指令 …. AX=1234 BX=0000 CX=0000 DX=0000 SP=FFEC BP=0000 SI=0000 DI=0000 DS=1693 ES=1693 SS=1693 CS=1693 IP=0104 NV UP EI PL NZ NA PO NC 1693:0104 03C6 ADD AX,SI -D SS:FFEC L10 ;查看栈顶内容 1693:FFE0 34 12 00 00 4... 1693:FFF0 FF FF FF FF FF FF FF FF-FF FF FF FF FF FF FF FF .........… -例 利用DEBUG学习PUSH指令注意相关寄存器和内存单元内容的变化null出栈指令: POP DST 执行操作:   (DST)  (SP)+1, (SP)) (SP)  (SP) + 2 把现行SP所指向堆栈顶部的一个字  指定的目的操作数(dest),同时进行修改堆栈指针的操作。特点: 单操作数指令 操作数为16位,可以是reg/segreg/mem, 不可以是data reg : AX, BX, CX, DX, SI, DI, BP, BX segreg : DS, ES, SS, 不允许是CS mem : 字类型null例: POP BX(SP)低地址高地址(SP) 07H 21H低地址高地址出栈方向07H 21H (BX) = 2107H POP BX 执行前 POP BX 执行后* ** ** * * *null-A 1693:0100 MOV BP, SP ;取当前栈顶地址 1693:0102 MOV WORD PTR [BP], 1234 ;用MOV指令使栈顶内容为1234H 1693:0107 POP BX ;出栈指令 1693:0108 -R ;查看指令执行前状态 AX=0000 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000 DS=1693 ES=1693 SS=1693 CS=1693 IP=0100 NV UP EI PL NZ NA PO NC 1693:0100 89E5 MOV BP, SP -T=100 ;执行CS:100处的第一条mov指令 AX=0000 BX=0000 CX=0000 DX=0000 SP=FFEE BP=FFEE SI=0000 DI=0000 DS=1693 ES=1693 SS=1693 CS=1693 IP=0102 NV UP EI PL NZ NA PO NC 1693:0102 C746003412 MOV WORD PTR [BP+00], 1234 SS:FFEE=0000 -T ;执行下一条mov指令 AX=0000 BX=0000 CX=0000 DX=0000 SP=FFEE BP=FFEE SI=0000 DI=0000 DS=1693 ES=1693 SS=1693 CS=1693 IP=0107 NV UP EI PL NZ NA PO NC 1693:0107 5B POP BX -T ;执行pop指令,注意BX, SP的变化 AX=0000 BX=1234 CX=0000 DX=0000 SP=FFF0 BP=FFEE SI=0000 DI=0000 DS=1693 ES=1693 SS=1693 CS=1693 IP=0108 NV UP EI PL NZ NA PO NC 1693:0108 F5 CMC -例 在DEBUG下学习POP指令nullPUSHA/ PUSHAD POPA /POPAD所有16位/32位寄存器进栈 所有16位/32位寄存器出栈执行操作 进栈 顺序 AX,CX,DX,BX,SP,BP,SI,DI EAX,ECX,EDX,EBX,ESP,EBP,ESI,EDI (SP) ←(SP)-16(32) 出栈顺序 DI,SI,BP,SP,BX,DX,CX,AX EDI,ESI,EBP,ESP,EBX,EDX,ECX,EAX (SP) ←(SP)+16(32)null 交换指令: XCHG OPR1, OPR2 执行操作: (OPR1)  (OPR2) 例:XCHG BX, [ BP+SI ] XCHG AL, BH 注意: * 可进行字或字节操作,不影响标志位 * 不允许对立即数、段寄存器做操作数 XCHG AX, 4 XCHG BX, DS null 输入指令(I/O  CPU) 长格式: IN AL, PORT (字节) IN AX, PORT (字) IN EAX, PORT (双字)  累加器专用传送指令(只限使用AX或AL)执行操作:(AL)  ( PORT ) (字节) (AX)  ( PORT+1, PORT )(字) (AX)  (PORT+3, PORT+2, PORT+1, PORT ) (双字)null 短格式: IN AL, DX (字节) IN AX, DX (字) IN EAX, DX (双字) 执行操作:(AL)  ( (DX) ) (字节) (AX)  ( (DX)+1, (DX) )(字) (AX)  ((DX)+3, (DX)+2, (DX)+1, (DX) ) (双字) null长格式: OUT PORT, AL (字节) OUT PORT, AX (字) OUT PORT, EAX (双字) 执行操作:( PORT )  (AL) (字节) ( PORT+1, PORT )  (AX)(字) (PORT+3 , PORT+2 ,PORT+1, PORT )  (EAX) (双字) 输出指令(CPU  I/O)null 短格式: OUT DX, AL (字节) OUT DX, AX (字) OUT DX, EAX (双字) 执行操作:( (DX) )  (AL) (字节) ( (DX)+1, (DX) )  (AX) (字) ((DX)+3, (DX)+2, (DX)+1, (DX) )  (AX) (双字) null注意: * 不影响标志位 * 前256个端口号00H~FFH可直接在指令中指定(长格式) * 如果端口号 256,端口号  DX(短格式) 例: IN AX, 28H ; MOV DX, 28H ; IN AX, DX MOV DATA_WORD, AX 例: MOV DX, 3FCH IN AX, DX 例: OUT 5, AL 例:测试某状态寄存器(端口号27H)的第2位是否为1 IN AL, 27H TEST AL, 00000100B JNZ ERROR ;若第2位为1,转ERROR处理nullSound程序 mov dx, 100 in al, 61h and al, 11111100b sound:xor al, 2 out 61h, al mov cx, 140h wait1: loop wait1 dec dx jne soundnull换码指令:XLAT 或 XLAT OPR 执行操作:(AL)  ( (BX) + (AL) ) 表格 关于规范使用各类表格的通知入职表格免费下载关于主播时间做一个表格详细英语字母大小写表格下载简历表格模板下载 符号地址(首地址), 只是为了提高可读性而设置,汇编时仍用BX。 例:MOV BX, OFFSET TABLE ; (BX)=0040H MOV AL, 3 XLAT TABLE 指令执行后 (AL)=33H 注意: * 不影响标志位 * 字节表格(长度不超过256) 首地址  (BX) * 需转换代码  (AL)nullXLAT指令使用方法: 先建立一个字节表格; 表格首偏移地址存入BX; 需要转换代码的序号(相对与表格首地址位移量)存入AL; (表中第一个元素的序号为0) 执行XLAT指令后,表中指定序号的元素存于AL中。 (AL)为转换的代码。nullXLAT指令应用: 若把字符的扫描码转换成ASCII码; 或数字0~9转换成7段数码所需要的相应代码(字形码)等 就要用XLAT指令。 例:内存的数据段中有一张十六进制数字的ASCII码表。 首地址为:Hex_table ,欲查出表中第10个元素(‘A’) null执行指令序列: MOV BX,OFFSET Hex_table MOV AL,0AH XLAT Hex_table 假设: (DS)=F000H, Hex_table=0040H (AL)=0AH 执行XLAT以后: (AL)=41H=(F004AH), 即“A”的ASCII码。16进制数的ASCII码表null 地址传送指令 有效地址送寄存器指令: LEA REG, SRC 执行操作:   (REG)  SRC 指针送寄存器和DS指令: LDS REG, SRC 执行操作: (REG)  (SRC) (DS)  (SRC+2) 4个相继字节  寄存器(通常是SI)、DS 指针送寄存器和ES指令: LES REG, SRC 执行操作: (REG)  (SRC) (ES)  (SRC+2) 4个相继字节  寄存器(通常是DI)、ES null例:LEA BX, [BX+SI+0F62H] LDS SI, [10H] LES DI, [BX]40 H 00 H 00 H 30 H TABLE (DS):1000HMOV BX, TABLE ; (BX)=0040H MOV BX, OFFSET TABLE ; (BX)=1000H LEA BX, TABLE ; (BX)=1000H LDS BX, TABLE ; (BX)=0040H ; (DS)=3000H LES BX, TABLE ; (BX)=0040H ; (ES)=3000H注意: * 不影响标志位 * REG 不能是段寄存器   * SRC 必须为存储器寻址方式null 标志寄存器传送指令 标志送AH指令: LAHF 执行操作: (AH)  (PSW的低字节) AH送标志寄存器指令: SAHF 执行操作: (PSW的低字节)  (AH) 标志进栈指令: PUSHF 执行操作: (SP)  (SP) - 2 ( (SP)+1, (SP) )  (PSW)   标志出栈指令: POPF 执行操作: (PSW)  ( (SP)+1, (SP) ) (SP)  (SP) + 2 * 影响标志位null 类型转换指令 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)=0BA45H 注意: * 无操作数指令 * 隐含对AL 或AX 进行符号扩展 * 不影响条件标志位null  加法指令 ADD、ADC、INC  减法指令 SUB、SBB、DEC、NEG、CMP  乘法指令 MUL、IMUL  除法指令 DIV、IDIV  十进制调整指令 DAA、DAS、 AAA、AAS、AAM、AAD3.3.2算术指令null 加法指令 加法指令: ADD DST, SRC 执行操作: (DST)  (SRC) + (DST) 带进位加法指令: ADC DST, SRC 执行操作: (DST)  (SRC) + (DST) + CF 加1指令: INC OPR 执行操作: (OPR)  (OPR) + 1注意: * 除INC指令不影响CF标志外,均对条件标志位有影响。null加法指令对条件标志位(CF/OF/ZF/SF)的影响:CF 位表示 无符号数 相加的溢出。 OF 位表示 带符号数 相加的溢出。nulln=8bit 带符号数(-128~127) 无符号数(0~255)null例:双精度数的加法 (DX) = 0002H (AX) = 0F365H (BX) = 0005H (CX) = 0E024H 指令序列 (1) ADD AX, CX (2) ADC DX, BX (1) 执行后,(AX) = 0D389H CF=1 OF=0 SF=1 ZF=0 (2) 执行后,(DX) = 0008H CF=0 OF=0 SF=0 ZF=0null 减法指令 减法指令: SUB DST, 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标志外,均对条 件标志位有影响。null减法指令对条件标志位(CF/OF/ZF/SF)的影响:CF 位表示 无符号数 减法的溢出。 OF 位表示 带符号数 减法的溢出。nullNEG 指令对CF/OF的影响:null例:x、y、z 均为双精度数,分别存放在地址为X, X+2; Y, Y+2;Z, Z+2的存储单元中,用指令序列实现 w  x + y + 24 - z ,并用W, W+2单元存放wMOV AX, X MOV DX, X+2 ADD AX, Y ADC DX, Y+2 ; x+y ADD AX, 24 ADC DX, 0 ; x+y+24 SUB AX, Z SBB DX, Z+2 ; x+y+24-z MOV W, AX MOV W+2, DX ; 结果存入W, W+2单元null 乘法指令 无符号数乘法指令: MUL SRC 执行操作: 字节操作数 (AX)  (AL) * (SRC) 字操作数 (DX, AX)  (AX) * (SRC) 双字操作 (EDX, EAX)  (EAX) * (SRC) 带符号数乘法指令: IMUL SRC注意: * AL (AX、EAX) 为隐含的乘数寄存器。 * AX ((DX,AX)、 (EDX,EAX))为隐含的乘积寄存器。 * SRC不能为立即数。 * 除CF和OF外,对条件标志位无定义。null乘法指令对 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)=5EF5H CF=OF=1null对于80286+,还有(1)双操作数的IMUL 格式:IMUL REG,SRC 执行的操作: 字操作:(REG16)(REG16)*SRC 双字操作:(REG32)(REG32)*SRC注: 1、 SRC与REG长度要一致 2、 SRC可以是任一种寻址方式 3、SRC为立即数时,可以是8位、16位、32位立即数null对于80286+,还有(2)三操作数的IMUL 格式:IMUL REG,SRC,IMM 执行的操作: 字操作:(REG16)SRC*IMM 双字操作:(REG32)SRC *IMM注: 1、 SRC与REG长度要一致 2、 SRC可以是除立即数以外的任一种寻址方式 3、IMM(立即数),可以是8位、16位、32位立即数null三种IMUL的区别1、乘积字长不同 单操作数时乘积字长是源和目的操作数字长的二倍 双操作数和三操作数时乘积字长与源和目的操作数字长相同2、溢出位OF的意义不同 单操作数时OF为1,乘积结果也是正确的 双操作数和三操作数时乘积结果不正确null 除法指令 无符号数除法指令: DIV SRC 执行操作: 字节操作 (AL)  (AX) / (SRC) 的商 (AH)  (AX) / (SRC) 的余数 字操作 (AX)  (DX, AX) / (SRC) 的商 (DX)  (DX, AX) / (SRC) 的余数 双字操作 (EAX)  (EDX, EAX) / (SRC) 的商 (EDX)  (EDX, EAX) / (SRC) 的余数 带符号数除法指令: IDIV SRC 注意: * AX、 (DX,AX)、 (EDX,EAX) 为隐含的被除数寄存器。 * AL、 (AX) 、(EAX)为隐含的商寄存器。 * AH 、(DX) 、 (EDX)为隐含的余数寄存器。 * SRC不能为立即数。 * 对所有条件标志位均无定义。null例:x , y , z , v 均为16位带符号数,计算 ( v - ( x*y + z – 540 ) ) / xMOV AX, X IMUL Y ; x*y MOV CX, AX MOV BX, DX MOV AX, Z CWD ADD CX, AX ADC BX, DX ; x*y+z SUB CX, 540 SBB BX, 0 ; x*y+z-540 MOV AX, V CWD SUB AX, CX SBB DX, BX ; v-(x*y+z-540) IDIV X ; (v-(x*y+z-540))/xnull 十进制调整指令 BCD码:用二进制编码的十进制数,又称二--十进制数 压缩的BCD码:用 4 位二进制数表示 1 位十进制数 例:(59)10 =(0101 1001)BCD 非压缩的BCD码:用 8 位二进制数表示 1 位十进制数 例:(59)10 =(0000 0101 0000 1001)BCD 数字的 ASCII 码是一种 非压缩的 BCD 码 DIGIT ASCII BCD 0 30H 0011 0000 1 31H 0011 0001 2 32H 0011 0010 … … … 9 39H 0011 1001null 十进制调整指令 BCD码:用二进制编码的十进制数,又称二--十进制数 压缩的BCD码:用4位二进制数表示1位十进制数 例:(59)10 =(0101 1001)BCD 非压缩的BCD码:用8位二进制数表示1位十进制数 例:(59)10 =(0000 0101 0000 1001)BCD 数字的ASCII码是一种非压缩的BCD码 DIGIT ASCII BCD 0 30H 0011 0000 1 31H 0011 0001 2 32H 0011 0010 … … … 9 39H 0011 1001null例:写出(3590)10的压缩BCD码和非压缩BCD码,并 分别把它们存入数据区PAKED和UNPAK。 压缩BCD: (3590)10=(0011 0101 1001 0000)BCD 非压缩BCD: (3590)10=(00000011 00000101 00001001 00000000)BCDnull压缩的BCD码调整指令加法的十进制调整指令:DAA 执行操作:(AL)  (AL)压缩BCD 减法的十进制调整指令:DAS 执行操作:(AL)  (AL)压缩BCD19 压缩BCD: 0001 1001 + 08 + 0000 1000 27 0010 0001 + 110 (0010 0111)BCD AF=1问题的提出: 注意: * 隐含的操作寄存器为AL * 紧接在加减指令之后使用 * 影响条件标志位 (对OF无定义)null调整方法: AF=1或(AL)0~3=A~F,则(AL)  (AL)  06H,AF=1 CF=1或(AL)4~7=A~F,则(AL)  (AL)  60H,CF=1 ( DAA做‘+’, DAS做‘-’ ) 例: DATA SEGMENT BCD1 DB 34H, 18H ; (1834)BCD BCD2 DB 89H, 27H ; (2789)BCD BCD3 DB 2 DUP (?) DATA ENDS (1) BCD3  BCD1 + BCD2 ; (4623)BCD (2) BCD3  BCD1 - BCD2 ; (9045)BCD = -955null(1) MOV AL, BCD1 ; (AL)=34H ADD AL, BCD2 ; (AL)=34+89=BDH DAA ; (AL)=BD+60+06=23H AF=CF=1 MOV BCD3, AL ; (BCD3)=23H MOV AL, BCD1+1 ; (AL)=18H ADC AL, BCD2+1 ; (AL)=18+27+1=40H AF=1 CF=0 DAA ; (AL)=40+06=46H MOV BCD3+1, AL ; (BCD3+1)=46H (2) MOV AL, BCD1 ; (AL)=34H SUB AL, BCD2 ; (AL)=34-89=ABH DAS ; (AL)=AB-60-06=45H AF=CF=1 MOV BCD3, AL ; (BCD3)=45H MOV AL, BCD1+1 ; (AL)=18H SBB AL, BCD2+1 ; (AL)=18-27-1=F0H DAS ; (AL)=F0-60=90H MOV BCD3+1, AL ; (BCD3+1)=90Hnull非压缩的BCD调整指令 加法调整指令:AAA (AL)  (AL)非压缩BCD 减法调整指令:AAS (AL)  (AL)非压缩BCD 注意: * 隐含的操作寄存器为AL * 紧接在加减指令之后使用 * 除AF、CF外,对其它条件标志位无定义 调整方法: 若(AL)0~3=0~9,且AF=0,则(AL)4~7 = 0,AF  CF=0 若(AL)0~3=A~F,或AF=1,则(AL)  (AL)±6,(AL)4~7=0 (AH)  (AH)±1,AF  CF=1( AAA做‘+’, AAS做‘-’ )null乘法调整指令:AAM (AL)  (AX)非压缩BCD 注意: * 隐含的操作寄存器为AL * 紧接在MUL指令之后使用 * 对OF、CF、AF无定义 调整方法: (AL)除以0AH,商 (AH),余数 (AL) 除法调整指令:AAD 被除数(AX) = (0000 xxxx 0000 xxxx)非压缩BCD 除数 = (0000 xxxx)非压缩BCD 在DIV指令之前: (AL)2  0AH ×(AH)+(AL) (AH)2  0 null例:(AX)=0504H (BL)=03H (1) (AL)*(BL) MUL BL ; (AX)=000CH AAM ; (AH)=01H (AL)=02H (2) (AX)/(BL) AAD ; (AH)=00H (AL)=36H DIV BL ; (AH)=00H (AL)=12H AAM ; (AH)=01H (AL)=08H null 逻辑运算指令 位测试并修改指令 位扫描指令 移位指令 3.3.3 逻辑指令null逻辑非指令:NOT OPR * OPR不能为立即数 执行操作: (OPR)   (OPR) * 不影响标志位 逻辑与指令:AND DST, SRC 执行操作: (DST)  (DST)  (SRC) 逻辑或指令:OR DST, SRC 执行操作: (DST)  (DST)  (SRC) 异或指令: XOR DST, SRC 执行操作: (DST)  (DST)  (SRC) 测试指令: TEST OPR1, OPR2 执行操作: (OPR1)  (OPR2)CF OF SF ZF PF AF 0 0 * * * 无定义 根据运算结果设置逻辑运算指令null例:屏蔽AL的0、1两位 AND AL, 0FCH 例:置AL的第5位为1 OR AL, 20H 例:使AL的0、1位变反 XOR AL, 3 例:测试某些位是0是1 TEST AL, 1 JZ EVEN * * * * * * * *
本文档为【汇编第3章(2)】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_256172
暂无简介~
格式:ppt
大小:574KB
软件:PowerPoint
页数:0
分类:互联网
上传时间:2011-12-08
浏览量:15