




已阅读5页,还剩133页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1概述 汇编语言基本概念程序汇编连接与调试方法 1汇编语言基本概念 一 汇编语言相关特征机器语言是一种用二进制代码编写指令和程序的语言例 B004传送指令 将4送到累加器AL中汇编语言用助记符代替指令的操作码 用数字或符号代替指令中操作数或操作数存放位置的一种程序设计语言例 MOVAL 04 传送指令 将4送到累加器AL中MOVEAX 20020928 1汇编语言基本概念 二 汇编语句行基础知识基本格式 名字 操作符 操作数 注释 操作符 机器指令 伪指令 宏指令的助记符操作数 操作数项有多个操作数时 用逗号 分开 1汇编语言基本概念 三 汇编语言源程序示例1 程序的层次模块结构 源程序 堆栈段 数据段 代码段 DEBUG直接编程 初始化 输入 运算处理 转换 输出 返回DOS 数值运算 非数值运算 1汇编语言基本概念 汇编语言与机器特性密切相关 汇编语言 硬件特性 CPU工作方式 CPU寄存器体系 指令系统 存储管理机制 中断与外部设备 依赖于 充分发挥 1汇编语言基本概念 2 源程序的分段结构及示例说明例 程序输出显示 Welcome 流程描述如下 定义堆栈段 定义数据段 定义代码段 源程序模块结束 指示段寄存器 初始化 显示输出字符串 自动返回DOS 源程序SAMPLE ASM STACKSSEGMENTSTACKDW128DUP STACKSENDSDATASSEGMENTSTRINGDB Welcome 13h 10h DATASENDSCODESSEGMENTASSUMECS CODE DS DATASSTART MOVAX DATASMOVDS AXLEADX STRINGMOVAH 09HINT21HMOVAX 4C00HINT21HCODESENDSENDSTART 堆栈段 数据段 代码段 源程序模块结束 2程序汇编连接与调试方法 设计 编写源程序 数据结构 算法 编码 汇编语言源程序文件 ASM 目标代码程序文件 OBJ 可执行程序文件 EXE COM 运行正确 调试运行正确 结束 否 否 否 是 是 调试DEBUG 编辑EDIT 连接LINK 执行 汇编MASM 2程序汇编连接与调试方法 一 程序编辑利用熟悉的文本编辑软件 对汇编语言源程序进行编辑 生成 ASM文件 汇编语言使用过程中 生成不同文件后缀名的含义 ASM汇编源程序 OBJ目标文件 LST列表文件 CRF交叉引用文件 MAP分配图文件 LIB库文件 DEF定义文件 EXE COM可执行文件 2程序汇编连接与调试方法 二 程序汇编与连接执行汇编程序MASM EXEMASM 查看命令参数连接程序LINK EXELINK 查看命令参数汇编连接程序ML EXEML 查看命令参数汇编过程 对源程序扫描后生成目标文件 OBJ如有语法错误 则显示相应的错误信息 返回修改源程序 2程序汇编连接与调试方法 汇编示例 D MASM6 masmp1 asm显示如下 Assembling p1 asmp1 asm 12 errorA2006 undefinedsymbol FIVE1表示 源程序12行有错 未定义符号FIVE1源程序一直到修改后汇编无错误 则生成p1 obj连接 D MASM6 linkp1生成执行文件p1 exe则可直接运行 D MASM6 p1 2程序汇编连接与调试方法 三 程序跟踪调试汇编过程中可以检查程序的语法错误汇编无误 生成可执行文件后 运行没有达到预期的结果 程序可能存在逻辑错误 需要用调试工具进行跟踪调试 查找程序的逻辑错误 常用调试工具程序 DEBUG EXE提供一个监控程序环境 通过提供命令和相关参数了解程序执行过程中各寄存器和存储单元的值及其变化情况 帮助确定程序中的问题 全部命令的详细格式参见教材附录 2指令系统 指令格式指令寻址方式指令集 2 1指令的基本格式 Intel32位处理器指令格式 指令长度不能超过15个字节 前缀操作码寻址方式位移量立即数 0 3B1 2B0 2B0 4B0 4B 16位寻址方式 立即寻址寄存器寻址直接寻址寄存器间接寻址寄存器相对寻址基址变址寻址相对基址变址寻址 2 2寻址方式 32位的指令寻址包括数据寻址和程序转移寻址 现介绍如下 1 非存储器的数据寻址方式示例 1 立即寻址MOVEAX 19461201H 19461201H EAX与16位寻址相似 2 寄存器寻址MOVEAX ECX ECX EAX与16位寻址相似 2 存储器的数据寻址方式示例 1 直接寻址MOVEAX 4612H EA 4612 EA EAX与16位寻址相似 2 寄存器间接寻址MOV ECX EDX ECX 间接指示存放操作数EA在ECX中 EA ECX EDX EA 与16位寻址相似 存储器的数据寻址方式示例 续 3 寄存器相对寻址MOVECX EAX 24 EA EAX EA ECX 4 基址变址寻址MOVEAX EBX ESI EA EBX ESI EA EAX 5 相对基址变址寻址SUBEAX EBX ESI 0FF0H EA EBX ESI 0FF0H EAX EA EAX 存储器的数据寻址方式示例 续 6 带比例因子的变址MOVECX ESI 4 EA ESI 4 EA ECX 7 基址与带比例因子的变址寻址MOVECX EAX EDX 8 EA EAX EDX 8 EA ECX 8 基址与带位移量及比例因子的变址寻址MOVEAX LTAB EDI 4 EBP 80 EA LTAB EDI 4 EBP 80 EA EAX 3 程序转移寻址方式 有相对EIP的段内直接寻址 段内间接寻址 段间直接寻址和段间间接寻址 段内转移是指程序在同一段代码内 仅改变EIP的值而不改变CS的值所发生的转移 而段间转移是程序要从一个代码段转移到另一个代码段 则不仅改变EIP的值 同时也要改变CS的值 无论是段内还是段间发生的转移都有直接和间接的形式 因此程序转移有四种寻址 1 段内直接寻址 IntrasegmentDirectAddressing 转移偏移地址EA是指令中位移量 与指令指针IP当前内容之和 即 EA IP DISP IP2 段内间接寻址 IntrasegmentIndirectAddressing 转移偏移地址EA如果指定的是寄存器 则将寄存器的内容 IP 如果指定的是存储器中的一个字 则将该存储单元的内容 IP 段内转移过程 段内转移图示 段内直接转移和间接转移寻址如下图 段间转移过程 1 段间直接寻址 IntersegmentDirectAddressing 用指令中直接提供的转移偏移地址EA IP 指令同时直接提供的转移段地址 CS 实现从一个代码段转移到另一个代码段 2 段间间接寻址 IntersegmentIndirectAddressing 根据存储器的数据寻址方式获得EA 再将EA双字单元第一个字的内容作为转移偏移地址 IP EA双字单元第二个字的内容作为转移段地址 CS 然后CS IP形成指令的实际转移地址 段间转移图示 程序段间的直接或间接转移如下图 4 前缀代码67H或66H 32位机汇编指令或有32位操作数的情形识别涉及指令机器码格式的有关前缀表示 这些在相应的汇编列表文件 LST 或DEBUG过程中可以看到 如前缀代码67H或66H 1 机器指令操作数长度属性前缀码66H 66 83E00FANDEAX 0FH EAX 0FH EAX66 8BCBMOVECX EAX 2 机器指令寻址长度续性前缀 67 8B147500000026MOVDX 26H ESI 2 67 66 8B04B0MOVEAX EAX ESI 4 3 3指令系统 指令系统是一台机器所有指令的集合 Pentium系列机指令系统庞大 类型多样 约有300多条指令 其中包括基本指令100多条 具有支持多进程 多任务 虚拟存储器和多媒体等功能的32位指令 常用指令类型集 1 数据传送类指令2 算术运算类指令3 逻辑和移位操作类指令4 串操作与重复前缀类指令5 控制转移类指令6 处理机控制类指令7 其它指令 本讲义约定 OPD表示目的操作数 OPS表示源操作数 OPS 表示OPS的内容 OPD 表示OPD的内容 表示传送 R表示通用寄存器 Sr表示段寄存器 M表示主存储器 XXXX XXXX表示组合号 表示其前后组成一个数 L表示操作数的长度 d表示立即数 B W D表示字节或字或双字 数据传送类指令 通用数据传送指令堆栈操作指令标志寄存器传送指令地址传送指令输入输出指令 通用数据传送指令 1 传送指令MOV2 数据交换指令XCHG3 查表转换指令XLAT 语句格式 MOVOPD OPS功能 将源操作数传送入目的地址 源地址内容不变 即 OPS OPD 下图描述了MOV指令在传送数据时允许传送的路径及类型 1 传送指令MOV 注意 1 OPD OPS的类型 8 16 32位 必须一致 2 OPD不能使用立即数 3 双操作数不能同时为内存中的数据 4 段寄存器不能直接送立即数 5 指令执行后不影响FLAGS的标志位的状态 6 不能任意改变CS 示例 存储器与寄存器间数据传送 MOVAX BUF BUF是变量 源操作数为直接寻址MOVBH DI 源操作数为寄存器间接寻址MOVDI ES 3 SI 源操作数为变址寻址 使用跨段前缀MOVBP 3 BX SI 源操作数为基址加变址寻址MOVBUFA DL BUFA是一字节变量MOV BP AX 使用SS段寄存器MOVDS BP DL 使用跨段前缀MOVBUF DS BUF是个字变量MOVES BUF 2 数据交换指令XCHG 语句格式 XCHGOPD OPS功能 将源地址与目的地址中的内容互换 即 OPD OPS OPS OPD 寄存器与存储器之间数据交换 MOVAX 5678H AX 5678HMOVBX 0FFFFH BX 0FFFFHXCHGAX BX AX 0FFFH BX 5678H MOVSX和MOVZX指令 格式 MOVSXOPD OPSMOVZXOPD OPS它们将OPS的内容 OPD 但是对于OPD左边空缺的位 MOVSX全部用OPS的符号填充 作符号延伸 可以对有符号的数进行符号扩展 而MOVZX是全部以零 0 填充 可对无符号数进行0扩展 注意 OPD的位数比OPS的位数长 示例 MOVCL 88HMOVZXAX CL AX 0088HMOVSXBX CL BX FF88H另外也可如下书写指令 MOVSXCX BLMOVSXEAX BUFMOVZXAX CLMOVSXEBX ALMOVZXESI BUFMOVZXEDX DI 3 查表转换指令XLA 语句格式 XLATOPS或XLAT功能 将 BX 为首址 AL 为位移量的字节存储单元中的数据送AL寄存器 即 BX AL AL 堆栈操作指令 1 进栈指令PUSH2 出栈指令POP3 PUSHA PUSHAD指令4 POPA POPAD指令 1 进栈指令PUSH 语句格式 PUSHOPS W D R Sr M d功能 将寄存器 段寄存器 立即数或存储器中的一个字数据压入堆栈顶部 指令视操作数长度为字 2字节 或双字 4字节 和地址为16位 32位 先将SP ESP 2 4 SP ESP 后将OPS SP ESP 2 出栈指令POP 语句格式 POPOPD W D R Sr M d功能 视OPD长度为字或双字 先将当前SP ESP指向的内容 OPD 后将SP ESP 2 4 SP ESP 从POP指令功能可看出 该指令为PUSH指令的逆过程 一般成对使用 3 PUSHA PUSHAD指令 格式 PUSHA 压入8个字通用寄存器 PUSHAD 压入8个双字通用寄存器 4 POPA POPAD指令 格式 POPA 弹出到8个16位通用寄存器POPAD 弹出到8个32位通用寄存器 标志寄存器传送指令 1 标志送AH指令LAHF2 AH送标志指令SAHF3 标志寄存器进栈指令PUSHF4 标志寄存器出栈指令POPF 1 标志送AH指令LAHF 语句格式 LAHF功能 将标志寄存器的低8位送入AH寄存器 即 FLAGS 7 0 AH 该指令的执行对标志位无影响 例 标志寄存器传送 执行前 FLAGS 0485H AX 0FFFFH执行指令 LAHF执行后 AH 85H 2 AH送标志指令SAHF 语句格式 SAHF功能 将AH的内容送入标志寄存器的低8位 高8位不变 即 AH FLAGS7 0 从该指令功能可看出 SAHF为LAHF的逆过程 3 标志寄存器进出栈指令PUSHF POPF 语句格式 PUSHF功能 将标志寄存器的内容压入堆栈 即 FLAGS 堆栈 POPF功能 将堆栈顶端的内容送到标志寄存器 即堆栈 FLAGS 地址传送指令 1 传送偏移地址指令LEA2 传送偏移地址及数据段首址指令LDS3 传送偏移地址及附加数据段指令LES 1 传送偏移地址指令LEA 语句格式 LEAOPD OPS OPS的EA OPD OPD是16 32位的R OPS是M功能 主存按源地址的寻址方式计算偏移地址 将偏移地址送入指定寄存器 例 主存偏移地址的获取 MOVBX 0100H BX 0100HMOVSI 0210H SI 0210HLEABX 1234 BX SI BX 1544H 2 LDS LES LFS LGS LSS指令 语句格式 LDS LES LFS LGS LSSOPD OPS EA OPS功能 地址传送LDS等指令中 OPD为R 16位 OPS为M 32位 操作对FLAGS无影响 执行后结果为 EA R 全程指针的偏移地址 EA 2 LDS LES LFS LGS LSS 全程指针的段地址 输入输出指令 1 输入指令IN2 输出指令OUT 1 输入指令IN 输入指令用来从指定的外设寄存器取信息送入累加器 它有四种形式 1 语句格式 INAL PORT功能 PORT AL 2 语句格式 INAX PORT功能 PORT AX 3 语句格式 INAL DX功能 DX AL 4 语句格式 INAX DX功能 DX AL 2 输出指令OUT 输出指令用来把累加器的内容送往指定的外设存储器 它有四种形式 1 语句格式 OUTPORT AL功能 AL PORT 2 语句格式 OUTPORT AX功能 AX PORT 3 语句格式 OUTDX AL功能 AL DX 4 语句格式 OUTDX AX功能 AX DX 算术运算类指令 加法指令减运算指令乘运算指令除运算指令 加法指令 1 加1指令INC2 加指令ADD3 带进位加指令ADC 1 加1指令INC语句格式 INCOPD功能 将目的操作数加1 结果送目的地址 即 OPD 1 OPD INC指令是一个单操作数指令 操作数可以是寄存器或存储器操作数 如 INCBX 即 BX 1 BX 加1指令可用于对计数器和地址指针进行调整 2 加指令ADD 语句格式 ADDOPD OPS功能 将目的操作数与源操作数相加 结果存入目的地址中 源地址的内容不改变 即 OPD OPS OPD 语句格式 ADCOPD OPS功能 将目的操作数加源操作数再加低位进位 结果送目的地址 即 OPD OPS CF OPD 例 无符号双字加法运算 MOVAX 4652H AX 4652HADDAX 0F0F0H AX 3742H CF 1MOVDX 0234H DX 0234HADCDX 0F0F0H DX 0F325H CF 0 3 带进位加指令ADC 减运算指令 1 减1指令DEC2 减指令SUB3 求补指令NEG4 带借位减指令SBB5 比较指令CMP 1 减1指令DEC 语句格式 DECOPD功能 将目的操作数减1 结果送目的地址 即 OPD 1 OPD DEC指令是一个单操作数指令 操作数可以是寄存器或存储器操作数 如 DECCX 即 CX 1 CX 减1指令DEC也一般用于对计数器和地址指针的调整 语句格式 SUBOPD OPS功能 目的操作数减源操作数 结果存于目的地址 源地址内容不变 即 OPD OPS OPD 例 减法运算 MOVAX 5678H AX 5678HSUBAX 1234H AX 4444HMOVBX 3354H BX 3354HSUBBX 3340H BX 0014H 2 减指令SUB 语句格式 NEGOPD功能 将目的操作数的每一位求反 包括符号位 后加1 结果送目的地址 即 OPD 1 OPD 例 求补运算 MOVAX 0FF64HNEGAL AX 0FF9CHSUBAL 9DH AX 0FFFFHNEGAX AX 0001HDECAL AX 0000HNEGAX AX 0000H 3 求补指令NEG 语句格式 SBBOPD OPS功能 目的操作数减源操作数再减低位借位CF 结果送目的地址 即 OPD OPS CF OPD 4 带借位减指令SBB 5 比较指令CMP 语句格式 CMPOPD OPS功能 目的操作数减源操作数 结果只影响标志位 不送入目的地址 即 OPD OPS 例 比较AL的内容数值大小 CMPAL 50 AL 50JBBELOW AL 50 AL 50 ALINCAH AH 1 AHBELOW 乘运算指令 1 无符号数乘法指令MUL2 有符号乘指令IMUL 1 无符号数乘法指令MUL 语句格式 MULOPS功能 若是字节数据相乘 AL 与OPS相乘得到字数据存入AX中 若是字数据相乘 则 AX 与OPS相乘得到双字数据 高字存入DX 低字存入AX中 即字节乘法 AL OPS AX 字乘法 AX OPS DX AX 例 无符号数0A3H与11H相乘 MOVAL 0A3H AL 0A3HMOVBL 11H BL 11HMULBL AX 0AD3H 2 有符号乘指令IMUL 语句格式 IMULOPS功能 字节乘法 AL OPS AX 字乘法 AX OPS DX AX IMUL指令除计算对象是带符号二进制数外 其他都与MUL一样 但计算结果不同 例 有符号数0B4H与11H相乘 MOVAL 0B4H AL B4HMOVBL 11H BL 11HIMULBL AX 0FAF4H 除运算指令 1 无符号除指令DIV2 有符号除指令IDIV 1 无符号除指令DIV 语句格式 DIVOPS功能 字节除法 AX OPS AL 商 AH 余数 字除法 DX AX OPS AX 商 DX 余数 例 写出实现无符号数0400H 0B4H运算的程序段 MOVAX 0400H AX 0400HMOVBL 0B4H BL 0B4HDIVBL 商 AL 05H 余数 AH 7CH 语句格式 IDIVOPS功能 字节除法 AX OPS AL 商 AH 余数 字除法 DX AX OPS AX 商 DX 余数 除法指令DIV和IDIV虽然对标志的影响未定义 但可产生溢出 例 写出实现有符号数0400H 0B4H运算的程序段 MOVAX 0400H AX 0400HMOVBX 0B4H BX 0B4HIDIVBX AL 0F3H AH 24H 2 有符号除指令IDIV 符号扩展指令 1 字节转换成字指令CBW2 将字转换成双字指令CWD 1 字节转换成字指令CBW 语句格式 CBW功能 将AL中的符号位数据扩展至AH 例 将字节数据扩展成字数据 MOVAL 0A5H AL 0A5HCBW AX 0FFA5HADDAL 70H AL 25HCBW AX 0025H 语句格式 CWD功能 将AX中的符号位数据扩展至DX 例 将字数据扩展成双字数据 MOVDX 0 DX 0MOVAX 0FFABH AX 0FFABHCWD DX 0FFFFH AX 0FFABH 2 将字转换成双字指令CWD 十进制调整指令 1 压缩BCD码调整指令2 非压缩BCD码调整指令 1 加法的十进制调整指令DAA 语句格式 DAA功能 如果AL寄存器中低4位大于9或辅助进位 AF 1 则 AL AL 6且 AF 1 如果 AL 0A0H或 CF 1 则 AL AL 60H且 CF 1 同时 SF ZF PF均有影响 例 压缩BCD码的加法运算 MOVAL 68H AL 68H 表示压缩BCD码68MOVBL 28H BL 28H 表示压缩BCD码28ADDAL BL 二进制加法 AL 68H 28H 90HDAA 十进制调整 AL 96H 实现压缩BCD码加法 68 28 96 2 减法的十进制调整指令DAS 语句格式 DAS功能 如果 AF 1或AL寄存器中低4位大于9 则 AL AL 6且 AF 1 如果 AL 0A0H或 CF 1 则 AL AL 60H且 CF 1 同时SF ZF PF均受影响 例 压缩BCD码的减法运算 MOVAL 68H AL 68H 表示压缩BCD码68MOVBL 28H BL 28H 表示压缩BCD码28SUBAL BL 二进制减法 AL 68H 28H 40HDAS 十进制调整 AL 40H 实现压缩BCD码减法 68 28 40 2 非压缩BCD码调整指令 1 加法的非压缩BCD码调整指令AAA 2 减法的非压缩BCD码调整指令AAS 3 乘法的非压缩BCD码调整指令AAM 4 除法的非压缩BCD码调整指令AAD 语句格式 AAA功能 如果AL的低4位大于9或 AF 1 则 AL AL 6 AH AH 1 CF CF 1且AL高4位清零 否则 CF AF 0AL高4位清零 1 加法的非压缩BCD码调整指令AAA 语句格式 AAS功能 如果AL的低4位大于9或 AF 1 则 AL AL 6 AH AH 1 AF CF 1AL高4位清零 否则 CF AF 0AL高4位清零 其他标志位OF PF SF ZF不确定 2 减法的非压缩BCD码调整指令AAS 语句格式 AAM功能 被调整的乘积在AX中 对AL按10取模 则 AL 0AH AH 商 AL 余数 其中AH为商 AL为余数 标志位AF CF OF PF SF ZF受影响 3 乘法的非压缩BCD码调整指令AAM 语句格式 AAD功能 除法运算前 先调整被除数AX内容 使 AL AL AH 0AH AH 0即把非压缩型十进制数变成二进制数 4 除法的非压缩BCD码调整指令AAD 逻辑运算和位操作类指令 逻辑运算指令1 求反指令NOT2 逻辑乘指令AND3 测试指令TEST4 逻辑加指令OR5 按位加指令XOR 语句格式 NOTOPD功能 将目的地址中的内容逐位取反后送入目的地址 即 OPD 求反 OPD 例 逻辑非运算 MOVAX 878AH AX 878AHNOTAX AX 7875H 1 求反指令NOT 语句格式 ANDOPD OPS功能 将目的操作数和源操作数进行逻辑乘运算 结果存目的地址 即 OPD OPS OPD 该指令用于清除目的操作数中与源操作数置0的对应位 说明 逻辑乘的运算法则为 1 1 1 1 0 0 0 1 0 0 0 0 例 将AL中第3位和第7位清零 MOVAL 0FFHANDAL 77H 2 逻辑乘指令AND 语句格式 TESTOPD OPS功能 源地址和目的地址的内容执行按位的逻辑乘运算 结果不送入目的地址 即 OPD OPS 例 测试AX中的第12位是否为0 不为0则转L TESTAX 1000HJNEL 3 测试指令TEST 语句格式 OROPD OPS功能 将目的操作数和源操作数进行逻辑加运算 结果存目的地址 即 OPD OPS OPD 说明 逻辑加的运算法则为 1 1 1 1 0 1 0 1 1 0 0 0 例 将AL寄存器中第3位和第7位置1 MOVAL 0ORAL 88H 4 逻辑加指令OR 语句格式 XOROPD OPS功能 目的操作数与源操作数做按位加运算 结果送入目的地址 即 OPD OPS OPD 说明 按位加的运算法则为 1 1 0 1 0 1 0 1 1 0 0 0 例 按位加运算 MOVAL 45H AL 45HXORAL 31H AL 74H 5 按位加指令XOR 移位指令 移位指令包括算术移位指令 逻辑移位指令和循环移位指令 分别进行左移和右移操作 这些指令均有统一的语句格式 SAL SHLOPD OPS 左移SAROPD OPS 算术右移SHROPD OPS 逻辑右移其中 OPD是8 16 32位的R M OPS是计数值 即移位次数 有三种情形 OPS即可是8位的立即数或CL的内容 移位前次数 CL 其功能为将目的操作数的所有位按操作符规定的方式移动1位或按寄存器CL规定的次数 0 255 移动 结果送入目的地址 目的操作数是8位 或16位 的寄存器数据或存储器数据 语句格式 SALOPD 1或SHLOPD 1SALOPD CL或SHLOPD CL功能 将 OPD 向左移动CL指定的次数 最低位补入相应的 的内容为最后移入位的值 1 算术左移和逻辑左移指令SAL SHL 语句格式 SAROPD 1或SAROPD CLCF功能 将 OPD 向右移动CL指定的次数且最高位保持不变 CF的内容为最后移入位的值 2 算术右移指令SAR MOVBH 0F4H BH 0F4HMOVCL 2 CL 2SARBH CL BH 0FDH CF 0该例语句 SARBH CL 实际上完成了 BH BH的运算 所以 用SAR指令可以实现对有符号数除2n的运算 n为移位次数 例 算术右移运算 语句格式 SHROPD 1或SHROPD CL功能 将 OPD 向右移动CL规定的次数 最高位补入相应个数的 CF的内容为最后移入位的值 3 逻辑右移指令SHR 语句格式 ROLOPD 1或ROLLPD CL功能 将目的操作数的最高位与最低位连成一个环 将环中的所有位一起向左移动CL规定的次数 CF的内容为最后移入位的值 4 循环左移指令ROL 语句格式 ROROPD 1或ROROPD CL功能 将目的操作数的最高位与最低位连成一个环 将环中的所有位一起向右移动CL规定的次数 CF的内容为最后移入位的值 5 循环右移指令ROR 语句格式 RCLOPD 1或RCLOPD CL功能 将目的操作数连同CF标志一起向左循环移动CL规定的次数 6 带进位的循环左移指令RCL 语句格式 RCROPD 1或RCROD CL功能 将目的操作数连同CF标志一起向右循环移动所规定的次数 7 带进位的循环右移指令RCR 串操作类指令 串操作指令 数据传送类指令每次只能传送一个数据 若要传送大批数据就需要重复编程 这样就浪费了大量的时间和空间 为此8086提供了一组处理主存中连续存放数据串的指令 这就是串操作指令 下图流程图总结了串操作的过程 串操作流程图 语句格式 MOVSB 字节串传送 MOVSW 字串传送功能 将以SI为指针的源串中的一个字节 或字 存储单元中的数据传送至以DI为指针的目的地址中去 并自动修改指针 使之指向下一个字节 或字 存储单元 即 DS SI ES DI 当DF 0时 SI 和 DI 增量 当DF 1时 SI 和 DI 减量 1 传送指令MOVS 语句格式 CMPSB 字节串比较 CMPSW 字串比较功能 将SI所指的源串中的一个字节 或字 存储单元中的数据与DI所指的目的串中的一个字节 或字 存储单元中的数据相减 并根据相减的结果设置标志 但结果并不保存 即 SI DI 修改串指针 使之指向串中的下一个元素 当DF 0时 SI 和 DI 增量 当DF 1时 SI 和 DI 减量 2 串比较指令CMPS 语句格式 SCASB 字节串搜索 SCASW 字串搜索功能 AL 字节 或AX 字 中的内容与DI所指的目的串中的一个字节 或字 存储单元中的数据相减 根据相减结果设置标志位 结果不保存 即 字节操作 AL DI 字操作 AX DI 修改指针使之指向串中的下一个元素 当DF 0时 DI 增量 当DF 1时 DI 减量 3 串搜索指令SCAS 语句格式 LODSB 从字节串中取数 LODSW 从字串中取数功能 将SI所指的源串中的一个字节 或字 存储单元中的数据取出来送入AL 或AX 中 即 字节操作 SI AL 字操作 SI AX 修改指针SI 使它指向串中的下一个元素 当DF 0时 SI 增量 当DF 1时 SI 减量 4 从源串中取数指令LODS 语句格式 STOSB 往字节串中存数 2 STOSW 往字串中存数功能 将AL或AX中的数据送入DI所指的目的串中的字节 或字 存储单元中 即 字节操作 AL DI 字操作 AX DI 修改指针DI 使之指向串中的下一个元素 当DF 0时 DI 增量 当DF 1时 DI 减量 5 往目的串中存数指令STOS 1 REPREP前缀用在MOVS STOS LODS指令前 功能 每执行一次串指令 CX 1 直到 CX 0 重复执行结束 2 REPZ该指令一般用在CMP SCAS指令前 功能 每执行一次串指令 CX 1 并判断ZF标志是否为0 只要 CX 0或ZF 0 则重复执行结束 3 REPNZ该指令一般用在CMPS SCAS指令前 功能 每执行一次串指令 CX 1 并判断ZF标志是否为0 只要 CX 0或ZF 1 则重复执行结束 6 重复前缀指令REPREPZREPNZ 控制转移类指令 条件转移指令无条件转移指令循环指令子程序调用指令中断指令 条件转移指令 1 简单条件转移指令2 无符号数条件转移指令3 有符号数条件转移指令语句格式 操作符短标号功能 如果条件满足 则 IP 位移量 IP 1 简单条件转移指令 2 无符号数条件转移指令 例 比较无符号数大小 将较大的数存放AX寄存器CMPAX BX AX BX JNBNEXT 若AX BX 转移到NEXTXCHGAX BX 若AX BX 交换NEXT 有符号数条件转移指令 有符号数条件转移指令示例 例 比较有符号数大小 将较大的数存放在AX寄存器CMPAX BX AX BX JNLNEXT 若AX BX 转移到NEXTXCHGAX BX 若AX BX 交换NEXT 无条件转移指令 无条件转移指令的语句格式及功能 循环指令 1 循环指令LOOP2 相等 为零循环指令LOOPE3 不相等 不为零循环指令LOOPNE4 CX为零转移指令JCXZ 1 循环指令LOOP 语句格式 LOOP短标号功能 CX 1 0 则程序转移 循环 否则 顺序执行 说明 使用LOOP指令可代替两条指令 DECCXJNE短标号 2 相等 为零循环指令LOOPE 语句格式 LOOPE短标号 LOOPZ短标号功能 CX 1 0且ZF 1 则程序转移 循环 否则 顺序执行 3 不相等 不为零循环指令LOOPNE 语句格式 LOOPNE短标号 LOOPNZ短标号功能 CX 1 0 则程序转移 循环 否则 顺序执行 4 CX为零转移指令JCXZ 语句格式 JCXZ短标号功能 CX 1 0 则程序转移 循环 否则 顺序执行 子程序调用指令 1 子程序调用指令CALL 1 段内直接调用 2 段间直接调用 3 段内间接调用 4 段间间接调用2 返回指令RET 1 语句格式 RET 2 语句格式 RETn n为偶数 中断指令 1 中断调用指令INT语句格式 INTn功能 FLAGS SP 0 IF TF CS SP 4 n 2 CS IP SP 4 n IP 2 中断返回指令IRET语句格式 IRET功能 SP IP SP CS SP FLAGS 处理机控制类指令 标志位设置指令CPU状态控制指令 标志位设置指令 CLC设置标志CF 0 STC设置标志CF 1 CLD设置标志DF 0 STD设置标志DF 1 CLI设置标志IF 0 STI设置标志IF 1 CPU状态控制指令 1 空操作指令NOP2 总线封锁前缀指令LOCK3 暂停指令HLT4 交权指令ESC5 等待指令WAIT 字符设备I O功能调用 本节主要介绍DOS子程序调用方式 键盘输入 屏幕显示和打印机输出的DOS系统功能调用 DOS子程序调用方式 调用之前 设置子程序的入口参数 调用请求 执行 INT21H 软中断指令调用 调用之后 可能有出口参数 也可能无出口参数 如果有出口参数 可根据程序需要 判断本次调用是否成功或者分析执行情况 1从键盘输入一个字符AH 01H 从键盘读入一个字符 送到显示器输出 并将该字符的ASCII码值 AL 出口参数 如果检测到读入的字符是Ctrl Break 则中止程序执行 例 MOVAH 01H键盘输入子程序 功能1 AHINT21HDOS子程序调用 等待键入一个字符调用后 输入字符的ASCII码值 AL 2 显示输出一个字符AH 02H 将DL寄存器的字符 ASCII码值 送到标准输出设备上输出 若检测到Ctrl Break间 则执行中断 INT23H 中止程序的执行 例 MOVDL AL AL内容是字符的ASCII码 DLMOVAH 2 功能号2 AHINT21H 调用显示一个字符 3 打印机输出一个字符AH 05H 将要打印的字符 DL 然后调用就可以打印输出 如果有标准打印设备不
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 租赁公司档案管理制度
- 射击馆装修方案(3篇)
- 航空航天零部件制造高精度加工技术产业政策支持力度与效果评估报告
- 东莞封闭风控管理制度
- 中型水库灌溉管理制度
- 企业员工述职管理制度
- 企业生物资产管理制度
- 科普与科幻翻译理论
- 小学数学老师教育教学叙事
- 绿色金融相关论文
- 公司职业病危害防治责任制度
- 第十八章:爬行纲课件
- 米亚罗-孟屯河谷风景名胜区旅游基础设施建设项目环评报告
- 滁州市第一人民医院医疗暂存间环保设施提升改造项目环境影响报告表
- 籍贯对照表完整版
- 警用无人机考试题库(全真题库)
- 中等职业学校英语课程标准(2020年版)(word精排版)
- 高边坡作业安全专项施工方案与高边坡安全专项施工方案汇编
- 医保业务知识题库
- 等级医院评审中应注意的迎评礼仪
- 吉林省长春市东北师大附中明珠学校2023年物理八年级第二学期期末统考模拟试题含解析
评论
0/150
提交评论