




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、1,第3章 80X86的寻址方式和指令系统,第1节 80X86的数据类型 第2节 80X86的寻址方式 第3节 80X86的指令系统,2,学习指导和要求,掌握80486的七种数据类型; 熟练掌握九种寻址方式; 熟记各种类型的指令格式及功能,并能编写简单程序。,3,第1节 80X86的数据类型 80486汇编语言中可使用的数据类型有以下七种: 无符号二进制数,字节(8位):0255 (00FFH),占用一字节存储单元。 字(16位):065535 (00FFFFH),占用连续的两字 节存储单元,低地址存储单元存放低8位数据,高地 址存储单元存放高8位数据,低字节地址为该字的地址。 双字(32位)
2、:04294967299 (00FFFFFFFFH),占用连续的四字节存储单元,最低地址存储单元存放最低8位数据,最高地址存储单元存放最高8位数据,最低字节地址为该双字的地址。,4,有符号二进制数 字节: -128+127 (80HFFH, 00H7FH) 字: -32768+32767 (8000HFFFFH, 00000H7FFFH) 双字:-2147483650+2147483649 (80000000HFFFFFFFFH,000000000H7FFFFFFFH) 以补码形式存储,地址单元分配与无符号数类似。 浮点数(实数) 单精度数(32位):数据格式如下:,阶 码 有 效 数,31
3、30 23 22 0,符号位,1.,1位符号,8位阶码,24位有效数(显式23位,外加1位隐含的整数“1.”。,5,双精度数(64位): 数据格式如下:,1位符号,11位阶码,53位有效数(显式52位,外加1位隐含的整数“1.”。,63 62 52 51 0 阶 码 有 效 数,符号位,1.,扩展精度数(80位): 数据格式如下:,79 78 64 63 62 0 阶 码 1 有 效 数,符号位,1位符号,15位阶码,64位有效数(内含1位整数1,小数点是隐含的。,.,6,BCD码 压缩BCD码:1字节存放两个BCD码,格式如图a,7 4 3 0 7 4 3 0,(a) (b),非压缩BCD码
4、:1字节存放一个BCD码(低4位),格式如图b 字符串 位串:从任何字节的任何位开始的相邻位序列,最长可达232-1位 字节/字/双字串:是字节、字、双字的相邻序列,最长可达232-1字节。,十位 个位,0或任意 个位,7,ASCII码 ASCII码字符串: 如ABC123 ASCII码数: 如30H39H(09),41H46H(AF) 指针数据 近指针(32位): 是一个32位的段内偏移地址,段内寻址时使用。 远指针(48位): 是一个由16位选择符和32位偏移量组成,段间寻址时使用。,返 回,8,第2节 80X86的寻址方式 80X86的寻址方式共有9种:,1.立即寻址 2.寄存器寻址 3
5、.直接寻址 4.寄存器间接寻址 5.相对寄存器间接寻址 6.基址加变址寻址 7.相对基址加变址寻址 8.基址加比例变址寻址 9.相对基址加比例变址寻址,9,立即寻址 指定的操作数紧跟在操作码之后,直接存放在代码段中。 如:MOV BL,56H ;BL 56H MOV AX,2056H ;AX 2056H MOV ECX,12345678H ;ECX 12345678H 立即数只能作源操作数。不能作目的操作数。 寄存器寻址 操作数在CPU的寄存器中,而寄存器的名由指令指出。 如:INC CL ;CL (CL)+1 MOV AX,BX ;AX (BX),10,直接寻址 操作数有效地址(16位或32
6、位)直接包含在指令中,它位于操作码之后,存放在代码段中。如果指令无前缀指明在那一段中,则默认操作数存放在数据段。 如:MOV AX,2000H ;DS段2000H的内容送AL, 2001H的内容送AH MOV AX,FS:2000H;FS段2000H的内容送AL, 2001H的内容送AH 寄存器间接寻址 操作数的偏移地址存放在寄存器中,而操作数存放在存储器中。 (1)16位寻址 EA= DI、SI、 BX、BP,无前缀默认操作数存放在数据段,无前缀默认操作数存放在堆栈段,11,例如: MOV AX,BX ; AX (DS*10H+(BX) MOV AX,BP ; AX (SS*10H+(BP)
7、 MOV AX,ES:BX; AX (ES*10H+(BX) MOV AX,DS:BP; AX (DS*10H+(BP) (2)32位寻址 EA= EDI、ESI、EBX、EAX、ECX、EDX、ESP、EBP ESP、EBP默认操作数存放在堆栈段,其它默认操作数存放在数据段。 例如:MOV AX,EBX ;DS段字数据送AX MOV AX,EBP ;SS段字数据送AX MOV ECX,ES:EBX ; ES段双字数据送ECX,12,相对寄存器间接寻址 寄存器内容与位移量之和形成操作数的有效地址。即: EA=寄存器+位移量 (1) 16位寻址 EA=BX、BP、DI、SI+位移量(带符号8或1
8、6位整数) 如: MOV AX,2040HBX 或 MOV AX,BX+2040H;DS段(BX)+2040H中的字 数据送AX。 (2) 32位寻址 EA=EAX、EBX、.、ESI、ESP、EBP+位移量(带符号8或32位整数) 如:MOV ECX,1500HEAX;DS段(EAX)+1500H 或MOV ECX, EAX +1500H 中的双字数据送ECX。,13,基址加变址寻址 基址寄存器内容与变址寄存器内容之和形成操作数的偏移地址。即:EA=基址寄存器+变址寄存器 (1) 16位寻址 基址寄存器:BX、BP; 变址寄存器:DI、SI 如:MOV AX,BX+SI 或MOV AX,BX
9、SI;DS段(BX)+(SI)中的字数 据送AX。 (2) 32位寻址 基址寄存器: 任何一个32位通用寄存器 变址寄存器:除ESP之外的任一个32位通用寄存器 如:MOV AX,EBX+ECX ;DS段(EBX)+(ECX)中 或MOV AX,EBXECX 的字数据送AX。,14,相对基址加变址寻址 基址寄存器内容与变址寄存器内容再加偏移量之和形成操作数的有效地址。即: EA=基址寄存器+变址寄存器+偏移量 如 : MOV A X,1234HBX+DI 或MOV AX,BX+DI+1234H 或MOV AX,1234HBXDI ;DS段 (BX)+(DI)+1234H中的字数据送AX。,15
10、,比例变址寻址(32位寻址) 变址寄存器内容乘以比例因子再加位移量之和形成操作数的32位有效地址。即: EA=变址寄存器*比例因子+位移量 如:MOV EAX,1200HESI*4 比例变址加基址寻址(32位寻址) 变址寄存器内容乘以比例因子再加上基址寄存器的内容,形成操作数的32位有效地址。即: EA=变址寄存器*比例因子+基址寄存器 如:MOV AX,EBX*4+ESI,16,相对比例变址加基址寻址(32位寻址) 变址寄存器内容乘以比例因子加上基址寄存器的内容再加位移量之和,形成操作数的32位有效地址。即: EA=变址寄存器*比例因子+基址寄存器+位移量 如:MOV AX,EDI*8+EB
11、X+40H MOV ECX,2000HEDX*4EAX 比例变址寻址、比例变址加基址寻址、相对比例变址加基址寻址只有32位寻址一种情况。,17,与跳转有关的寻址方式 与跳转有关的寻址方式用于确定程序转移或调用的目标。如: 无条件转移语句:JMP dst dst:转移目标 调用语句:CALL dst dst:调用目标 参见转移和调用指令一节。 练习题:假设(DS)=2000H, (ES)=2100H, (SS)=1500H, (SI)=00A0H, (BX)=0100H, (BP)=0040H,指令 MOV AX, src中, 以下src为何种寻址方式?有效地址和物理地址各是多少? (1)100
12、HBX (2)BX (3)BP (4)ES:BX+10H (5)BX (6)1000H (7)SI (8)1000HBX+SI (9)1000HBPSI (10)BXSI,18,第3节 80X86的指令系统 一、指令格式 指令格式: 标号: 操作码 操作数, ;注释 其中: 标号:确定汇编语句的位置,提供跳转、循环的目标。 操作码:汇编语句操作。 操作数:操作数据项,数目因操作码而异。 注释:程序注解。 如:START:MOV AX,DATA MOV DS,AX ;设置DS,19,二、指令系统 80486的指令大致分为: 整数指令:数据传送、算术运算、逻辑运算与移位、串操作、位操作指令、控制转
13、移、标志操作、 按条件设置字节、处理器控制指令、高级语言指令等 浮点数指令:数据传送、算术运算、比较、超越函数、常量、控制等指令 操作系统型指令,20,指令操作数符号说明:,OP1,OP2,OP3:操作数 reg :通用寄存器。长度可以是8位、16位、32位 Sreg :段寄存器(段选择符) reg8 :8位通用寄存器 reg16 :16位通用寄存器 reg32 :32位通用寄存器 mem :存储器。长度可以是8位、16位、32位 mem8 :8位存储器 mem16 :16位存储器 mem32 :32位存储器 imm :立即数。长度可以是8位、16位、32位 imm8 :8位立即数,21,与运
14、算有关的标志 标志寄存器FLAGS中存放运算结果的属性。 CF:进位/借位标志。加、减运算最高位产生进位/借位时置1。 AF:辅助进位/借位标志。加、减运算时低半字节位产生进位/借位时置1。 OF:溢出标志。有符号二进制加、减运算结果超出范围时置1。 ZF:零标志。结果为零时置1。 SF:符号标志。结果为负时置1。 PF:奇偶标志。结果“1”的个数为偶数时置1。,22,指令执行对标志位影响的符号说明: X :表示相应标志位状态依运算或操作结果决定 0 : 表示相应标志位无条件清“0” 1 :表示相应标志位无条件置“1” U : 表示相应标志位状态未定义,状态随机 - : 表示相应标志位状态不受
15、影响,保持原状态,23,数据传送类指令 用于实现存储器与寄存器、寄存器与寄存器、累加器与I/O端口之间字节、字或双字的传送,也可将立即数传送到存储器或寄存器。这类指令基本上不影响标志位。 传送指令MOV 指令格式:MOV OP1, OP2 reg/Sreg,reg reg, Sreg reg/Sreg, mem mem, reg/Sreg reg, imm mem, imm,24,功能:把OP2的内容传送到OP1中,OP1和OP2为 字节、字或双字 说明:立即数只能作为源操作数,而其他三种既可作源操作数又可作目的操作数; 存储器和存储器之间以及段寄存器和段寄存器之间不允许传数,而通用寄存器之间
16、则允许相互传数。 例如:用如下指令可给数据段寄存器DS赋初值 MOV AX,DATA MOV DS, AX 再如:MOV EBX, 12345678H MOV AX, BX+24,25,交换指令XCHG 指令格式:XCHG OP1, OP2 reg, reg mem,reg reg, mem 功能:用于交换两个操作数。 说明:指令中的两个操作数可以是两个寄存器操作数,或一个寄存器与一个存储器操作数。 例如:XCHG AX, BX XCHG AX, BX XCHG BX+20H, AX,26,I/O指令IN和OUT 指令格式: IN OP1,OP2 OUT OP1, OP AL, imm8 im
17、m8, AL AX,imm8 imm8, AX EAX,imm8 imm8, EAX AL, DX DX, AL AX, DX DX, AX EAX,DX DX, EAX 功能:用于在I/O端口和AL、AX或EAX累加器之 间交换数据。,27,例如: IN AL,0FAH ;从端口FAH输入8位数到AL IN EAX,28H ; 将端口28H、29H、2AH和 2BH的32位数送EAX MOV DX,3AEH; I/O地址大于255时应通过 DX间接寻址 IN AX,DX ;从DX指出的端口输入16位数AX OUT 21H,AL ;将8位数从AL输出到端口21H OUT DX,EAX ;将32
18、位数从EAX输出到DX指 出的端口,28,装入有效地址指令LEA 格式: LEA Op1, OP2 reg32,mem reg16,mem 功能:将有效地址(即偏移地址)送通用寄存器。 例如:LEA ECX, DOLLARESI*4+EDX 设: EDX=30H,ESI=32H,DOLLAR=7580H, 则 ( ECX)=7678H(32H*4 + 30H +7580H),29,装入全地址指令LDS,LES,LFS.LGS,LSS 格式: LDS reg,mem LES reg,mem LFS reg,mem LGS reg,mem LSS reg,mem 功能:取mem指示的32位或48位
19、全地址指针(即一个16位段选择符和一个16位或32位偏移地址)装入段寄存器和16位或32位reg中。,30,对于实地址方式和虚拟8086方式,段基址和偏移地址都是16位 ,段基址送段寄存器,偏移地址送reg中。 例如:X DD 12345678H LDS SI ,X ;DS=1234H,SI=5678H 对于16位和32位保护方式,选择符送段寄存器,偏移地址送reg中。 例如:X DD 12345678H;32位偏移值 DW 0010H ;16位选择符 LDS ESI,X ;ESI=12345678H, DS=0010H,31,压栈/弹栈指令PUSH/POP 格式:PUSH OP1 POP O
20、P1 imm16 mem16 imm32 mem32 mem16 reg16 mem32 reg32 reg16 功能: reg32 PUSH指令使(E)SP的内容减2或减4,然后把16位或32位的立即数、存储器操作数或寄存器操作数压入堆栈, SS:(E)SP指向新的栈顶。 POP指令从堆栈把字或双字弹出至16位或32位存储器或通用寄存器中,(E)SP的内容加2或加4。,32,例如:PUSH AX;(ESP)-2 ESP,(AX) (ESP) PUSH BX;(ESP)-2 ESP,(BX) (ESP) PUSH CX;(ESP)-2 ESP,(CX) (ESP) . . . POP CX;(
21、ESP) CX,(ESP)+2 ESP POP BX;(ESP) BX,(ESP)+2 ESP POP AX;(ESP) AX,(ESP)+2 ESP 堆栈为“先进后出”的数据结构。,33,栈底,栈底,SP,SP,00H 20H 60H 30H 40H 60H,栈顶,SS,SS,图A,图B,设: AX=6040H,BX=3060H,CX=2000H 执行PUSH指令后,堆栈状态如图A,执行POP指令后,堆栈状态如图B。,34,全部通用寄存器压栈和出栈指令 格式:PUSHA/POPA;16位通用寄存器压栈和 出栈指令。入栈顺序为: AX、CX、BX、DX、 SP、BP、SI和DI。 PUSHAD
22、/POPAD;32位通用寄存器压栈和 出栈指令。入栈顺序为: EAX、ECX、EBX、EDX、 ESP、EBP、ESI和EDI。 其中:SP和ESP为操作前的栈顶指针。,35,标志寄存器传送指令 指令格式: LAHF ; F寄存器内容送AH指令 SAHF ; AH内容送F寄存器指令 PUSHF ; 16位F内容进栈指令(保存F) POPF ; 16位F内容出栈指令(恢复F) PUHSFD;32位F内容进栈指令(保存F) POPD ;32位F内容出栈指令(恢复F),36,查表转换指令XLAT 格式:XLAT ; AL (BX)+(AL) 功能:完成一个字节的查表转换 BX指向表的首地址(DS段内
23、),AL装入要转换的代码在表中的序号,并XLAT指令执行的结果存于AL中。 例如:查找ASCII码表中, (BX) 3的ASCII码。 程序如下: (BX)+(AL) MOV DS,AX LEA BX,TABLE;DS段表的首地址送BX MOV AL,3 ;要转换的代码在表中的序号3送AL XLAT ;AL (BX)+(AL),查找到的3的 ASCII码33H保存在AL中,序号,0 1 2 3 4.,TABLE 30H 31H 32H 33H 34H . .,37,算术运算指令 支持加、减、乘、除四种基本算术运算,其操作对象可以是字节、字、双字的有符号和无符号二进制整数,也可以是无符号的压缩、
24、非压缩BCD码。算术运算指令一般会影响FLAGS寄存器中的状态标志。 加法和减法指令ADD/SUB 格式:ADD OP1,OP2; OP1 OP1+OP2,置标志位 reg, reg reg, mem reg, imm mem,reg mem,imm,38,ADD的功能:将OP1和OP2相加,结果存放在OP1。例: ADD AX,BX ; AX (AX)+(BX) ADD EBX,ECX ;EBX (EBX)+(ECX) ADD 3000H,AX ;3000H (3000H)+(AX) ADD 3000H,23 ; 3000H (3000H)+23 SUB OP1,OP2 ; OP1 OP1-
25、OP2 ,置标志位 reg, reg reg, mem reg, imm mem,reg mem,imm,39,SUB的功能:从OP1中减去OP2,结果存OP1中。 例:SUB AX,BX ; AX (AX)-(BX) SUB EAX,ECX ;EAX (EAX)-(ECX) SUB N,12345678H; N (N)-12345678H ADD和SUB对标志位的影响: OF SF ZF AF PF CF X X X X X X 例:设AL=64H,AH=0A8H,求执行下列指令的结果和标志位的状态。 (1) ADD AL,AH ; AL (AL)+(AH),有符号数. 解:01100100
26、 100D 得: (AL)=0CH(正确) + 10101000 -88D OF SF ZF AF PF CF 1 00001100 12D 0 0 0 0 1 1,40,(2) SUB AL,AH ; AL (AL)-(AH),有符号数. 解:| 01100100 100D 得: (AL)=BCH(不正确) - 10101000 -88D OF SF ZF AF PF CF 10111100 -68D 1 1 0 1 0 1 有符号数加、减的结果有“溢出”的判断规则: 对于加法: 正数+正数=负数,负数+负数=正数 对于减法: 正数-负数=负数, 负数-正数=正数 例:设(AL)=7FH,(
27、BL)=40H,判断执行ADD AL,BL 指令的结果是否正确。 解: 01111111 127D 得: (AL)=0BFH(不正确) + 01000000 64D OF SF ZF AF PF CF 10111111 -65D 1 1 0 0 0 0,41,带进/借位的加、减法指令ADC/SBB 格式:ADC OP1,OP2;OP1 OP1+OP2+CF ,置标志位 reg, reg reg, mem reg, imm mem,reg mem,imm ADC的功能:将OP1、OP2和进位标志位CF相加,结果 存放在OP1。 例: ADC AX,375 ; AX (AX)+375+CF ADC
28、 EBX,ECX;EBX (EBX)+(ECX)+CF,42,SBB OP1,OP2; OP1 OP1-OP2-CF ,置标志位 reg, reg reg, mem reg, imm mem,reg mem,imm SBB的功能:从OP1中减去OP2,再减去借位标志CF,结果存OP1中。 例: SBB AX,BX;AX (AX)-(BX)-CF SUB ECX,456789ABH; ADC和SBB对标志位的影响: OF SF ZF AF PF CF X X X X X X,43,ADD 和ADC、SUB和SBB经常配合使用,完成64位加、减法运算。例: ADD EAX,ECX;EAX (EAX
29、)+(ECX) ADC EBX,EDX;EBX (EBX)+(EDX)+CF SUB EAX,ECX ;EAX (EAX)-(ECX) SBB EBX,EDX ;EBX (EBX)-(EDX)-CF 加1/减1指令INC/DEC 格式:INC OP1; OP1 OP1+1,置标志位 mem reg,44,格式:DEC OP1 ; OP1 OP1-1,置标志位 mem reg 功能:INC使操作数的值加1;DEC使操作数的值减1, 常用于修改计数器或地址指针。 例:下面是从300H端口输出256个字节数据的程序段: BUFFER DB 12,34, MOV CX,256 MOV SI,OFFSE
30、T BUFFER MOV DX,300H NEXT :MOV AL,SI OUT DX,AL INC SI ;地址加1,取下一个数 LOOP NEXT ;未完,继续,45,INC和DEC对标志位的影响: OF SF ZF AF PF X X X X X 交换加法指令XADD 格式:XADD OP1,OP2;OP1 OP1+OP2 OP2 OP1 功能:OP1与OP2相加,结果存于OP1中,并将OP1的值送OP2中。 例:XADD EAX,ECX ;EAX (EAX)+(ECX) ECX (EAX) 变反指令NEG 格式:NEG OP1 ;OP1 0-OP1,置标志位 功能:求OP1的相反数。,
31、46,例:NEG AL ;AL 0-(AL) 若(AL)=13H,执行NEG指令后,(AL)=EDH 比较指令CMP 格式:CMP OP1,OP2;OP1-OP2,置标志位 reg, reg reg, mem reg, imm mem,reg mem,imm 功能:将OP1减去OP2,但结果不存在OP1中,只使结果影响标志位。 CMP指令用于比较OP1与OP2的大小,由标志位来反映两数的关系(见表A)。,A-B CF ZF SF OF A=B 0 1 0 0 AB 0 0 - - AB - 0 0 0,表A,比较并交换指令CMPXCHG 格式:CMPXCHG OP1,OP2 功能:将OP1与累
32、加器(AL、AX或EAX)的内容进行比较,若相等则将OP2存于OP1中;否则将OP1送到累加器中。例:CMPXCHG CX,DX;若(CX)=(AX) 则CX (DX),否则AX (CX),48,无符号数乘法指令MUL 格式:MUL OP1 reg mem 功能:被乘数隐含在累加器中(AL,AX,EAX),OP1为乘数。字节运算时乘积返回到AX;字运算时乘积 返 回 到 DX:AX;双 字 运 算 时 乘 积 返 回 到 EDX:EAX。 例:MUL CL; AX ( AL)*(CL) MUL BX;DX:AX (AX)*(BX) MUL DWORDESI;EDX:EAX (EAX)*(ESI
33、) MUL指令影响标志位 OF和 CF: 若积的高字节、字或双字为“0”,则OF、CF清“0”,否 则OF、CF置“1”。,49,有符号乘法指令IMUL 指令格式有下列三种: (1)单操作数:IMUL OP1 reg mem 功能:被乘数隐含在累加器中(AL,AX,EAX),OP1为乘数。字节运算时乘积返回到AX;字运算时乘积 返 回 到 DX:AX;双 字 运 算 时 乘 积 返 回 到 EDX:EAX。 (2)双操作数:IMUL OP1,OP2 reg, reg reg, mem reg, imm 功能:OP1乘以OP2,积存放在OP1中。,50,(3)三操作数:IMUL OP1,OP2,
34、OP3 reg, reg, imm reg, mem, imm 功能:OP2乘以OP3,积存放在OP1中。 例如: IMUL DL ;AX (AL)*(DL) IMUL EBX ;EDX:EAX (EAX)*(EBX) IMUL BL,CL ;BL (BL)*(CL) IMUL BL,CL,4 ;BL (BL)*(CL)*4 IMUL指令影响标志位 OF 和 CF 若积的高字节、字或双字不是积的符号位扩展, 则OF、CF置“1”,否则OF、CF清“0”。,51,除法指令DIV/IDIV 格式:DIV OP1 ;无符号除法 reg mem IDIV OP1 ;有符号除法 reg mem 功能:
35、字节运算时,被除数隐含在AX中,OP1为字节除数,商存入AL,余数存入AH。 字运算时,被除数隐含在DX:AX中,OP1为字除数,商存入AX,余数存入DX 双字运算时,被除数隐含在EDX:EAX中,OP1为双字除数,商存入EAX,余数存入EDX。,52,例如: DIV BL ;(AX)/(BL),商存入AL,余数存入AH。 IDIV ECX ;(EDX:EAX)/(ECX) 商存入EAX,余数存入EDX。 符号扩展指令 格式: CBW ;将AL中8位带符号数扩展为16位存入AX。 CWD ;将AX中16位带符号数扩展为32位存入DX:AX CWDE;将AX中16位带符号数扩展为32位 存入EA
36、X。 CDQ ;将EAX中32位带符号数扩展为64位 存入 EDX:EAX。,53,符号扩展指令常用于带符号数除法运算时,对被除数位数的扩展。当两个带符号数的字节/字/双字数相除时,必须将被除数扩展为双倍长度。 例如:编写程序,计算789AH/1234H。 BUFFER DW 789AH ;被除数 DW 1234H ;除数 DD 0 ;存结果 START: MOV BX,OFFSET BUFFER MOV AX,BX ;取被除数 CDW ;字扩展为双字,AX符 号位扩展到DX各位 IDIV 2BX ;带符号除 MOV 4BX,AX ;存商 MOV 6BX,DX ;存余数,十进制(BCD码)调整
37、指令 压缩BCD码运算:将压缩BCD数用二进制加、减指令 (ADD, SUB, ADC, SBC)运算,运算结果必须用以下调整指 令调整为压缩BCD数的结果。 指令格式及功能: DAA ;将AL中的和调整为压缩BCD数 DAS ;将AL中的差调整为压缩BCD数 非压缩BCD字节数加、减、乘、除(ASCII调整) 非压缩BCD码运算:将非压缩BCD数用二进制加、减、乘、除指令运算,配合相应的调整。 AAA ;将AL中的和调整为非压缩BCD数 AAS ;将AL中的差调整为非压缩BCD数 AAM ;将AL中的积调整为非压缩BCD数 AAD ;调整AX中的被除数,相除的商即为非压缩BCD数,55,BC
38、D码运算编程举例 例1 求组合BCD数1283+2574=3857 BCD1 DB 83H,12H BCD2 DB 74H,25H BCD3 DB ?, ? START: MOV AL,BCD1 ADD AL,BCD2 DAA ;调整,(AL)=57H MOV BCD3,AL ;存和的底字节 MOV AL,BCD1+1 ADC AL,BCD2+1 DAA ;调整,(AL)=38H MOV BCD+1,AL ;存和的高字节,例2 两个ASCII码数(7-5)相减 MOV AL, 7 ;37H SUB AL, 5 ;37H-35H AAS ;调整,(AL)=02H 例3 非组合BCD数6*8=48
39、 MOV AL, 06H MOV BL, 08H MUL BL ;AX (AL)*(BL) AAM ;调整,(AX)=0408H 例4 非组合BCD数17/5=3余2 MOV AX,0107H MOV BL, 05H AAD ;调整被除数,(AX)=0011H DIV BL ;相除,(AL)=03,(AH)=02,逻辑运算与移位指令 这类指令包括与、或、非、异或、测试和左移、 右移、循环左/右移指令。除NOT外,都影响某些 标志位。 逻辑与/或/异或指令AND/OR/XOR 格式:AND/OR/XOR OP1, OP2 reg,mem reg,imm mem,reg57 mem,imm 功能:
40、两操作数按位与、或、异或,结果存入OP1中。,58,例如:MOV AL,6 AND AL,0FH ;(AL)=06H MOV AL,6 OR AL,30H ;(AL)=36H MOV AL,0F0H XOR AL,0FH ;(AL)=00H 测试指令TEST 格式:TEST OP1,OP2 reg, reg reg,mem reg,imm 功能:两操作数按位与,置标志位,不保存结果。,59,TEST常用于测试某位的状态。例如测试打印机是否空闲的程序段如下: MOV DX,3BDH PRTBUSY:IN AL,DX ;读打印机状态 TEST AL,80H ;测试是否空闲 JZ PRTBUSY ;
41、忙,继续测试 . . . 逻辑非指令NOT 格式: NOT OP1 reg mem 功能:将操作数各位求反,对标志位没有影响.,60,算术/逻辑左移指令SAL/SHL 格式: SAL/SHL OP1, OP2 reg, imm8 mem,imm8 reg, CL mem, CL 功能:将OP1向左移位,移动的次数由OP2决定,若移动的次数为1,OP2为立即数,其它情况将移动的次数送入CL中。操作数每左移一位,在最低位补0,最高位移进CF中。 例:设(AL)=01010011B,将AL的内容左移3位。 MOV CL,3 SHL AL,CL ; (AL)=10011000,61,算术/逻辑右移指令
42、SAR/SHR 格式: SAR/SHR OP1, OP2 reg, imm8 mem,imm8 reg, CL mem, CL 功能:将OP1向右移位,移动的次数由OP2决定,若移动 的次数为1,OP2为立即数,其它情况将移动的次数送入CL中。 对于SHR指令,操作数为无符号数,每右移一位,在最 高位补0,最低位移进CF中。 对于SAR指令,操作数为有符号数,每右移一位,最高 位保持不变,最低位移进CF中。,62,例:设(AL)=10101001B,将AL的内容算术/ 逻辑右移3位。 算术右移3位: MOV CL,3 SAR AL,CL;(AL)=11110101B 逻辑右移3位: MOV C
43、L,3 SHR AL,CL; (AL)= 00010101B,63,循环移位指令ROL/ROR/RCL/RCR 格式:ROL/ROR/RCL/RCR OP1, OP2 reg,imm8 mem,imm8 reg,CL mem,CL 功能:ROL 为左循环移位指令,ROR为右循环移位指令,RCL和RCR则分别为带CF的左循环移位和右循环移位指令。,CF,CF,CF,CF,ROL,ROR,RCL,RCR,64,串操作指令 串操作是指对存储器中的一个或多个长度为字节、 字或双字的字符串进行操作,包括串传送、串装入、 串存储、串比较、串扫描、串输入、串输出等。 串操作指令采用隐含寻址方式,约定: DS
44、:SI(ESI)寻址源串,ES:DI(EDI)寻址目的串。 且偏移指针SI(ESI),DI(EDI)可根据DF方向标志 自动增量或减量,以指向串中下一项。即: 当DF=0时,增1(字节)、2(字)或4(双字) 当DF=1时,减1(字节)、2(字)或4(双字),65,串传送指令 格式:MOVSB ;字节传送 MOVSW ;字传送 MOVSD ;双字传送 功能:将DS:SI(ESI)指定源串中的数据传送到ES:DI(EDI)指定的目的串中,并修自动改源、目指针。 串装入指令 格式:LODSB ;装入字节串 LODSW ;装入字串 LODSD ;装入双字串 功能:将 DS:SI(ESI)指定源串中的
45、数据传送到AL、AX或EAX中,并自动修改源指针。,66,串存储指令 格式:STOSB ;存字节串 STOSW ;存字串 STOSD ;存双字串 功能:将AL、AX或EAX中的数据传送到由 ES:DI(EDI)指定的目的串中,并修改指针。 串比较指令 格式:CMPSB ;字节串比较 CMPSW ;字串比较 CMPSD ;双字串比较 功能:将DS:SI(ESI)指定源串中的数据与ES:DI(EDI)指定的目的串中的数据进行比较,置标志位并自动修改指针。,67,串扫描指令 格式:SCASB ;扫描字节串 SCASW ;扫描字串 SCASD ;扫描双字串 功能:用AL、AX或EAX中的数据减去由 E
46、S:DI(EDI)指定的目的串中的数据,置标志位并自动修改目的指针。 串输入指令 格式:INSB ;输入字节串 INSW ;输入字串 INSD ;输入双字串 功能:从DX指定的端口输入数据至由 ES:DI(EDI)指定的目的串中,并自动修改目的指针。,68,串输出指令 格式:OUTSB ;输出字节串 OUTSW ;输出字串 OUTSD ;输出双字串 功能:将 DS:SI(ESI)指定源串中的数据输出到由DX指定的端口,并自动修改源指针。 重复前缀REP/REPZ/REPE/REPNE/REPNZ 在串操作指令前加上重复前缀,可使该指令重复执行。重复前缀的功能为: REP: CX (CX)-1
47、,当(CX) 0时重复。 REPZ/REPE:相等时重复。即: CX (CX)-1,当(CX) 0且ZF=1时重复。 REPNE/REPNZ:不相等时重复。即: CX (CX)-1,当(CX) 0且ZF=0时重复。 REP常与MOVS和STOSZ指令配合使用。 REPZ/REPE 和REPNE/REPNZ常与CMPS和SCANS指令配合使用。,69,串操作指令应用举例 使用串操作指令时,根据需要设置以下内容: 设置DS:SI(ESI);ES:DI(EDI) 设置DF标志 设置CX(ECX) 选用重复前缀REP、REPE/REPZ、REPNE/REPNZ,70,例1 将数据段中的字符串ABC45
48、传送到附加段中。 程序如下: DATA SEGMENT ST:MOV AX,DATA YCH DB ABC45 MOV DS,AX DATA ENDS MOV AX,EXTRA EXTRA SEGMENT MOV ES,AX MCH DB 5 DUP(?) LEA SI,YCH EXTRA ENDS LEA DI,MCH CODE SEGMENT MOV CX,5 ASSUME CS:CODE CLD ASSUME DS:DATA REP MOVSB ASSUME ES:EXTRA CODE ENDS END ST,71,控制转移指令 控制转移指令包括: 无条件转移指令(JMP) 条件转移指令
49、(JA、JB、JE) 循环控制指令(LOOP、LOOPZ、LOOPNZ) 调用/返回指令(CALL、RET) 中断/中断返回指令(INT、IRET) 无条件转移指令JMP 格式:JMP OP1 lable ;标号 reg mem 功能:无条件地控制程序转移到OP1所指定的目标地址。,72,JMP寻址方式: 短转移:在段内的短距离(-128-127)转移。 段内转移:CS值不变,只给出地址偏移值。 段间转移:CS和(E)IP的值都发生改变的转移 为明确表示标号或存储单元的类型,可在操作数前加SHORT、NEAR、FAR、WORD、DWORD、FWORD等修饰符来限定。如: 段内直接短转移:JMP
50、 SHORT PTR 标号 段内直接转移:JMP NEAR PTR 标号 段内间接转移:JMP WORD PTR reg或mem 段间直接转移:JMP FAR PTR 标号 段间间接转移:JMP DWORD PTR mem,73,例如: JMP NEAR PTR TABLEEBX ;带标号的段内转移 JMP FAR PTR TABLEEBX ;带标号的段间转移 JMP SHORT PTR TABLEEBX ;带标号的短转移 JMP WORD PTRDX ;16位寻址时不带标号的段内转移 JMP DWORD PTRDX ;16位寻址时不带标号的段间转移 JMP DWORD PTREDX;32位寻址时不带标号的段内转移 JMP FWORD PTREDX;32位寻址时不带标号的段间转移,74,条件转移指令Jcc (p92表) 格式:Jcc OP1 lable ;短标号或近标号 功能:根据CPU中的标志位状态组成的转移条件CC,决定程序的
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 西藏拉萨市10校2025年物理高二第二学期期末达标测试试题含解析
- 冬至照片课件
- 浙江省宁波市奉化高中、三山高中等六校2025届物理高一第二学期期末经典模拟试题含解析
- 2025届湖南省湘潭市物理高二下期末考试试题含解析
- 2025年甘肃省武威市河西成功学校物理高二第二学期期末复习检测模拟试题含解析
- 2025年河南省漯河市物理高一下期末综合测试试题含解析
- 二零二五版草原承包权抵押贷款与草原生态修复合同
- 二零二五年度新型绿色建筑安装工程施工劳务合同
- 二零二五年度奥迪汽车技术支持服务合同
- 2025阿里云开发者社区网络安全防护与风险控制合同
- 石油工程概论
- 工商银行对公客户经理(综合)试题
- 2019新人教高一英语必修一-课本听力与视频材料原文(精校打印版)
- (完整版)第七章发酵食品加工技术
- 环境卫生学第十章-公共场所卫生-课件
- (完整版)人教版高中英语单词表(含音标)
- 产科运用PDCA循环提高母乳喂养成功率品管圈成果汇报
- 新疆高校毕业生三支一扶计划招募考试真题2023
- 恢复执行申请书
- 1:200 万南海地质地球物理图系(简介)
- 建筑物拆除工程监理实施细则
评论
0/150
提交评论