版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第第3章章 80 x86汇编言语程序设计汇编言语程序设计(上上)16位汇编版本位汇编版本80 x86的操作数寻址方式有:的操作数寻址方式有:1、立刻寻址、立刻寻址2、存放器寻址、存放器寻址3、存储器寻址、存储器寻址4、端口寻址、端口寻址3.1 80 x86的寻址方式的寻址方式3.1.1 操作数寻址操作数寻址1、立刻寻址、立刻寻址 操作数以常量方式直接放在指令中,紧跟在操作码之后操作数以常量方式直接放在指令中,紧跟在操作码之后 机器码存放方式如下:机器码存放方式如下:立刻寻址例如立刻寻址例如 MOV AH, -40 ; -40AH MOV AX, 34D8H ; 34HAH, D8HAL MOV
2、 AX, -40 ; 0FFD8H(-40)AXOPD8操作码操作码8位操作数位操作数低地址低地址高地址高地址OP操作码操作码D16高高8位位D16低低8位位16位操作数位操作数代码段代码段代码段代码段2、存放器寻址、存放器寻址 操作数存放在某个存放器中,指令指定存放器号操作数存放在某个存放器中,指令指定存放器号 存放器号存放器号操作数操作数存放器寻址例如存放器寻址例如 MOV AH, BL ;(BL)-AH MOV DS, AX ;(AX)-DS MOV SI, AX ;(AX)-SI指令指令存放器存放器有效地址有效地址(EA)的的4种组成成分:种组成成分: 位移量位移量displaceme
3、nt 存放在指令中的存放在指令中的8位、位、16位或位或32位的数,是一个地址位的数,是一个地址 有效地址的计算:有效地址的计算: EA=基址基址 +变址变址*比例因子比例因子+ 位移量位移量 比例因子比例因子scale factor 32位汇编才有位汇编才有 其值可为其值可为1,2,4或或8,386及其后继机型新添加的及其后继机型新添加的 变址变址index 存放在变址存放器中的内容,用于访问数组的某个元存放在变址存放器中的内容,用于访问数组的某个元素素 基址基址base 存放在基址存放器中的内容,用于指向数组的首地址存放在基址存放器中的内容,用于指向数组的首地址四种成分四种成分16位寻址位
4、寻址位移量位移量0, 8, 16位位0, 8, 32位位基址寄存器基址寄存器BX, BP任何任何32位通用寄存器位通用寄存器(包括包括ESP)变址寄存器变址寄存器SI, DI除除ESP以外的以外的32位通用寄存器位通用寄存器比例因子比例因子 无无1, 2, 4, 81, 2, 4, 8访存类型访存类型 所用段及寄存器所用段及寄存器缺省选择规则缺省选择规则指令指令代码段代码段 CS用于取指用于取指堆栈堆栈堆栈段堆栈段 SSn所有的堆栈的进栈和出栈所有的堆栈的进栈和出栈n任何用任何用ESP或或EBP或或BP作作为基址寄存器的访存为基址寄存器的访存目的串目的串附加数据段附加数据段 ES串处理指令的目
5、的串串处理指令的目的串局部数据局部数据数据段数据段 DS除相对于堆栈以及串处理的除相对于堆栈以及串处理的目的串以外的所有数据访问目的串以外的所有数据访问1串操作指令的目的串必需用串操作指令的目的串必需用ES段段2PUSH指令的目的和指令的目的和POP指令的源必需用指令的源必需用SS段段3程序的指令必需存放在程序的指令必需存放在CS段段数据的存放比较灵敏,除了放在默许的数据的存放比较灵敏,除了放在默许的DS段,还可以段,还可以存放在别的段,此时访问他们需求运用段超越前缀,存放在别的段,此时访问他们需求运用段超越前缀,可用的段超越前缀有可用的段超越前缀有CS:, DS:, ES:, SS:, FS
6、:, GS:。3、直接寻址、直接寻址 操作数地址的偏移量操作数地址的偏移量EA在指令中在指令中段基地址段基地址EA操作数操作数+指令指令存储器存储器MOV AX, 2000H ; 立刻寻址立刻寻址MOV AX, 2000H ; 直接寻址直接寻址直接寻址例如直接寻址例如1 MOV AX, 1000H 物理地址物理地址 设设(DS)=10A0H 代码段代码段 + OP 00H 10H 数据段数据段 11A00H 30H 50H 50H 30H AX(本章中图示存储器地址从上到下递增本章中图示存储器地址从上到下递增低地址低地址10A00H1000H11A00H10A0H30H50H11A00H直接寻
7、址例如直接寻址例如2MOV BL, ES:0100H 物理地址物理地址 设设(ES)=3000H 30000H (DS)=2000H + 0100H 30100H 4B 00 BL4B在汇编言语指令中,可以用符号地址替代数值地址在汇编言语指令中,可以用符号地址替代数值地址如:如:MOV AX, BUFF或或 MOV AX, BUFF其中其中BUFF为存放数据单元的符号地址。为存放数据单元的符号地址。3000H30100H30100H4B4、存放器间接寻址、存放器间接寻址 操作数在存储器中,操作数地址的偏移量操作数在存储器中,操作数地址的偏移量EA在存放器中在存放器中EA操作数操作数+存储器存储
8、器指令指令存放器存放器段基地址段基地址存放器间接寻址例如存放器间接寻址例如 MOV AL, BX MOV AX, CS:SI MOV BP, AH MOV AH, BPMOV BX, SIMOV CX, SI设设 (SS)=1000H, (DS)=2000H , (BP)=0B10H, (SI)=032AH 物理地址物理地址 物理地址物理地址 10000H 20000H + 0B10H + 032AH 40H 00H 3EH 46H40H AH10B10H2032AH463EH BX2032BH10B11H SI032AH032AH1000H2000H0B10H032AH10B10H10B10
9、H2032AH2032AH40H3EH46032AH5、基址寻址、基址寻址 操作数的有效地址是基址存放器的内容加上指令操作数的有效地址是基址存放器的内容加上指令中指定的位移量中指定的位移量地址地址+操作数操作数指指 令令基址存放器基址存放器段基地址段基地址存储器存储器EA基址寻址例如基址寻址例如 MOV AX, 3000HBX (或或BX+3000H) MOV AX, COUNTBX ; COUNT是符号地址是符号地址 或或 MOV AX,COUNT+BX 假设假设(DS)=3000H, (BX)=2000H,COUNT=4000H 30000H 2000H + 4000H 1234H3600
10、0H 34H 12HAX3000H2000H4000H36000H36000H34H12 6、变址寻址、变址寻址 地址地址+操作数操作数指指 令令变址存放器变址存放器段基地址段基地址存储器存储器EA变址寻址例如变址寻址例如 MOV CX, 6020HSI (或或SI+6020H) MOV DX, COUNTSI ; COUNT是符号地址是符号地址 或或 MOV AX,COUNT+SI 假设假设(DS)=3000H, (SI)=2000H,COUNT=1000H 30000H 2000H + 1000H 6734H33000H 34H 67HDX3000H2000H1000H33000H3300
11、0H34H67 7、基址变址寻址、基址变址寻址1无位移量的基址变址寻址无位移量的基址变址寻址 操作数的有效地址是一个基址存放器和一个变址存操作数的有效地址是一个基址存放器和一个变址存放器的内容之和放器的内容之和变址值变址值基址值基址值+操作数操作数指指 令令变址存放器变址存放器基址存放器基址存放器段基地址段基地址存储器存储器EA无位移量基址变址寻址例如无位移量基址变址寻址例如 MOV AX, BX+DI MOV AX, BXDI 假设假设 (DS)=2100H, (BX)=0158H, (DI)=10A5H,物理地址物理地址 21000H 0158H+ 10A5H 221FDH 34H 12H
12、1234HAX2100H0158H10A5H221FDH221FDH34H122基址变址相对寻址基址变址相对寻址 操作数的有效地址是一个基址存放器的内容、操作数的有效地址是一个基址存放器的内容、一个变址存放器的内容及位移量之和一个变址存放器的内容及位移量之和 变址值变址值基址值基址值+操作数操作数指指 令令变址存放器变址存放器基址存放器基址存放器段基地址段基地址存储器存储器EA基址变址相对寻址例如基址变址相对寻址例如 MOV AX, MASKBX+SI;MASK是符号地址是符号地址 假设假设 (DS)=3000H, (BX)=2000H, (SI)=1000H, MASK=0250H 物理地址
13、物理地址 30000H 2000H 1000H + 0250H 33250H 20H 43H 4320H AX3000H2000H1000H0250H33250H33250H20H438、端口寻址、端口寻址1直接寻址直接寻址I/O Port Direct Addressing直接寻址是运用一字节立刻数寻址,因此直接寻址是运用一字节立刻数寻址,因此I/O端口的端口的寻址范围为寻址范围为00HFFH,最多为,最多为256个。个。 2间接寻址间接寻址I/O Port Indirect Addressing 间接寻址由间接寻址由DX存放器间接给出存放器间接给出I/O端口地址,为两个端口地址,为两个字节
14、,所以最多可寻址字节,所以最多可寻址216=64K个端口地址。个端口地址。 MOVDX, 3FCHINAL, DX;从;从3FCH端口读入端口读入1个字节个字节3.1.2 转移操作寻址转移操作寻址段内直接寻址段内直接寻址转向的有效地址是当前转向的有效地址是当前IP/EIP存放器的内容和指令存放器的内容和指令中指定的位移量之和。位移量在条件转移以及短转移中指定的位移量之和。位移量在条件转移以及短转移中只需中只需8位,其它情况下为位,其它情况下为16位。位。 偏移量偏移量机器码机器码程序程序00000405PROG_S: ADD AL,05H000290 NOP0003EBFB JMP SHORT
15、 PROG_S000590 NOP段内间接寻址段内间接寻址转向有效地址是一个存放器或是一个存储单元的内转向有效地址是一个存放器或是一个存储单元的内容容 。所得到的转向的有效地址用来取代。所得到的转向的有效地址用来取代IP/EIP存放器存放器的内容。的内容。 设:设:DS=2000H,BX=1000H,变量,变量TABLE的有效地址为的有效地址为1000H,21000H=0040H,22000H=5678H,那么以下三条指令分别执行后结果如下:,那么以下三条指令分别执行后结果如下: JMP BX;执行后;执行后IP=1000H JMP BX ;执行后;执行后IP=0040H JMP TABLEB
16、X ;执行后;执行后IP=5678H段间直接寻址段间直接寻址指令中直接提供了转向段地址和偏移地址,用指令指令中直接提供了转向段地址和偏移地址,用指令中提供的偏移地址取代中提供的偏移地址取代IP/EIP存放器,用指令中提供存放器,用指令中提供的段地址取代的段地址取代CS存放器的内容就完成从一个段到另一存放器的内容就完成从一个段到另一个段的转移操作。个段的转移操作。 JMP FAR PTR NEXT_PRO段间间接寻址段间间接寻址用存储器中的相继字的内容来取代用存储器中的相继字的内容来取代IP/EIP和和CS存放器存放器中的原始内容以到达段间转移的目的。中的原始内容以到达段间转移的目的。 设:设:
17、(DS)=2500H,(SI)=1300H,(26300H)=4500H,(26302H)=32F0H, 那么执行以下指令后结果如下:那么执行以下指令后结果如下:JMP DWORD PTR SI;执行后;执行后CS=32F0H,IP=4500H3.2 80 x86的指令系统的指令系统n数据传送指令数据传送指令n算术运算指令算术运算指令n逻辑运算与移位指令逻辑运算与移位指令n串操作指令串操作指令n控制转移指令控制转移指令n处置器控制指令处置器控制指令3.2.1数据传送指令数据传送指令 通用数据传送指令通用数据传送指令 地址传送指令地址传送指令 标志存放器传送指令标志存放器传送指令 输入输出指令输
18、入输出指令 类型转换指令类型转换指令1、通用数据传送指、通用数据传送指令令PUSH(push onto the stack) 进栈进栈POP(pop from the stack) 出栈出栈XCHG(exchange) 交换交换XLAT(translate) 换码换码存储器存储器段存放器段存放器CS DS SS ES立刻数立刻数通用存放器通用存放器AX BX CX DXBP SP SI DIMOV指令例如指令例如1MOV VALUE, 100H ;立刻数传送到存储单元;立刻数传送到存储单元MOV ES:BX, 4BHMOV AL, BL ;存放器之间传送;存放器之间传送MOV BP, SIMO
19、V指令例如指令例如2 MOV AX, ARRAYSI设设(DS)=3000H, (SI)=2000H, ARRAY=8000H 物理地址物理地址 30000H 2000H + 8000H 3A000H 3A000H 45H 0BH0B45H AXMOV指令本卷须知:指令本卷须知:阐明:阐明:1) 源操作数可以是存放器或存储器操作数源操作数可以是存放器或存储器操作数 2) 必需以字或双字为单位操作必需以字或双字为单位操作 3) 32位指令允许位指令允许SRC是是16位或位或32位立刻数,位立刻数,也允许是也允许是32位存放器和存储器操作数位存放器和存储器操作数举例:举例:PUSH AX PUSH
20、 DATBXSI PUSH 1234H PUSH 87654321H PUSH EAX 压栈指令例如压栈指令例如 PUSH AX 执行前执行前 AX AX 25H 31H SP 52500H 3125H3125H低地址低地址低地址低地址进栈方向进栈方向SP3125H524FEH524FFH52500H执行后执行后举例:举例:POP AX POP DATBXSI POP DS POP ECX出栈指令例如出栈指令例如 POP BX 执行前执行前 执行后执行后 BX BX 75C1H 低地址低地址 低地址低地址 SP 6Bh 51000H 6Bh 51000H 48h 1H 48h 1H 9Ah 2
21、H 9Ah 2H 28h 3H 28h 3H出栈方向出栈方向48h48h6BhSP操作:操作:PUSHA指令例如指令例如(DI) -16(SI) -14(BP) -12(SP)原原 -10(BX) -8(DX) -6(CX) -4(AX) -2 0(SP)原原(SP)执行前执行前执行后执行后操作:操作:阐明:阐明: 1操作数不允许为段存放器操作数不允许为段存放器 2两个操作数长度必需一样两个操作数长度必需一样 3本指令不影响形状标志位本指令不影响形状标志位 4两个操作数不能同时为存储器操作数两个操作数不能同时为存储器操作数如:如: XCHG AX, BX ;存放器之间交换;存放器之间交换 XC
22、HG BX, BP+DI ;存放器与存储器之间交换;存放器与存储器之间交换 XCHG SI, DX交换指令例如交换指令例如 XCHG DX, DATABP设设(SS)=5000H, (BP)=0400H, DATA=1800H 物理地址物理地址=5000H16+0400H+1800H=51C00H 执行前执行前 执行后执行后 DX DX 37CDH 51C00H 42H 51C00H 1H 6DH 1H CDH37H6D42H +6 36H +7 37H 34HAL LDS (load DS with pointer) 指针送存放器和指针送存放器和DS LES (load ES with po
23、inter) 指针送存放器和指针送存放器和ES LFS (load FS with pointer) 指针送存放器和指针送存放器和FS LGS (load GS with pointer) 指针送存放器和指针送存放器和GS LSS (load SS with pointer) 指针送存放器和指针送存放器和SS2、地址传送指令、地址传送指令LEA指令例如指令例如设设(DS)=2000H, (BX)=1234H LEA DI, BX MOV SI, BX 执行后执行后 执行后执行后 21234H 78H 5H 56H1234H1234HBXSI5678HSI78H1234H565678H78H56
24、21234H5HBUFFERSI1234HSI执行后执行后执行后执行后1234H78H56LES 、LFS、LGS、LSS 格式:同格式:同LDS,目的分别是,目的分别是ES,FS,GS,和,和SS存放器存放器 阐明:阐明: 1) 源操作数必需是存储器操作数源操作数必需是存储器操作数 2) 目的操作数必需是存放器目的操作数必需是存放器 3) 完成一个逻辑地址的传送,该逻辑地址完成一个逻辑地址的传送,该逻辑地址须用伪指令预先定义在当前数据段中须用伪指令预先定义在当前数据段中7659H2000HH 45HH D6HH 00HH 50H D645H5000HDSDIDI DSLDS指令例如指令例如
25、LDS DI, BX设设(DS)=2000H, (BX)=1000H执行前执行前执行后执行后LEA与与LDS的区别的区别LEA SI, BUFFLDS DI, BUFFBUFF(21000H) 45H +1 D6H +2 00H +3 50H 设设(DS)=2000HEABUFF=1000H执行后:执行后:SI=1000HDI=D645HDS=5000H3、标志存放器传送指令、标志存放器传送指令PUSHF/PUSHFD(push the flags or eflags) 标志进栈标志进栈POPF/POPFD(pop the flags or eflags) 标志出栈标志出栈阐明:阐明:1) 无
26、操作数无操作数 2) FLAGS中含假设干标志位,但中含假设干标志位,但LAHF指令本指令本身不影响标志位身不影响标志位阐明:无操作数阐明:无操作数4、输入输出指令、输入输出指令 IN(input) 输入输入 OUT(output) 输出输出阐明:用阐明:用Port指明指明8位端口地址时,地址范围为位端口地址时,地址范围为00H-FFH 以以DX间接给出端口地址时,最大地址为间接给出端口地址时,最大地址为0FFFFH操作:操作: AL/AX/EAX-(Port) 从外设读入字节或字或双字数据从外设读入字节或字或双字数据 AL/AX/EAXAL IN AX, 48H ;从端口;从端口48H读入字
27、数据读入字数据-AX MOV DX, 3FCH IN EAX, DX ;从端口;从端口03FCH读入双字数读入双字数-EAXOUT指令例如指令例如 OUT 32H, AX ;传送字数据到;传送字数据到32H端口端口 MOV DX,400H MOV AL, 86H OUT DX, AL ;传送字节数据到;传送字节数据到DX指出的端口指出的端口5、类型转换指令、类型转换指令阐明:阐明: 用于在符号数除之前,构成双倍长度的被除用于在符号数除之前,构成双倍长度的被除数数6、POP 指令不允许运用立刻数寻址方式,指令不允许运用立刻数寻址方式, 不允许运用不允许运用CS存放器存放器 例:例: POP 12
28、 ;不合法;不合法 POP CS ;不合法;不合法7、段存放器只能在、段存放器只能在MOV、PUSH、POP 指令中作为操作数出现指令中作为操作数出现 例:例:MOV ES, AX PUSH CS POP DS 但以下指令不合法:但以下指令不合法: MOV CS, reg POP CS8、指令有多种格式,普通都遵照以下规那么:、指令有多种格式,普通都遵照以下规那么:双操作数指令中不允许两个操作数均为存储器操作数双操作数指令中不允许两个操作数均为存储器操作数单操作数指令不允许立刻寻址方式单操作数指令不允许立刻寻址方式目的操作数不允许运用立刻寻址方式目的操作数不允许运用立刻寻址方式3.2.2 算术
29、运算指令算术运算指令1、无符号二进制数、无符号二进制数 字节可表示范围:字节可表示范围:0-255 字可表示范围:字可表示范围:0-655352、有符号二进制数、有符号二进制数 字节可表示范围:字节可表示范围:-128-+127 字可表示范围:字可表示范围:-32768-+327673、非紧缩十进制数、非紧缩十进制数 一个字节存放一位十制进数的一个字节存放一位十制进数的BCD 码,高码,高4位为位为0000。 例:十进数例:十进数57表示为:表示为: 00000101 00000111 0507H)4、紧缩十进制数、紧缩十进制数 一个字节存放两位十进制数的一个字节存放两位十进制数的 BCD码码
30、 例:十进数例:十进数57表示为:表示为: 01010111 57H以以8位数加法为例讨论溢出位数加法为例讨论溢出1、无符号数,有符号数都不溢出、无符号数,有符号数都不溢出 无符号数无符号数 有符号数有符号数 04H 4 4 +0BH + 11 + 11 0FH 15 15 CF=0 OF=02、无符号数溢出,有符号数不溢出、无符号数溢出,有符号数不溢出 无符号数无符号数 有符号有符号数数 07H 7 7 +FBH +251 +(-5) 1 02H 258 +2 (255) CF=1 OF=0指令构成方式:指令构成方式:ADD reg,imme ;存放器与立刻数相加;存放器与立刻数相加ADD
31、reg,reg ;存放器之间;存放器之间ADD reg,mem ;存放器加存储器操作数;存放器加存储器操作数ADD mem,imme ;存储器加立刻数;存储器加立刻数ADD mem,reg ;存储器操作数加存放器;存储器操作数加存放器 阐明:运转结果对阐明:运转结果对CF、SF、OF、PF、ZF、AF都会都会影响影响ADD指令例如指令例如1 ADD DX, BX 设设(DX)=4652H, (BX)=0F0F0H 4652H+ F0F0H1 3742H 0100 0110 0101 0010+ 1111 0000 1111 00001 0011 0111 0100 0010进位进位进位进位执行
32、后执行后 (DX)=3742H ZF=0 结果不为结果不为0 SF=0 结果为正结果为正 CF=1 有进位有进位 OF=0 不溢出不溢出ADD指令例如指令例如2 ADD WORD PTRBX, 9F76H 设设(DS)=2000H, (BX)=1000H 执行前:执行前: 21000 88H A988H A9H + 9F76H 1 48FEH 执行后:执行后: 21000 FEH CF=1 有进位有进位 48H OF=1 溢出溢出 ZF=0 结果不为结果不为0 SF=0 结果为正结果为正进位进位ADC指令例如指令例如双字加法双字加法 设设32位的目的操作数存放在位的目的操作数存放在DX和和AX
33、中,中,DX存放高位字,存放高位字,32位源操作数存放在位源操作数存放在BX和和CX中,中,BX存放高位字存放高位字 CF ADC ADDDXAXBXCXDXAX +指令序列为:指令序列为: ADD AX, CX ;低位加;低位加 ADC DX, BX ;高位加;高位加 执行前执行前(DX)=0418H, (AX)=0F365H (BX)=1005H, (CX)=0E024H 0418H DX 0F365H AX 1005H BX + 0E024H CX + 1 CF 141EH DX 1D389H AX CF=1如:如:DX:AX=37A1FFFFH, 那么那么DX:AX1能否用能否用: I
34、NC AX ADC DX,0来实现?来实现?INC指令例如指令例如LEA BX, ARRAYMOV AL, BX INC BXARRAY a1 +1 a2 +2 a3 +3 a4 MOV BX, 0MOV AL, ARRAYBX INC BX 8088中,执行中,执行INC BYTE PTRBX指令指令已在指令指令已在指令队列中需求指令队列中需求 个总线周期。个总线周期。 指令构成如下:指令构成如下: SUB reg, imme ;存放器减立刻数;存放器减立刻数 SUB reg, reg ;存放器之间相减;存放器之间相减 SUB reg, mem ;存放器减存储器操作数;存放器减存储器操作数
35、SUB mem, imme ;存储器操作数减立刻数;存储器操作数减立刻数 SUB mem, reg ;存储器操作数减存放器;存储器操作数减存放器阐明:运转结果对阐明:运转结果对CF、SF、OF、PF、ZF、AF都会影响都会影响SUB指令例如指令例如 SUB BX, CX 执行前:执行前: (BX)=9543H (CX)=28A7H 9543H - 28A7H 6C9CH 执行后:执行后: (BX)=6C9CH CF=0 OF=1 ZF=0 SF=0 0001HCF=1NEG指令例如指令例如1 NEG DX 执行前:执行前: (DX)=6780H 0000 - 6780 1 9880 执行后:执
36、行后: (DX)=9880H CF=1NEG指令例如指令例如2 NEG AL ;AL求补求补 ADD AL, 100 ;(AL)+100-AL 实现的功能为:实现的功能为: 100-(AL)借位借位1、两个操作数相减,但结果不回送、两个操作数相减,但结果不回送2、影响标志位的值,下一指令常是条件转移指令、影响标志位的值,下一指令常是条件转移指令3、必需区分无符号数比较与有符号数比较、必需区分无符号数比较与有符号数比较 如如 比较比较 11111111B 与与 00000000B 无符号数比较:无符号数比较: 255 0 有符号数比较:有符号数比较: -1 04、比较两数能否相等,根据标志位、比
37、较两数能否相等,根据标志位ZF判别判别 假设相等,那么假设相等,那么ZF=1;否那么;否那么ZF=0 5、指令构成同、指令构成同SUB指令指令比较两数的大小比较两数的大小 CMP DST, SRC1、无符号数比较、无符号数比较 DSTSRC DST0, SRC0 必不溢出必不溢出,OF=0 DST=5AH, SRC=46H DST=46H, SRC=5AH 5AH 46H - 46H - 5AH 14H ECH SF=0, DSTSRC SF=1, DST0, SRCSRC DST=10H SRC=95H DST=62H SRC=95H 10H 62H - 95H - 95H 7BH CDH
38、SF=0, OF=0 SF=1, OF=1 CMP指令例如指令例如1 CMP AL, BL 令令 (AL)= -64 (BL)=10 - 64 - 10 - 74 OF=0 SF=1 结论:结论: (DST)(SRC) CMPXCHG指令例如指令例如 CMPXCHG CX, DX 阐明:阐明: 1SRC可用存放器或存储器寻址方式可用存放器或存储器寻址方式 2无符号数乘与有符号数乘不同无符号数乘与有符号数乘不同 如如 11111111B11111111B 无符号数乘:无符号数乘: 255255 有符号数乘:有符号数乘: -1-1 3本指令影响标志位本指令影响标志位CF和和OFMUL, IMUL指
39、令例如指令例如 MUL BL (AL)=0B4H=180 (BL)=11H=17 1011 0100 0001 0001 1011 0100 1011 0100 101111110100(AX)=0BF4H=3060 0100 1100 0001 0001 0100 11000111 11000101 0000 1100(AX)=(-050C)补补 =FAF4H= -1292阐明:阐明:1乘积的字长和源、目的操作数的字长一致乘积的字长和源、目的操作数的字长一致 2能够溢出能够溢出 3SRC可用存放器或存储器寻址方式可用存放器或存储器寻址方式 REG只能是存放器寻址方式只能是存放器寻址方式 IM
40、M是立刻数是立刻数 4这些指令是这些指令是80186后新添加的后新添加的阐明:阐明: 1) 被除数的长度是指令中操作数的两倍被除数的长度是指令中操作数的两倍 2) 源操作数可用除立刻数以外的寻址方式源操作数可用除立刻数以外的寻址方式 3) 假设假设SRC=0或者商大于存放商的存放器的最大数值或者商大于存放商的存放器的最大数值范围,都会引发范围,都会引发“Divide error错误。因此,当被错误。因此,当被除数为除数为AX, DX:AX时,商最大是时,商最大是255和和65535DIV指令例如指令例如 MOV AX, 0000H ;装入被除数;装入被除数 10000H MOV DX, 000
41、1H MOV BX, 100H ;装入除数;装入除数 DIV BX ;10000H/100H MOV N1, AX ;存商;存商 MOV N2, DX ;存余数;存余数IDIV指令例如指令例如 计算计算-127/15,商存入,商存入RESULT单元单元 MOV AL, -127 ;装入被除数;装入被除数81H CBW ;字节扩展到字;字节扩展到字 MOV BL, 15 ;装入除数;装入除数 IDIV BL ;-127/15 MOV RESULT, AL ;存商;存商算术运算指令综合例算术运算指令综合例 计算计算(V-(X*Y+Z)/X,其中,其中X,Y,Z,V均为均为16位有符号数,位有符号数
42、,要求商存入要求商存入AX,余数存入,余数存入DX MOV AX, X IMUL Y ; X*Y MOV CX, AX MOV BX, DX ;积存;积存 BX, CX MOV AX, Z CWD ;Z扩展扩展 ADD CX, AX ;X*Y+Z ADC BX, DX MOV AX, V CWD ;V扩展扩展 SUB AX, CX ;相减;相减 SBB DX, BX IDIV X ;除以;除以X 十进制十进制BCD码运算调整指令码运算调整指令为什么需求调整?为什么需求调整?BCD码的码的10101111是无意义的。是无意义的。例:非紧缩十进数例:非紧缩十进数6和和7相加相加 0000 0110
43、 + 0000 0111 0000 1101 + 110 ;调整;调整 0001 0011 调整指令有两类:调整指令有两类:1、非紧缩、非紧缩BCD码调整指令码调整指令 AAA AAS AAM AAD2、紧缩、紧缩BCD码调整指令码调整指令 DAA DAS调整过程:调整过程: 假设假设 (AL&0FH)9 或或 (AF)=1 那么那么 (AL)+6-AL (AH)+1-AH 1-AF, AF-CF (AL)&0FH-AL 否那么否那么 (AL)&0FH-AL 0-AF, (AF)-CF阐明:阐明: 该指令放在二进制加法指令该指令放在二进制加法指令ADD之后之后 AAA指
44、令例如指令例如 计算十进制数计算十进制数9+4 MOV AL, 9H 09H MOV BL, 4H + 04H ADD AL, BL 0DH ;9 AAA + 06 H ;调整;调整 13H & 0FH 03H (AH)+ 1-AH结果:结果: (AH)=01H (AL)=03H CF=AF=1 AAA指令例如指令例如 计算十进制数计算十进制数9+9 MOV AL, 9H 09H MOV BL, 9H + 09H ADD AL, BL 12H ;AF=1 AAA + 06 H ;调整;调整 18H & 0FH 08H (AH)+ 1-AH结果:结果: (AH)=01H (AL)
45、=08H CF=AF=1 调整过程:调整过程: 假设假设 (AL&0FH)9 或或 (AF)=1 那么那么 (AL)-6-AL (AH)-1-AH (AL)&0FH-AL 1-AF, AF-CF 否那么否那么 (AL)&0FH-AL 0-AF, (AF)-CF AAS指令例如指令例如 计算十进制数计算十进制数16-7 MOV AX, 0106H 06H MOV BL, 7H - 07H SUB AL, BL FFH ; (AL)&0FH9 AAS - 6 H ;调整;调整 F9H & 0FH 09H (AH)-1-AH结果:结果: (AL)=09H CF
46、=AF=1 (AH)=00H调整后,调整后,(AH)=6 (AL)=3AAD指令例如指令例如 MOV AX, 0208H ;AX9 或或 (AF)=1 那么那么(AL)+6-AL 1-AF 假设假设(AL)9FH 或或 (CF)=1 那么那么(AL)+60H-AL 1-CF DAA指令例如指令例如1 计算十进制数计算十进制数29+18 MOV AL, 29H 29H MOV BL, 18H + 18H ADD AL, BL 41H ;AF=1 DAA + 6 ; 调整调整 47HDAA指令例如指令例如2 计算十进制数计算十进制数54+63 MOV AL, 54H 54H MOV BL, 63H
47、 + 63H ADD AL, BL B7 H ;9F DAA + 60H ; 调整调整 1 17H调整过程:调整过程: 假设假设 (AL&0FH)9 或或 (AF)=1 那么那么 (AL)-6-AL 1-AF 假设假设(AL)9FH 或或 (CF)=1 那么那么 (AL)-60H-AL 1-CFDAS指令例如指令例如 计算十进数计算十进数A-B A=4612 B=3576 MOV AL, A 12H SUB AL, B - 76H DAS 1 9CH ;AF,CF均均1 MOV D, AL - 66H ;所以用;所以用-66H调整调整 MOV AL, A+1 36H D SBB AL,
48、 B+1 CF=1 DAS MOV D+1, AL 46H 35H - 1 10H D+1结果结果10363.2.3 逻辑运算指令逻辑运算指令n逻辑非指令逻辑非指令 NOT n逻辑与指令逻辑与指令 ANDn逻辑或指令逻辑或指令 ORn逻辑异或指令逻辑异或指令 XORn测试指令测试指令 TESTNOT指令例如指令例如2 MOV AL, 1 ;1-AL NOT AL ;求反;求反 INC AL ;NOT指令例如指令例如1 MOV AL, 52H NOT AL 执行前执行前 AL 01010010 执行后执行后 AL 10101101 -1-ALOF=0AND指令例如指令例如1 MOV AL , 3
49、2H AND AL, 0FH ;屏蔽高四位操作;屏蔽高四位操作 执行前执行前 AL 00110010 2的的ASCII码码 执行后执行后 AL 00000010 AND指令例如指令例如2 AND AX, AX 执行后执行后 AX内容不变,内容不变, CF=0OF=0OR指令例如指令例如1 MOV AL, 02H OR AL, 0F0H ; 高四位置位高四位置位 执行前执行前 AL 00000010 执行后执行后 AL 11110010 OR指令例如指令例如2 MOV AL, 02H OR AL, 30H 执行前执行前 AL 00000010 执行后执行后 AL 00110010 ;2的的ASC
50、II码码 XOR指令例如指令例如1 MOV AL, 0B6H 1011 0110 XOR AL, 0FH 0000 1111 1011 1001 不变不变 变反变反XOR指令例如指令例如2 XOR AL, AL ;清零操作,且;清零操作,且CF=0指令指令时钟数时钟数指令字指令字节数节数8088 286386 486 PentiumMOV AX, 0432112AND AX, 0432113XOR AX, AX322112SUB AX, AX322113MOV BL, 0MUL BL432112143213842113OF=0 TEST指令例如指令例如1 测试测试AL最低位能否为最低位能否为1
51、,假设是,假设是1那么那么转移转移 TEST AL, 01H JNZ NEXT ;ZF=0转转TEST指令例如指令例如2 测试测试AX最高位能否为最高位能否为1,假设不是,假设不是1那么转移那么转移 TEST AX, 8000H JZ THERE ;ZF=1转转3.2.4 移位指令移位指令移位指令有移位指令有10条,分三类:条,分三类:1、移位指令:、移位指令:SHL逻辑左移逻辑左移 SHR逻辑右移逻辑右移 SAL算术左移算术左移 SAR算术右移算术右移2、循环移位指令:、循环移位指令:ROL循环左移循环左移 ROR循环右移循环右移 RCL带进位循环左移带进位循环左移 RCR带进位循环右移带进
52、位循环右移3、双精度移位指令:、双精度移位指令:SHLD双精度左移双精度左移 SHRD双精度右移双精度右移 SHL/SAL逻辑逻辑/算术左移算术左移SHR逻辑右移逻辑右移SAR 算术右移算术右移 00 CFCFb0 bnb0b0 bn bnCFROL循环左移循环左移RCL带进位循带进位循环左移环左移ROR循环右移循环右移RCR带进位循带进位循环右移环右移 CFCFCFCF知知(AL)=0B4H, (CF)=1, 分析以下指令执行后的结果分析以下指令执行后的结果 CF AL (1) SAL AL, 1 (2) SAR AL, 1 (3) SHL AL, 1 (4) SHR AL, 1 算术左移与
53、逻辑左移的结果一样算术左移与逻辑左移的结果一样 算术右移与逻辑右移的结果不同算术右移与逻辑右移的结果不同110110100101101000011011010101101000001011010执行前执行前移位指令例如移位指令例如2 MOV CL, 5 SAR AL, CL 执行前执行前 AL 01100000 60H=96 执行后执行后 AL 00000011 03H=3 通常通常:算术右移算术右移N位相当于有符号数除以位相当于有符号数除以2N有例外有例外 逻辑右移逻辑右移N位相当于无符号数除以位相当于无符号数除以2N 算术算术/逻辑左移逻辑左移N位相当于无符号数乘以位相当于无符号数乘以2N
54、移位指令例如移位指令例如3 设设(AX)=0012H, (BX)=0034H, 要求装配成要求装配成(AX) = 1234H MOV CL, 8 ROL AX, CL ADD AX, BX0110000000000011移位指令例如移位指令例如4 知变量知变量Y中为一字节无符号数,计算中为一字节无符号数,计算(Y)*10, 积放积放在在AX中。中。变换:变换:(Y)*10(Y)*(8+2)=(Y)*2+(Y)*8 (为什么要这样变换?为什么要这样变换? MOV AL, Y ; AL-(Y) MOV AH, 0 SHL AX, 1 ; (Y)*2 MOV BX, AX SHL AX, 1 ; (
55、Y)*4 SHL AX, 1 ; (Y)*8 ADD AX, BX ; (Y)*10综合运用例综合运用例1 将将ASCII码转换成码转换成BCD码码 如:如: ASC 9 BCD 6 96H MOV AL, ASC ; AL90H MOV BL, AL ;BL-90H MOV AL, ASC+1 ;AL-36H (6) AND AL, 0FH ;AL-06H OR BL, AL ;BLSI目的区首偏址目的区首偏址-DI,串长,串长-CXCX=0按按DI所指存此字节所指存此字节按按SI所指取一字节所指取一字节(SI)+1-SI(DI)+1-DI(CX)-1-CX终了终了YN源区首偏址源区首偏址-
56、SI目的区首偏址目的区首偏址-DI串长串长-CX,0-DFCX=0串传送指令串传送指令(CX)-1-CX终了终了源区首偏址源区首偏址-SI目的区首偏址目的区首偏址-DI串长串长-CX,0-DF带前缀带前缀REP的的串传送指令串传送指令YN运用串操作指令时微处置器设计有假设干商定:运用串操作指令时微处置器设计有假设干商定: 1、源串地址由、源串地址由DS:SI指定指定 目的串地址在目的串地址在ES:DI中中 2、串长送、串长送CX存放器存放器 3、设置方向标志位、设置方向标志位DF在在EFLAG存放器中存放器中 当当DF=0指令指令CLD时为增量修正时为增量修正 +1 或或 +2 或或 +4 当
57、当DF=1指令指令STD时为减量修正时为减量修正 -1 或或 2 或或 -4 方向标志对应的指针挪动表示方向标志对应的指针挪动表示 低地址方向低地址方向 A . 源串源串 A J 高地址方向高地址方向目的串目的串 源串源串 目的串目的串1 nn . 正向传送正向传送 反向传送反向传送DF=0 DF=11J 符号 功能 操作 相关前缀 MOVS 串传送 ES:DI-(DS:SI) REP SI-(SI)(+/-)1 DI-(DI)(+/-)1CMPS 串比较 (DS:SI)-(ES:DI) REPZ/REPNZ SI-(SI)(+/-)1 DI-(DI)(+/-)1SCAS 串扫描 (ES:DI
58、)-(AL) REPZ/REPNZ DI-(DI)(+/-)1LODS 装入串 AL-(DS:SI) 普通不联用 SI-(SI)(+/-)1 STOS 存入串 (ES:DI)-(AL) REP DI-(DI)(+/-)1符号符号 功能功能 操作操作 相关前缀相关前缀INS 串输入串输入 ES:DI(DX) REP DI(DI)(+/-)1OUTS 串输出串输出 (DX)(DS:SI) REP SI(SI)(+/-)1其中其中DX存放器中存放的是接口电路的端口号存放器中存放的是接口电路的端口号反复前缀反复前缀 终止条件终止条件 否那么否那么 REP CX=0 CX-(CX)-1,继续,继续 SI
59、,DI指向下一元素指向下一元素REPZ CX=0 或或 ZF=0 CX-(CX)-1,继续,继续REPE SI,DI指向下一元素指向下一元素 串未终了且串相等时继续串未终了且串相等时继续REPNZ CX=0 或或 ZF=1 CXSI LEA DI, String2 ;目的串地址;目的串地址-DIMOV CX, 4 ;反复次数;反复次数-CXREPZ CMPSB ;反复比较;反复比较JZ NEXT ;串相等转移;串相等转移 .NEXT:SCAS指令例如指令例如 在串在串“That is CAI中查找字符中查找字符a,找到,那,找到,那么转到标号么转到标号FOUND处处 String DB Tha
60、t is CAI ;定义串 CLD ;DF=0LEA DI, String ;串地址-DIMOV AL, a ;查找字符-ALMOV CX, 11 ;反复次数-CXREPNZ SCASB ;反复扫描JZ FOUND ;找到目的串元素转移 FOUND: LEA SI, SOURCE ;源串偏移量;源串偏移量-SILEA DI, DESTIN ;目的串偏移量;目的串偏移量-DICLD ;DF=0MOV CX,100 ;反复比较次数;反复比较次数-CXREPZ CMPSB ;反复串比较;反复串比较JCXZ MATCH ;没有不匹配元素跳转;没有不匹配元素跳转DEC SI ;指向不匹配元素;指向不匹配元素LODSB ;装入不匹配元素到;装入不匹配元素到AL .MATCH: LOD
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论