




已阅读5页,还剩88页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第3章寻址方式和指令系统 用来指挥和控制计算机完成指定操作的命令称为指令 不同的微处理器具有各自不同的指令 每种微处理器能够识别和执行的所有指令的集合称为该微处理器的指令系统 程序 是由一系列有序指令组成的有序集合指令通常是用英文助记符来表示 3 1指令格式与寻址方式 3 1 1指令格式 标号 操作码操作数 操作数 注释操作码规定计算机所执行的操作 操作数用来描述该指令的操作对象 为参加操作的数据或其存放的地址 根据完成的命令和程序设计要求的不同 可以缺省除操作码以外的其余三项 但必须由操作码才能组成不同功能的指令 3 1 2寻址方式 所谓寻址方式 就是寻找操作数或操作数地址的方式 与数据有关的寻址方式有 立即数寻址 MOVAX 2004H寄存器寻址 MOVAX BX直接寻址 MOVAX 2004H 寄存器间接寻址 MOVAX BX 寄存器相对寻址 MOVAX BX 204H 基址变址寻址 MOVAX BX SI 基址变址相对寻址 MOVAX 20 BP DI 1 立即数寻址 立即数 操作数 直接包含在指令中 作为指令的一部分存放在代码段中 以下均源操作数为例 例3 1MOVAX 2004H AH 20H AL 04HMOVBL 5AH BL 5AHMOVEAX 22334455H EAX 22334455H AX 4455H立即数常用于给寄存器赋初值 只能作源操作数 不能作目的操作数 2 寄存器寻址 操作数存放在指令指定的8位 16位或32位通用寄存器中 例3 2寄存器寻址MOVAL BL 将BL中的内容送入AL中 BL中的内容保持不变MOVSI DI 将DI中的内容送入SI中 DI中的内容保持不变MOVEAX EBX 将EBX中的内容送入EAX 3 直接寻址 指的是操作数在存储器中的有效地址EA内 书写时有效地址加上中括号例3 3存储器直接寻址MOVAX 1000H 将DS段的1000H和1001H两个单元的内容送入AX寄存器中MOVEAX ES 2000H 将ES段的2000H 2003H四个单元的内容送入EAX寄存中 其中ES为段超越前缀MOVAX BUF 将DS段内以有效地址BUF 符号地址 起始的两个单元的内容送入AX中 4 寄存器间接寻址 操作数的有效地址EA放在基址寄存器BX BP 或变址寄存器SI DI中 操作数的物理地址为 DS 16 SI DI BX 或 SS 16 BP 例3 4假定 DS 2000H SI 3600H 23600H 6022HMOVAX SI 先将DS中的值左移4位 然后与SI中的值相加 则物理地址是23600H 再将该物理地址中的数据6022H送入AX寄存器中例3 5假定 SS 3000H BP 1100H 31100H 5E28HMOVBX BP 例3 6偏移量为32位时的寄存器间接寻址MOVEAX DX 5 寄存器相对寻址 操作数的有效地址是一个基址寄存器或变址寄存器中存放的数据加上指令给出的8位或16位偏移量 其物理地址为 DS 16 SI DI BX 8位或16位偏移量或 SS 16 BP 8位或16位偏移量例3 7假定 DS 2000H SS 3000H SI 3600H BP 1100H COUNT 10H 23620H 8A76H 31110H 4567HMOVAX SI 20H MOVBX BP COUNT 该指令书写有下面的等效形式 MOVBX BP COUNTMOVBX COUNT BP 6 基址变址寻址 操作数的有效地址只能是一个基址寄存器和一个变址寄存器的内容之和 其物理地址为 DS 16 BX SI DI 或 SS 16 BP SI DI 例3 9 假定 DS 2000H SS 3000H BX 1800H BP 2080H DI 1000H SI 0800H 22800H 80CFH 32880H 067AHMOVAX BX DI MOVAX BP SI 7 基址变址相对寻址 操作数的有效地址是一个基址寄存器内容和一个变址寄存器的内容和8位或16位偏移量相加之加 其物理地址为 DS 16 BX SI DI 8位或16位偏移量 SS 16 BP SI DI 8位或16位偏移量例3 10基址变址相对寻址MOVAX BX SI 100H MOVCX BX SI NUM MOVDX SS NUM DI BP 例3 1132位偏移量的寄存器比例寻址MOVEAX DAT EBX ESI MOVEAX NUM EBP EDI 8 寄存器 变址 比例寻址 这种寻址方式中 形成存储器操作数的有效地址采用 1 变址寄存器的内容乘以比例因子 再加上偏移量 称为比例变址方式 2 变址寄存器的内容乘以比例因子 再加上基址寄存器的内容 称为基址比例变址方式 3 变址寄存器的内容乘以比例因子 再加上基址寄存器的内容和偏移量 称为基址比例变址偏移方式 MOVEAX X EDI 4 MOVEBX EDI 8 EBX EA EDI 8 EBX MOVEAX X ESI 4 EBP ESI 4 EBP X 3 28086指令系统 8086指令系统是80 x86的基本指令集 共有95条指令 按功能可以分为六种类型 数据传送指令算术运算指令逻辑运算与移位指令串操作指令控制转移指令处理器控制指令 3 2 1数据传送指令 数据传送指令用于寄存器 存储单元和输入输出端口之间传送数据或地址 除SAHF和POPF外 对标志无影响 主要有四类 1 通用数据传送指令2 地址传送指令3 标志传送指令4 输入输出指令 1 通用数据传送指令 MOV XCHG PUSH POP XLAT 1 基本的传送指令MOV格式 MOVDEST SRCMOVAL 30H 立即数传送到寄存器MOVAL BL 寄存器之间传送字节数据MOV BX 62H SI 寄存器和存储器之间传送数据MOVAL BX 例3 13下列指令是不合法的 MOV6234H AX 立即数不能用于目的操作数MOVCS AX CS不能改变 不能为目的操作数 MOVIP AX IP不能改变 不能为目的操作数 MOVDS 4234H 立即数不能直接传送给段寄存器MOVAL BX 寄存器之间传送 位数必须一致MOVBUF1 BUF2 两个存储器单元之间不能传送数据MOVDS ES 不能在两个段寄存器之间传送数据 2 交换指令XCHG 格式 XCHGDEST SRC功能 将源操作数与目的操作数的内容交换 例XCHGAL CL 字节交换 通用寄存器之间 XCHGBX SI 字交换XCHGAX BX SI 寄存器和存储器之间下列指令是非法的XCHGAX 6234H 立即数不能参加交换XCHG BX 4234H 存储器之间不能交换XCHGDS AX 段寄存器不能参加交换XCHGCS DAT BX 不能改变CS IP的值只能是通用寄存器之间或其与存储器之间交换 3 堆栈操作指令 PUSH POP 堆栈是主存一个特殊的区域操作原则 先进后出或后进先出堆栈指针 它指示栈顶位置 在8086中 栈顶由SS 16 SP指示 栈顶随不断压入 存 数据而由高 低地址 随弹出 取 数据由低 高地址自动改变 栈底即程序中设定的SP的值 不会变指令格式PUSHAXPOPBXPUSH 2000H POP BX 字操作不能字节操作 高对高 低对低 进栈操作1次 SP SP 2 向低地址方向生长 出栈操作1次 SP SP 2 向高地址方向生长 栈顶总满 栈顶已有数据 进栈先SP 1 压入高8位数据 再SP 1 压入低8位数据 总结8088 8086的堆栈操作特点 堆栈操作指令 说明 PUSH POP指令不能使用立即寻址方式 POP指令不能使用CS寄存器 不能改变CS与IP的值 堆栈中数据的压入弹出必须以字为单位进行 这两条堆栈指令不影响标志位 堆栈只有两种基本操作 进栈和出栈两条指令 例3 16将16位通用寄存器CX的内容压入堆栈 然后 弹出栈顶至CX中 已知 SS 0200H SP 0008H CX 12FAH 其示意图见图 PUSHCXPOPCX PUSHCX POPCX 用途 现场的保护和恢复 pushax 进入子程序后pushbxpushds popds 返回主程序前popbxpopax 4 换码指令 格式 XLAT功能 执行 AL BX AL 的操作 使AL中的值变换为内存表格中的某一个值 实现码的转换 例3 17在内存的数据段中存放有一张数值0 9的ASCII码转换表 首地址为Hex table 如图3 3所示 现要把数值8转换成对应的ASCII码 可用以下几条指令实现 LEABX Hex table BX 表首偏移地址MOVAL 8 AL 8XLAT 查表转换 2 地址传送指令 1 有效地址传送指令格式 LEADEST SRC功能 这是一条取有效地址的指令 将源操作数的偏移地址传送到16位通用 指针或变址寄存器中 例3 18MOVBX 3200H 将3200H单元的内容送BXLEABX 3200H 将有效地址3200H送BXLEASI ADDR 将ADDR的有效地址送SILEASI 50H BX DI 2 地址指针传送指令 格式 LDSDEST SRC 数据段地址指针 LESDEST SRC 附加据段地址指针 功能 将源操作数指定的连续4个存储器单元中存放的32位地址指针 包括一个段地址和一个偏移地址 传送到两个16位寄存器例3 19POINTDD55663344H 设定变量POINT 段地址和偏移地址 中存放4个字节的数据 LDSBX POINT BX 3344H DS 5566HLESDI POINT DI 3344H ES 5566H 3 标志寄存器传送指令 LAHF SAHF PUSHF POPF 标志读写指令LAHF将标志寄存器FLAGS中的低8位 传送至AH中 SAHFSAHF与LAHF正好相反 把AH传送至标志寄存器FLAGS的低8位 LAHF指令操作格式 2 标志入栈出栈指令 格式 PUSHF POPF功能 PUSHF指令是将标志寄存器中的内容压入堆栈 指令的操作为 SP 1 FLAGSH SP 2 FLAGSL SP SP 2POPF指令是将栈顶的字单元内容弹出到标志寄存器中 同时SP SP 2 4 输入输出指令 格式 INDEST SRCOUTDEST SRC功能 专门用于累加器和I O端口之间执行数据传送INAL 28H 从端口28H输入一个字节到ALOUT15 AL 从AL输出一个字节到端口15MOVDX 0362H 先将端口地址送入DXINAX DX 从端口0362H输入一个字到AXINAL 80H AL 80H INAX 40H AX 40H INAL DX AL DX OUT60H AX 60H AX OUTDX AL DX AL OUTDX AX DX AX 3 2 2算术运算指令 实现二进制 BCD码数据的加 减 乘 除四则运算 除了符号扩展指令 均不同程度影响标志位1 加法运算 ADD ADC INC2 减法运算 SUB SBB DEC NEG CMP3 乘法运算 MUL IMUL4 除法运算 DIV IDIV CBW CWD5 十进制调整 DAA DAS AAA AAS AAM AAD 1 加法指令 ADD ADC INC 1 不带进位加法指令格式 ADDDEST SRC功能 将源操作数与目的操作数相加 结果送入原存放目的操作数的地方 该指令对标志位有影响 例3 21ADDCL 20H CL CL 20HADDAX SI AX AX SI ADDDATA BX AL BX DATA BX DATA AL ADDDX BX SI DX DX BX SI 举例 MOVAL 46H AL 46HADDAL 0C5H AL 0C5H AL指令执行后 对标志位的影响如下 二进制运算无符号数带符号数 AL 46H 0100011070 70 0C5H 11000101197 59自然丢掉100001011267 11SF 0 CF 1 ZF 0 AF 0 OF 0 PF 0 2 带进位加法指令 格式 ADCDEST SRC功能 将源操作数和目的操作数相加 同时加上进位标志的现行值CF 结果送入原存放目的操作数的地方 例3 22带进位加法指令ADCAX SI AX AX SI CFADCBX 3000H BX BX 3000H CFADCAX DAT SI AX AX SI DAT CF 两个操作数相加时 还要把进位标志CF加上去 结果送到目标操作数中 其格式完全同ADD指令 用于多字节相加 如 将内存0100H与0200H单元连续4个字节数相加 MOVAX 0100H ADDAX 0200H MOV 0300H AX 低字之和存入C单元 MOVAX 0100H 2 装入高字 ADCAX 0100H 2 高字求和考虑低字进位MOV 0300H 2 AX 存入高字之和 所有算术运算类指令只允许是寄存器与寄存器 存储器 立即数或存储器与寄存器 立即数之间进行 3 加1指令 格式 INCDEST功能 将目的操作数中的内容加1 然后送回该操作数 目的操作数可以是寄存器或存储器 例3 23INCBX BX BX 1INCBYTEPTR DI 100H 将 DI 100H所指的字节单元内容加1INCWORDPTR BX SI INCBLINC指令不影响进位标志CF 2 减法指令 SUB SBB DEC NEG CMP 1 不带借位的减法指令SUBSUBDEST SRC DEST DEST SRC 该指令求源操作数与目标操作数之差 结果送到目标操作数中 SUB指令影响CF OF AF SF ZF和PF等标志位 格式同ADD 2 带借位的减法指令SBBSBBDEST SRC DEST DEST SRC CF SBB指令对状态标志位的影响与SUB指令相同 它的用法与ADC指令相似 3 减1指令DEC自减指令DEC将目标操作数DST减1 并将结果再送回DST 格式 DECBYTEPTR BX DECWORDPTR BX SI DECBLDECSI SI内容 1 结果送回SIDEC指令影响OF AF SF ZF和PF标志位 但不影响进位标志CF 4 求补NEG格式 NEGDST无论操作数DST是正数还是负数 执行完该指令后 都相当于对DST按位取反 末位加1 即用零减去此操作数 例如 NEGBYTEPTR BX NEGWORDPTR BX SI NEGBLNEGSI例 若 AL 03H 则CPU执行完NEGAL指令后 AL 0FDH NEG指令影响CF OF AF SF ZF和PF标志位 5 比较指令 格式 CMPDEST SRC功能 同SUB指令 将目的操作数减去源操作数 但结果不回送 二操作数原值不变 只是影响状态标志位 根据ZF CF SF和OF四个标志位可以判断两数的大小 以判断二操作数是否满足某种关系 这条指令后边一般跟条件转移指令 根据比较结果对标志位的影响来实现程序的分支 例 比较AL是否大于100CMPAL 100 AL 100结果相等 无符号数大于 有符号数大于 3 乘法指令 MUL IMUL 1 无符号数乘法指令格式 MULSRC 只能是通用寄存器和存储器 功能 字节相乘时 AL与源操作数相乘 乘积为16位送入AX中 字相乘时 AX与源操作数相乘 乘积为32位 高16位送DX 低16位送AX 对标志位影响 若乘积的高半部分 字节相乘时为AH 字相乘时为DX 不为零 则CF 1 OF 1 否则CF 0 OF 0 其它标志位为任意值 例3 32无符号数乘法指令MULDL AX AX DLMULCX DX AX AX CXMULBYTEPTR SI 8 AX AL SI 8 2 有符号数乘法指令 格式 IMULSRC 只能是通用寄存器和存储器 功能 与MUL的功能相同 只是要求两乘数都必须为有符号数 例3 33两个有符号数的乘法MOVAL 0FEH AL FEH FEH看作有符号数 2MOVCL 11H CL 11H 11H看作有符号数17IMULCL AX FFDEH 执行02H 11H将乘积结果取补码 FFDEH 34 4 除法指令 DIV IDIV 1 无符号数除法指令格式 DIVSRC 只能是通用寄存器和存储器 功能 a 字节除法 将AX SRC的商送入AL 将AX SRC的余数送入AHb 字除法 将DX AX SRC的商送入AX 将DX AX SRC的余数送入DX例3 35无符号数除法指令DIVCL AX中的16位数除以CL中的8位数 商送AL 余数送AHDIVCX DX和AX中的32位数除以CX中的16位数 商送AX 余数送DX 2 有符号数除法指令 格式 IDIVSRC 只能是通用寄存器和存储器 功能 与DIV指令相比只有两点不同 a 两个操作数均为有符号数 b 如果被除数不是除数的两倍长度 对被除数要用专门的指令进行符号扩展 以产生双倍长度表示的被除数 3 有符号扩展指令 CBW CWD 功能 CBW为字节扩展指令 将AL中有符号数的符号位扩展到AH中 CWD为字扩展指令 将AX中有符号数的符号位扩展到DX中例3 37MOVAL 12H AL 12HCBW AX 0012H AH 00HMOVAX BBA3HCWD DX FFFFH AX BBA3H 符号扩展规则 CBW AL的符号扩展至AH 如AL的最高有效位是0 则AH 00 AL的最高有效位为1 则AH FFH AL不变 CWD AX的符号扩展至DX 如AX的最高有效位是0 则DX 00 AX的最高有效位为1 则DX FFH AX不变 什么是符号扩展作业 1 编程实现78 23 并把商存放在BL 余数存放在CL2 取偏移地址3256H中数据1个字负数的绝对值3 编程实现7BH 2347H 将结果存放在1000 2350为首地址的连续的单元中 5 BCD码 十进制 调整指令 十进制数调整指令对BCD码运算的结果进行十进制调整 以得到正确运算结果的BCD码 BCD码运算分压缩和非压缩两种 它们的调整方法不同 压缩 组合 BCD码 一个字节中容纳两个BCD码 其范围为 00H 99H 非压缩 非组合 BCD码 一个字节中仅容纳1个BCD码 其范围为 00H 09H 十进制调整指令有6条 对用组合BCD码 未组合BCD码及ASCII码表示的数算术运算后调整 DAA DAS AAA AAS AAM AAD一定是以AL为目的操作数 1 组合BCD码加法调整指令DAADAA位于ADD和ADC指令后 功能 加法运算后 若使AL低4位 1001B或AF 1 则AL 06H AL 且使CF 1 若使AL高4位 1001B或CF 1 则AL 60H AL且使CF 1 2 组合BCD码减法的调整指令DASDAS接在SUB或SBB指令后 功能 若AL低4位 1001或AF 1 则进行AL 06H AL 且使AF 1 若AL高4位 1001或CF 1 则进行AL 60H AL 且使CF 1 p58例题37 3573 27 1 组合BCD码的调整指令 DAADAS 1 未组合BCD码加法调整指令AAAAAA也称为ASCII码调整指令 接在ADD或ADC之后 功能 若AL低4位 1001或AF 1 则AL 06H AL 且使AF 1 AH 1 AH 执行AL AL 0FH 即将AL高4位清0 CF AF 2 未组合BCD码减法的调整指令AASAAS也称为减法的ASCII码调整指令 参加运算的两个数是未组合BCD或ASCII码 在SUB或SBB指令后执行 功能 若AL低4位 1001或AF 1 则AL 6 AL AH 1 AH 且使AF 1 AL AL 0FH 即将AL高4位清0 CF AF 2 未组合BCD码调整指令 AAA AAS AAM AAD 非压缩BCD码的加减运算举例 实现非压缩BCD码加法 8 9 77MOVAL 08H AL 08 非压缩BCD码表示真值8MOVBL 09H BL 09 非压缩BCD码表示真值9ADDAL BLl 二进制加法 AL 08H 09H 11HAAA 十进制调整 ax 0707h 实现非压缩BCD码减法 68 09 59movax 0608h ax 0608h 非压缩BCD码表示真值68movbl 09h bl 09h 非压缩BCD码表示真值9subal bl 二进制减法 al 08h 09h ffhaas 十进制调整 ax 0509h 3 未组合BCD码乘法的调整指令AAMAAM也称为乘法的ASCII码调整指令 在MUL指令后执行 参加MUL相乘的两个数应当是高4位为0的8位未组合BCD码 功能 执行MUL后 AL 0AH后 商 AH 余数 AL 例3 36 MOVAL 06HMOVBL 07H MULBL AX 002AHAAM AX 0402H 6 7 42 4 未组合BCD码除法的调整指令AADAAD也称为除法的ASCII码调整指令 在DIV指令之前进行 功能 将AX中的未组合BCD码变成二进制数 并放入AL MOVAX 0504H MOVBL 03H AAD AX 0036HDIVBL AX 0012H AAM AL 0AH 商 AH 余数 AL 这一节指令要掌握 ADD ADCSUB SBBINC DECCMPNEGMULDIVDAADAS 3 2 3逻辑运算指令 以二进制位为基本单位进行数据的操作1 逻辑运算 AND TEST OR XOR NOT2 移位 SHL SHR SAL SAR3 循环移位 ROL ROR RCL RCR 常用指令 应该特别熟悉 同时 注意这些指令对标志位的影响 1 逻辑运算指令 逻辑运算指令主要用于对寄存器或存储器单元中某些位的测试 置位 复位等操作 逻辑运算指令对操作数都是按位进行操作 对相应的标志位产生影响 操作数可以是字节或字 结果回送到目的寄存器或存储器 格式 ANDAL BL 逻辑与ORAX BX 逻辑或NOTBYTEPTR SI 0100H 逻辑取反XORXORAX BX 逻辑异或TESTAX 1234H 测试 同逻辑与不回送 应用举例 AND 将指定位清零ANDAL 0FH AL的高4位清零TEST 判断指定位是 0 还是 1 TESTAL 80H 判断AL最高位是否为 1 JNZNEXT 如果为 1 则跳转OR 将指定位置 1 ORAL 01H AL的最低位置 1 XOR 将指定位取反 将寄存器清零XORAL 80H AL的最高位取反XORBL BL BL清0 相当于 MOVBL 0 NOT 将整个操作数取反NOTAL 若执行前 AL 00001111B 则执行后 AL 11110000B 2 移位指令 SHL SHR SAL SARSHLAL 1 移位次数为1SARBX CL 移位次数为 CL SHRWORDPTR BX SI CLSALBYTEPTR 2360H 1目的操作数 通用寄存器或存储器操作数移位次数 n只能为1 移位次数大于1时一定要采用寄存器CL286以上系统 移位次数n不受限制 逻辑左移SHL最高位 CF 0 最低位 其他位左移逻辑右移SHR0 最高位 最低位 CF 其他位右移算术左移SAL最高位 CF 0 最低位 其他位左移算术右移SAR新最高位 原最高位 最低位 CF 其他位右移 对标志寄存器的影响 移位次数 1 则 M为移位后操作数的最高位移位次数 1 则 不影响OF 利用移位指令做简单的乘除运算 无符号数 2 SHLAL 1无符号数 2 SHRAL 1带符号数 2 SALAL 1带符号数 2 SARAL 1例 设 AL 12H 18 无符号数 则 SHLAL 1 AL 24H 36 SHRAL 1 AL 09H 9 18 2 9设 AL 0F0H 16 带符号数 则 SALAL 1 AL 0E0H 32SARAL 1 AL 0F8H 8 3 循环移位指令ROL ROR RCL RCR 指令格式 ROLAL 1 移位次数为1RORBX CL 移位次数为 CL RCRWORDPTR BX SI CLRCLBYTEPTR 2360H 1 对标志寄存器的影响 移位次数 0时影响CF 但不影响SF ZF AF PF移位次数 1时 M为移位后操作数的最高位移位次数 1时 OF不受影响 移位过程 循环左移ROL最高位 CF和最低位 其他位左移循环右移ROR最低位 CF和最高位 其他位右移带进位循环左移RCL最高位 CF CF 最低位 其他位左移带进位循环右移RCR最低位 CF CF 新最高位 其他位右移 利用循环移位指令 实现长整数的逻辑 算术移位 例 对双字 DX AX 逻辑左移 SHLAX 1 AX的最高位移到CF中RCRDX 1 CF 即AX的最高位 移到DX的最低位中算术右移 SARDX 1 DX的最低位进入到CF中RCRAX 1 CF 即DX的最低位 进入到AX的最高位中 编程练习 1 用两种方法计算AX AX 10 其中AX为无符号数 1 MULMOVAX 2 SHLMOVAX SHLAX 1MOVBX AXSHLAX 1SHLAX 1ADDAX BX 2 32位带符号数存放在寄存器DX和AX中 其中DX存放高16位 AX存放低16位计算 DX AX DX AX 2 3 32位带符号数存放在寄存器DX和AX中 其中DX存放高16位 AX存放低16位计算 DX AX DX AX 2 MOVAX SALAX 1RCLDX 1 MOVAX SARDX 1RCRAX 1 4 将 DATA1 100个字节的BCD码转换ASCII并显示 LEASI DATA1MOVCX 64HCLDNEXT LODSBMOVBL ALANDAL 0F0HSHLAL 1SHLAL 1SHLAL 1SHLAL 1ADDAL 30HMOVDL ALMOVAH 02HINT21HMOVAL BLANDAL 0FHADDAL 30HMOVDL ALMOVAH 02HINT21HDECCXJCXZ 3 2 4串操作指令 串操作指令就是用一条指令实现对存储器中一串字符或数据的操作 8086指令系统提供了5条基本的串操作指令和3条重复前缀指令 且遵循相同的规则 MOVSLODSSTOSCMPSSCASREPREPZ REPEREPNZ REPNE 1 源操作数用寄存器SI寻址 默认在数据段DS中 即DS SI 目的操作数用寄存器DI寻址 默认在附加段ES中 即ES DI 2 指令后 B 进行字节操作 指令后 W 进行字操作 3 DF 0地址增 每完成1次操作 SI和DI将自动修改 1或 2DF 1地址减 每完成1次操作 SI和DI将自动修改 1或 2 4 CX中存放数据块的长度 在串操作指令前加重复前缀指令 则自动完成CX 1不等于0 重复操作的过程 1 基本串操作指令 1 串传送指令MOVSB 字节传送 ES DI DS SI SI SI 1 DI DI 1MOVSW 字传送 ES DI DS SI SI SI 2 DI DI 2 2 取串指令LODSB 字节传送 AL DS SI SI SI 1LODSW 字传送 AX DS SI SI SI 2 3 存串指令STOSB 字节传送 ES DI AL DI DI 1STOSW 字传送 ES DI AX DI DI 2 4 串比较指令CMPSB 字节传送ES SI DS DI SI SI 1 DI DI 1CMPSW 字传送 ES SI DS DI SI SI 2 DI DI 25 串搜索指令SCASB 字节传送 AL ES DI DI DI 1 SCASW 字传送 AX ES DI DI DI 2 2 重复前缀指令 REP CX 1不为0重复操作REPE REPZ CX 1不为0与ZF 1时重复操作REPNE REPNZ CX 1不为0与ZF 0时重复操作REPMOVS STOS 每执行一次串指令 判别CX CX 1若不等于0则重复执行 直到CX 0 结束REPE REPZCMPS SCAS 每执行一次串指令 判断CX CX 1若不等于0并且ZF 1 则重复执行 只要CX 0或ZF 0 结束REPNE REPNZCMPS SCAS 每执行一次串指令 CX CX 1若不等于0并且ZF 0 则重复执行只要CX 0或ZF 1 结束LODS指令之前不能添加重复前缀 例3 42将首地址为SRC的源字符串传送到DEST为首地址的内存区 字符串的长度为N个字节 CLD DF 0 增量方向LEASI SRC DS SI 字符串首地址LEADI ES DEST ES DI 目标地址MOVCX 100 字符串长度REPMOVSB 重复字符串传送 例3 43比较两个字符串是否有相同的元素CLD DF 0 增量方向LEASI SRC DS SI 字符串首地址LEADI ES DEST ES DI 目标地址MOVCX N 字符串长度REPNECMPSB 重复比较字符串JNZNOT FOUNT 无相同的元素 例3 44在首地址为ES DEST的字符串中检查是否有字符 M 字符串的长度为N个字节 CLD DF 0 增量方向LEADI ES DEST ES DI 目标地址MOVCX N 字符串长度MOVAL M AL 搜索字符REPNESCASB 重复搜索字符串是否有字符 M 例3 45将首地址为DS SRC的字节数据串中非0元素送到首地址为ES DEST的内存区中 字符串长度为200 CLD DF 0 增量方向LEASI SRC DS SI 字符串首地址LEADI ES DEST ES DI 目标地址MOVCX 200 字符串长度GOON LODSB 取字符串的一个元素CMPAL 0 字符串元素为0吗 JZNEXT 是0 继续下一个元素STOSB 非0 存入首地址ES DEST的内存NEXT DECCXJNEGOON 3 2 5控制转移指令 控制转移指令通过改变段寄存器CS和指令指针IP可以改变指令执行的顺序 控制转移指令根据程序转移地址的不同 1 段内转移 只改变IP内容2 段间转移 改变IP和CS的内容 1 无条件转移指令JMP 1 段内直接转移程序转移到指令中给出的16位或 8位偏移地址 如 JMP1200H IP 1200H 转移到1200HJMPSHORTLOOP 段内短转移IP IP 8位偏移量 转向符号地址LOOP处 128 127 JMPNEARPTRL2 段内短转移 转向符号地址L2处 2 段内间接转移程序转移的偏移地址在寄存器或存储单元之中 如 JMPCX IP CX JMP AX SI IP AX SI JMPWORDPTR SI IP SI 所指定的存储器字单元之中的16位数据 3 段间直接转移指令中直接给出转移地址的段地址和偏移地址 如 JMPFARPTRNEXT CS IP 将NEXT处新的段基址和新的偏移地址3250 0024HNEXT MOVAX BX 4 段间间接转移程序转移的段基址和偏移地址是存储单元中存放的32位数据 如DS 2000H DI 3150H JMPDWORDPTR DI IP 23151H 23150H CS 23153H 23152H 23153H23152H23151H23150H 2 过程调用及返回指令 CALL RET 程序设计中 将具有独立功能的程序模块称为子程序 8086汇编中称为过程 程序执行过程中 由调用程序使用调用指令CALL调用这些子程序 当子程序执行后 通过返回指令RET返回主程序 1 调用指令CALL过程名 功能 调用已定义的过程 并将断点地址压入堆栈保护 段内直接调用 CALLYANS SS SP IP SP SP 2 IP YANS处的16位偏移量 段内间接调用 CALLBX SS SP IP SP SP 2 IP BX 偏移量 段间直接调用 CALLFARPTRSUB2 SS SP CS SP SP 2 SS SP IPSP SP 2IP SUB2偏移地址 CS SUB2段地址 段间间接调用 CALLFARPTR SI SS SP CS SP SP 2 SS SP IP SP SP 2IP SI CS SI 2 2 返回指令RET 功能 将断点地址从堆栈中弹出 然后返回地址继续执行 无参数段内返回RET IP SS SP SP SP 2 有参数段内返回RETn IP SS SP SP SP 2 SP SP n 无参数段间返回RET IP SS SP SP SP 2 CS SS SP SP SP 2 SP SP 4 有参数段间返回RETn IP SS SP SP SP 2 CS SS SP SP SP 2 SP SP nSP SP 4 n 3 条件转移指令 1 根据单个标志位的状态判断转移的指令 以状态标志位 有符号数运算和无符号数运算结果及CX的值为条件转移 区间 128 127字节内 2 根据两个无符号数的比较结果判断转移的指令 A B E N 3 根据两个有符号数的比较结果判断转移的指令G L E N 4 根据CX的内容判断转移的指令 JCXZDESTCX 0 转移到DEST循环 例1 根据单个标志位的状态判断后转移的指令ADDAX BXJCTOO BIG 若加法有进位转至TOO BIG处理SUBAL BLJZZERO 若减法结果为0 转至ZERO处理例2 比较无符号数FEH和05H的大小 执行下面的指令后 将转移到ABC处继续执行指令 MOVAL 0FEHCMPAL 05HJAABC 若 AL 05H 则转向ABC 4 循环控制指令 LOOPDEST CX 0 则循环LOOPE LOOPZDEST ZF 1且 CX 0 则循环LOOPNE LOOPNZDEST ZF 0且 CX 0 则循环JCXZDEST CX 0 则循环 例3 50在以DATA为首地址的内存数据段中 存放有200个16位有符号数 试找出其中最大和最小的有符号数 并分别放在MAX和MIN为首的内存单元中 START LEASI DATA SI 数据块首地址MOVCX 200 CX 数据块长度CLD 清方向标志DFLODSW AX 一个16位有符号数MOVMAX AX 将该数送MAXMOVMIN AX 将该数送MINDECCX CX CX 1NEXT LODSW 取下一个16位有符号数CMPAX MAX 与MAX单元内容进行比较JGLARGER 若大于则转LARGERCMPAX MIN 否则再与MIN单元内容进行比较JLSMALL 若小于MIN的内容则转SMALLJMPGOON 否则就转至GOONLARGER MOVMAX AX MAX AX JMPGOONSMALL MOVMIN AX MIN AX GOON LOOPNEXT CX 1 若CX 0 则转NEXTHLT 5 中断指令 1 中断指令格式 INTn功能 用于产生软件中断 以调用中断类型号为n的中断服务程序n为一个8位立即数 取值范围为0 255 2 溢出中断指令格式 INTO功能 用来判断有符号数加减运算是否溢出 一般把INTO指令安排在有符号数加 减运算指令的后面 一旦查出OF 1 则转到溢出中断处理程序 INTO指令是n 4的INT指令 其中断向量为0010H 3 中断返回指令格式 IRET功能 将堆栈中的断点地址弹出赋给IP和CS 以实现中断返回 将标志寄存器的值弹出 恢复中断前的状态 3 2 6处理器控制指令 1 标志操作指令CLC CF 0 进位标志位置0STC CF 1 进位标志位置1CMC CF 进位标志取反CLD DF 0方向标志位置0STD DF 1方向标志位置CLI IF 0中断允许标志位置0STI IF 1中断允许标志位置1 2 外部同步指令 1 暂停指令HLT 2 等待指令WAIT 3 交权指令ESC 4 封锁指令LOCK 5 空操作指令NOP 7 4中断调用 7 4 1DOS和BIOS中断的调用方法7 4 2DOSBIOS调用举例定时系统字符设备I O控制文件管理中断向量的修改显示字符串 7 4 1DOS和BIOS中断的调用方法 1 将入口参数送入指定的调用寄存器 没有入口参数 就不需要这一步 2 将功能号送入AH寄存器 3 产生一个软中断INTn 转入子程序入口 4 分析通过CPU的返回寄存器的出口参数 如果没有返回值就不需要 DOS系统功能调用 7 4 2DOS系统功能调用举例 例7 4使用INT21H的2BH系统功能设置日期为2004年5月1日 MOVDL 1 送入口参数 把日子放入DL中MOVDH 5 把月份放入DH中MOVCX 2004 把年份放入CX中 CX中的年份值是以1980为基准的偏移值SUBCX 1980 减去1980才为年份设定值MOVAH 2BH 设置日期功能号送入AH寄存器INT21H 执行DOS系统功能调用CMPAL 0FFH 根据出口参数判断AL 00H 成功 AL FFH 失败JEERROR 不成功 转错误处理 成功 往下执行ERROR 略 部分DOS系统功能调用表 共90多个 例7 5从键盘输入一个字符 并同时在显示屏上输出 当键入字符 时 则停止操作 DON1 MOVAH O1H 置单字符输入INT21HCMPAL 是结束字符吗JZDON2 是 转向DON2MOVDL ALMOVAH 02H 显示输出字符INT21HJMPDON1DON2 INT0 程序结束 例7 8从键盘输入一串字符 并在显示屏上显示出来 注意09H功能显示字符串时是以 符号结束的 因此 要显示的字符串一律以 结尾DATASEGMENTBUFSIZEDB50 最多可键入50个字符ACTLENDB 实际键入的字符数CHRASDB50DUP 20H 键
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025级临床药理学题库及答案
- (2025年)四川省攀枝花市中级会计职称经济法预测试题含答案
- 摄影爱好者基础知识培训课件
- 物流装备技术试题题库及答案
- 2025关于标准合同解除劳动合同证明书范本
- 2025租赁合同范本模板
- 2025汽车销售合同简单范文
- 2025新版技术咨询合同
- 2025补偿安置房屋交易合同
- 搪瓷基本知识培训内容
- 温硝化制硝基苯装置的改进
- 保教知识与能力幼儿园课件
- 财务部半年度述职汇报PPT模板
- 药品种类清单
- 公共基础知识(社区工作者基础知识)试题(附答案)
- GB/T 37915-2019社区商业设施设置与功能要求
- GB/T 31298-2014TC4钛合金厚板
- 《电业安全工作规程》
- 卡西欧gw5600说明书
- 中兴NGN培训教材 MSG9000结构原理介绍课件
- 穿湖隧道施工组织设计
评论
0/150
提交评论