




已阅读5页,还剩464页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
汇编语言程序设计 引言 课程介绍课程的任务 目的和基本要求主要教学内容和学时教学要求主要参考书作业 实验和考试 课程介绍 专业基础课软件开发的一个组成部分一种低级语言的程序设计 课程的任务 目的和基本要求 了解微型计算机的基本结构了解和掌握微型计算机的基本工作原理掌握汇编语言及其应用能独立完成简单的汇编语言程序设计认真完成作业和上机任务 主要教学内容和学时 主要内容1 8章学时 上课54学时上机36学时 教学要求 课堂上注意听讲 重要的是理解部分补充内容需要记笔记课堂外一定要看书复习或预习 完成作业充分利用上机时间 多编程练习 主要参考书 80X86汇编语言程序设计教程 杨季文等著 清华大学出版社 汇编语言程序设计 钱晓捷著 电子工业出版社 IBMPC汇编语言程序设计 沈美明著 清华大学出版 作业 实验和考试 考勤 15 作业 15 1次 1 2周考试 70 闭卷考试实验 单独考试 9次 第一章汇编语言基础知识 1 1汇编语言简介1 2计算机中数据的表示1 3计算机组织 1 1汇编语言简介 1 1 1什么是汇编语言1 1 2为什么要学习汇编语言 1 1 1什么是汇编语言 机器指令 cpu能直接识别并遵照执行的指令 用二进制编码表示 由操作码 操作数组成 编码只含二进制0或1 机器语言 用二进制编码组成的机器指令的集合和一组使用机器指令的规则 汇编语言 对机器指令中的操作码用英文单词的缩写描述 助记符 对操作数用标号 变量 常量描述 用汇编语言编写的程序称为汇编源程序 汇编语言是一种符号语言 比机器语言容易理解和掌握 也容易调试和维护 但是 汇编语言源程序要翻译成机器语言程序才可以由计算机执行 这个翻译的过程称为 汇编 这种把汇编源程序翻译成目标程序的语言加工程序称为汇编程序 1 1 2为什么要学习汇编语言 汇编语言程序是用符号指令写成的 本质上是机器语言 与具体机器的机型的硬件密切相关 可以直接有效地控制计算机硬件 程序运行速度快 程序短小精悍 占用内存少 在某些特殊应用场合更能发挥作用 如 智能化仪表家用电器实时控制系统单片机控制病毒研究等 使用汇编语言能从根本上认识和理解计算机的工作过程 它可直接而精确地控制计算机硬件的操作 学习汇编语言对从事计算机的研究和开发有着重要的意义 所以 它作为一门计算机专业基础课 并对计算机专业今后课程的学习是非常重要的 1 1 3汇编语言的特点 与机器有关 移植性差 但可直接控制硬件 程序效率高 编写汇编语言源程序比编写高级语言源程序烦琐 调试困难 1 2计算机中数据的表示 1 2 1不同进位计数制及其相互转换1 2 2二进制数和十六进制数的运算1 2 3带符号数的表示1 2 4补码的加法和减法1 2 5无符号数的表示1 2 6字符的表示1 2 7基本逻辑运算 1 2 1不同进位计数制及其相互转换 1 进位计数制对于任意一个进位计数制 如果用R表示基数 那么任何一个数S均可用如下多项式表示 S knRn kn 1Rn 1 k0R0 k 1R 1 k 2R 2 k mR m 十进制数 123 6 D 1 10 2 2 10 1 3 10 0 6 10 1 各位权值10 k二进制数 101101 B 1 2 5 1 2 3 1 2 2 1 2 0 45 D 各位权值2 k十六进制数 5F H 5 16 1 15 16 0 D 各位权值16 k 在书写不同进位计数制数时 常常在尾部用一个字母来表示该数是什么进位计数制的数 结尾用B 2进制数 O 8进制数 D 10进制数 H 16进制数 缺省为十进制数 例如712O 9198D 10010B BE49H等等 2 各种数制间的相互转换例如 13 8125D 1101 1101B D DH 二进制数转换为十进制数方法 各位二进制数码乘以对应的权之和例 1 1十六进制数转换为十进制数方法 各位十六进制数码乘以对应的权之和例 1 2 十进制数转换为二进制数 1 降幂法 先写出小于此数的各位二进制权值 然后再求和 适用于数值不大的数 例 1 3 2 除法 不断除以2 计下余数 直到商为0为止 仅适用于整数部分 例 1 4 对于十进制数的小数部分除了可以使用降幂法也可采用乘法 即不断乘2 并计下整数 而小数部分再乘2 直到结果为0为止 并非所有的十进制小数都能用二进制完全表示 可按需要取一定精度即可 例 1 5 十进制数转换为十六进制数 1 降幂法 先写出小于此数的各位十六进制权值 然后再求和 适用于数值不大的数 例 1 6 2 除法 不断除以16 计下余数 直到商为0为止 仅适用于整数部分 例 1 7 对于十进制数的小数部分除了可以使用降幂法也可采用乘法 即不断乘16 并计下整数 而小数部分再乘16 直到结果为0为止 并非所有的十进制小数都能用十六进制完全表示 可按需要取一定精度即可 二进制数和十六进制数的相互转换直接转换 每四位一组 整数从低位开始 小数从高位开始 不足位补0 例 1 8 1 2 2二进制数和十六进制数运算 二进制运算加法规则 0 0 01 0 10 1 11 1 0 进位1 乘法规则 0 0 01 0 00 1 01 1 1十六进制数运算原则 逢十六进一例1 9 1 10 1 11 1 2 3带符号数的表示 带符号数最高位是符号位 正数的符号位为0 负数的符号位为1 表示方法 原码 补码 反码 数的补码表示定义 X 0时 X 补 符号 X 1 X 0时 X 补 2 n X 2 n 1 X 1 2 即X 0时 X 补 X 2 n数的补码具体操作是 正数不变 负数则用绝对值取反 1 例1 12 X 补求补等于 X 补等于 X X 0 例1 13 1 2 4补码的加减法 加法规则 X Y 补 X 补 Y 补减法规则 X Y 补 X 补 Y 补例 1 14 1 2 5无符号数的表示 对于正数 不保留符号位 把符号位也作为数值 这样的数叫无符号数 1 2 6字符的表示 ASCII码扩充的ASCII码表1 1 1 2 7基本逻辑运算 逻辑运算按位操作与运算AND或运算OR异或运算XOR非运算NOT 1 3计算机组织 1 3 1计算机系统组成1 3 2中央处理器1 3 3存储器1 3 4外部设备和接口 1 3 1计算机系统组成 中央处理机CPU对汇编语言程序员 最关心其中的寄存器 存储器RAM呈现给汇编语言程序员的 是存储器地址 输入输出子系统I O汇编语言程序员看到的是端口 I O地址 系统总线数据总线 地址总线 控制总线 1 3 2中央处理器CPU CPU的发展 8088 准16位机 8086 16位机 16位通用寄存器 20位地址线 1M寻址 80286 准32位机 80386 32位机 32位通用寄存器 32位地址线 4G寻址 8048680586 1993 字长32位 主频60 166M 数据总线64 地址总线32 寻址4G80686P 1997 字长32位 主频 333M 数据总线64 地址总线32 寻址4GP 1999 字长32位 主频 600M 数据总线64 地址总线36 寻址64GP 1 CPU的组成 运算器控制器寄存器高速缓存 2 寄存器组 通用数据寄存器AX AHAL累加器BX BHBL基址寄存器CX CHCL计数寄存器DX DHDL数据寄存器 通用地址寄存器SP堆栈指针BP基址指针DI目的变址寄存器 自动增1 减1 SI源变址寄存器 自动增1 减1 段寄存器CS代码段寄存器DS数据段寄存器ES附加段寄存器SS堆栈段寄存器 专用寄存器IP指令指针寄存器FLAGS标志寄存器状态标志和控制标志 1 3 3存储器 存储器分内存和外存 这里指内存 外存指硬盘等 存储器按作用分 RAMROM C000 FFFF Cache 缓冲CPU与低速的RAM 1 存储单元的地址和内容 80 x86微机的内存储器以字节为基本存储单位 或叫基本存储单元 每一个存储单元对应一个唯一的存储器地址 从低到高按顺序编号 称为物理地址 存储单元的地址从0开始编号 机器中地址以二进制数表示 无符号数 书写用十六进制 80 x86微机使用20位地址线 寻址能力为1MB 范围为00000H FFFFFH 一个存储单元中存放的信息称为该存储单元的内容 一个字存放在连续单元 低位对低地址 高位对高地址 访问时以低地址访问 2 存储器的分段 字长16位表示地址 可表示多少字节单元 2 10 1024 1K2 16 65536 64K0 65535地址编号十六进制 0 FFFFH 用什么办法提供20位地址 注 相当于从0地址开始 每16个字节为一小段 段地址必须从任一小段的首地址开始 用 段地址 偏移地址 表示逻辑地址 每个逻辑地址对应一个唯一的物理地址 但每个物理地址并不对应唯一的逻辑地址 例如 逻辑地址2BH 23H和逻辑地址2CH 13H逻辑地址2BH 23H的物理地址为 2B0H 23H 2D3H逻辑地址2CH 13H的物理地址为 2C0H 13H 2D3H程序中使用的是逻辑地址 1 3 4外部设备和接口 外部设备也称作输入 输出设备或I O设备 外部设备和主机之间通过输入 输出接口连接 接口内有若干寄存器 用于在外设和CPU间传递信息 每个寄存器规定一个端口 Port 号 也称作I O地址 寄存器 端口 可分为3类 数据端口 控制端口 状态端口通常采用十六进制数来表达端口Intel8086支持64K个8位端口其I O地址可以表示为 0000H FFFFH 通过调用例行程序进行BIOSBasicInput OutputSystem 存在ROM中 DOSDiskOperatingSystem 存在磁盘中 第二章汇编语言程序实例及上机操作 实践性很强 结合上机是最好的学习方法 2 1汇编语言程序实例 2 1 1实例12 1 2实例2 例2 1单个字符的键盘输入与显示输出程序 codesegmentassumecs codestart movah 1int21hmovdl aladddl 1movah 2int21hmovah 4chint21hcodeendsendstart运行结果 键入A接着显示B 键入K接着显示L 例2 2编写显示 HELLO WORLD 程序 datasegmentStringdb HELLO WORLD dataendscodesegmentassumecs code ds datastart movax datamovds axmovdx offsetstringmovah 9int21hmovah 4chint21hcodeendsendstart 2 2工作环境及上机操作 2 2 1汇编语言的系统工作文件2 2 2进入DOS命令行方式2 2 3编辑建立ASM源程序文件2 2 4汇编产生OBJ二进制目标文件2 2 5连接产生EXE可执行文件2 2 6程序的运行和调试 2 2 1汇编语言的系统工作文件 使用编辑程序编辑源程序文件 asm 使用汇编程序 MASM 将源程序文件 asm 汇编成目标文件 obj 使用连接程序 LINK 将目标文件 obj 连接成可执行文件 EXE 使用调式程序 DEBUG 调式可执行文件 运行汇编语言程序需要以下文件 编辑程序EDIT COM汇编程序MASM EXE连接程序LINK EXE调试程序DEBUG EXE 注意几点 本书使用MicrosoftMasm6 0版本 EDIT COM和DEBUG EXE为系统自带 MASM EXE和LINK EXE不是系统自带 为方便操作 系统文件和用户文件尽可能放在同一文件目录下 2 2 2进入DOS命令行方式 程序 附件 命令提示符运行 CMD退出用EXIT 2 2 3编辑建立ASM源程序文件 利用EDIT编辑源文件 C EDIT C EDIT文件名 ASM 例如文件名为Hello ASM在EDIT程序中 将我们编写的汇编程序输入到计算机中 并将Hello ASM保存为源程序 然后退出EDIT程序 回到DOS状态 2 2 4汇编产生OBJ二进制目标文件 源程序建立后 就要用汇编程序对源程序汇编 汇编后产生二进制的目标文件 OBJ文件 其操作与汇编程序回答如下 C MASMHello ASM Microsoft R MacroAssmblerVersion5 0Copyright C MicrosoftCorp1981 1985 1987 AllrightsreservedObjectfilename Hello OBJ Sourcelisting NUL LST Cross reference NUL CRF 51646 447778Bytessymbolspacefree0WarningErrors0SevereErrors说明 Hello OBJ目标文件 这是汇编的主要目的Hello LST列表文件 可有可无Hello CRF交叉引用表 可有可无0WarningErrors0个警告错误0SevereErrors0个严重错误 2 2 5连接产生EXE可执行文件 汇编程序已产生出二进制的目标文件 OBJ 但OBJ文件并不是可执行文件 还必须用连接程序 LINK 把OBJ文件转换为可执行的EXE文件 当然 如果一程序由多个模块组成时 也应该通过LINK把它们连接在一起 操作如下 C LINKHello OBJ C LINKHello1 Hello2 Hello3 Runfile Hello ASM EXE ListFile NUL MAP Libraries LIB LINK WarningL4012 nostacksegment一般情况下 用户只需要按回车使用默认值就可以了 两个输入文件两个输出文件OBJ文件EXE文件LIB文件 库文件 MAP文件 连接映像文件 2 2 6程序的运行和调试 建立了EXE文件后 就可以直接在DOS的提示符下 输入EXE文件的文件名 如 C Hello 直接运行程序 对EXE文件无需扩展名就可执行 真正的可执行文件是生成的 不是用改名操作得到的 调试程序DEBUG EXE是WINDOWS系统自带的 DEBUGHello EXE DEBUG命令提示符 2 3DEBUG主要命令 格式如下 C DEBUG或C DEBUG 盘符 路径 要调试的程序 DEBUG中的数据显示均为十六进制 1 反汇编命令U 格式1 U地址地址用偏移地址或者段地址 偏移地址表示 该命令从指定的地址开始 把机器语言反汇编为汇编语言 若省去指定地址 则以上一个U命令反汇编的最后一条指令地址的下一个单元作为起始地址 格式2 U范围范围用a1a2或者aLb表示 对指定范围的内存单元进行反汇编 范围可以由起始地址 结束地址或起始地址及长度来确定 2 显示内存命令D 格式1 D地址从指定的地址开始 显示内存 便于用户看数据 格式2 D范围显示指定范围的内存内容 3 运行程序命令G 格式 G 起始地址 中止地址 起始地址规定了执行的起始地址 中止地址是断点地址 让程序暂停在某个位置 不能省掉 若省掉起始地址 则以当前CS IP作为起始地址 默认段地址在段寄存器CS中 4 寄存器显示和修改命令R 格式1 R显示所有寄存器内容和全部标志的状态 格式2 R寄存器名显示和修改寄存器内容 若不修改其内容 则按CR键 若要修改 可输入修改后的1 4个16进制字符值 再按CR键 格式3 RF显示FLAGS寄存器并接受新值 5 跟踪程序命令T Q 格式1 T 起始地址 单步执行程序 在指令执行中逐条进行跟踪 若省去地址 则从CS IP现行值执行 格式2 T 起始地址 指令条数 可对多条指令进行跟踪 注意 对于INT指令不能使用T命令跟踪 A汇编命令 输入程序 格式 A 地址 N文件命名命令格式 N文件名 L装入命令格式 L地址驱动器扇区号扇区数L地址 W写命令格式 W地址驱动器扇区号区段数W地址 E修改内存单元内容格式1 E地址内容表用给定的内容表去代替指定范围的内存单元的内容格式2 E地址可连续逐个修改内存单元的内容 按CR键结束E命令 H十六进制运算命令格式 Hval1val2输出为val1 val2val1 val2 M移动命令格式 Mrangeaddress Q退出命令格式 Q该命令退出DEBUG程序 并返回到DOS 查看命令格式格式 显示全部DEBUG命令格式 2 4常用的DOS命令 MD建立目录E MDMASM建立MASM目录CD显示或改变当前目录E CD显示当前目录E CDMASM进入MASM目录E MASM CD 退到上一目录E MASM CD 退到根目录E RD删除目录E RDMASM删除MASM目录DIR显示目录或文件E DIR列出当前目录下的子目录和文件E DIR ASM列出所有扩展名为ASM的文件 为通配符E DIRHELLO 列出所有名为HELLO而扩展名不限的文件E DIRHE 列出所有名前两个字符为HE 而扩展名为三个字符的文件 REN改变文件名E RENH1 TXTH2 TXTCOPY复制文件E COPYH1 TXTH2 TXTE COPYA BC TXT TYPE显示文本文件的内容E TYPYH1 TXTCLS清屏SETPATH设置或显示可执行文件的搜索路径E PATH显示可执行文件的搜索路径E SETPATH显示可执行文件的搜索路径 HELP显示命令格式和用法E HELP显示所有命令的格式E HELPDIR显示DIR命令的用法 输出的重定向E DIR C TXT把DIR显示结果输出到文件C TXT 2 5几个常用的DOS系统功能调用 21H号中断是DOS提供给用户的用于调用系统功能的中断 它有近百个功能供用户选择使用 主要包括设备管理 目录管理和文件管理三个方面的功能 汇编语言程序设计需要采用系统的各种功能程序 功能调用的格式 通常按照如下4个步骤进行 在AH寄存器中设置系统功能调用号 在指定寄存器中设置入口参数 执行指令INT21H 实现中断服务程序的功能调用 根据出口参数分析功能调用执行情况 1 键盘输入一个字符并回显 DOS功能调用INT21H功能号 AH 01H出口参数 AL 输入字符的ASCII码功能 等待从键盘输入一个字符 该字符的ASCII码送AL 并送屏幕显示 调用此功能时 若无输入 则会一直等待 直到输入后才继续 movah 01h 功能号 ah 01hint21h 功能调用cmpal Y 处理出口参数aljeyeskey 是 Y cmpal N jenokey 是 N yeskey nokey 2 显示一个字符 DOS功能调用INT21H功能号 AH 02H入口参数 DL 输出字符功能 在显示器当前光标位置显示给定的字符 光标右移一个字符位置 在当前显示器光标位置显示一个问号movah 02h 设置功能号 ah 02hmovdl 提供入口参数 dl int21h DOS功能调用 显示问号 3 显示字符串 DOS功能调用INT21H功能号 AH 09H入口参数 DS DX 欲显示字符串在主存中的首地址 字符串应以 24H 结束功能 显示由DS DX指定的字符串 stringdb Hello Everybody 在数据段定义要显示的字符串 movah 09h 设置功能号ah 09hmovdx offsetstring 提供入口参数dx 字符串的偏移地址int21h DOS功能调用字符串显示 4 键盘输入到缓冲区 DOS功能调用INT21H功能号 AH 0AH入口参数 DS DX 缓冲区首地址 DS DX 缓冲区字节数功能 输入到缓冲区 缓冲区的定义 第1字节事先填入最多欲接收的字符个数 包括回车字符 可以是1 255 第2字节将存放实际输入的字符个数 不包括回车符 第3字节开始将存放输入的字符串实际输入的字符数多于定义数时 多出的字符丢掉 且响铃 bufferdb81 定义缓冲区 第1个字节填入可能输入的最大字符数db 存放实际输入的字符数db81dup 存放输入的字符串 movdx segbuffer 伪指令seg取得buffer的段地址movds dx 设置数据段DSmovdx offsetbuffermovah 0ahint21h 5 写文件或设备 DOS功能调用INT21H功能号 AH 40H入口参数 DS DX 数据区首地址BX 文件代号CX 写入的字节数功能 把数据区内容输出到文件或设备 MOVAH 40H 设置功能号AH 40HLEADX STR 设置数据区首地址MOVBX 1 文件代号1表示标准设备显示器MOVCX 9 输出9个字节INT21H 6 结束程序返回DOS DOS功能调用INT21H功能号 AH 4CH入口参数 AL 返回码功能 结束程序返回DOSMOVAH 4CHINT21H 第三章指令系统和寻址方式 3 1寻址方式3 2指令系统3 380386后继机型的新增扩展指令和寻址方式 3 1寻址方式 3 1 1指令结构3 1 2操作数的寻址方式 计算机中的指令由操作码和操作数组成 操作数字段可以有一个 两个或三个 通常称为一地址 二地址或三地址指令 二地址指令中两个操作数分别称为源操作数和目的操作数 所谓寻址方式就是指令中寻找操作数的方式 3 1 1指令结构 80 x86汇编语言指令的一般格式位 标号 指令助记符 操作数 注释 中的内容位可选项 标号 符号地址 表示指令在内存中的位置 标号后应加冒号 指令助记符 指令名称 是指令功能的英文缩写 操作数 指令要操作的数据或数据所在的地址 寄存器 常量 变量 表达式 注释 每行以分号 开头 汇编程序不处理 3 1 2操作数的寻址方式 立即寻址方式操作数就在指令中 紧跟在操作码之后 操作数作为指令的一部分存放在代码段 例MOVAL 5H执行完此条指令后 AL 05HMOVAX 3064H 注意 执行时无需去内存取数 因此称为立即数 主要用于寄存器赋初值 立即数只能作为源操作数 并且长度与目的操作数一致 寄存器寻址方式操作数就是寄存器中的值 指令中给出寄存器名 例MOVAL BLMOVAX BXMOVAL BX错MOVAX BL错 注意 以上两种寻址方式都与存储器无关 以下各种寻址方式的操作数都在存储器中 偏移地址也称为有效地址 EA 直接寻址方式操作数的有效地址EA就在指令中 机器默认段地址在DS中 例3 4例3 5例3 6 寄存器间接寻址方式操作数的有效地址在寄存器中 只允许使用BX BP SI和DI寄存器 物理地址 16dx DS BX 物理地址 16dx DS SI 物理地址 16dx DS DI 物理地址 16dx SS BP 例3 7 寄存器相对寻址方式操作数的有效地址是寄存器和位移量之和 位移量可以是8位 16位的常量 也可以是16位的符号地址 只允许使用BX BP SI和DI寄存器 默认搭配和寄存器间接寻址方式一样 例3 8 MOVAX COUNT SI MOVAX COUNT SI 当COUNT为16位位移量的符号地址时 如DS 3000H SI 2000H COUNT 4000H 36000H 34H 36001H 12H物理地址 16dx 段值 EA 30000H 2000H 4000H 36000H 基址变址寻址方式操作数的有效地址是一个基址寄存器和一个变址寄存器内容之和 物理地址 16dx DS BX SI 物理地址 16dx DS BX DI 物理地址 16dx SS BP SI 物理地址 16dx SS BP DI 相对基址变址寻址方式操作数的有效地址是一个基址寄存器和一个变址寄存器以及一个位移量之和 基址寄存器BX和BP 变址寄存器SI和DI 默认段寄存器搭配和寄存器间接寻址方式一样 例3 10 注意 双操作数指令的两个操作数中 只能有一个使用存储器寻址方式 双操作数指令的两个操作数 长度须匹配 操作数的有效地址前可以加段跨越前缀 但在以下三种情况下不允许 串处理指令的目的串必须用ES段PUSH指令的目的和POP指令的源必须用SS段指令必须存放在CS段 3 2指令系统 3 2 1数据传送指令3 2 2类型扩展指令3 2 3算术运算指令3 2 4逻辑指令3 2 5移位指令3 2 6串操作指令3 2 7程序转移指令3 2 8处理器控制指令 8086指令系统可以分为八组 1 数据传送指令 2 类型扩展指令 3 算术运算指令 4 逻辑指令 5 移位指令 6 串操作指令 7 程序转移指令 8 处理机控制指令 3 2 1数据传送指令 通用数据传送指令累加器专用传送指令地址传送指令标志寄存器传送 1 通用数据传送指令 MOV传送PUSH进栈POP出栈XCHG交换 1 MOV传送指令 格式 MOVDST SRC操作 DST SRC DST表示目的操作数 SRC表示源操作数 功能 将源操作数传送到目的操作数 双操作数指令的规定 源操作数与目的操作数的长度必须一致 源操作数与目的操作数不能同时为存储器 目的操作数不能为CS和IP 因为CS IP是程序当前地址 例3 11例3 12例3 13例3 14例3 15例3 16 2 PUSH进栈指令 格式 PUSHSRC操作 SP SP 2 SP 1 SP SRC 堆栈 后进先出内存区 以字为单位传送 SS SP总是指向栈顶 例3 17 3 POP出栈指令 格式 POPDST操作 DST SP 1 SP SP SP 2例3 18 4 XCHG交换指令 格式 XCHGOPR1 OPR2操作 OPR1 OPR2 功能 把两个操作数互换位置 遵循双操作数指令的规定 但操作数不能为立即数 例3 19 2 累加器专用传送指令 IN 从I O端口输入OUT 向I O端口输出XLAT 换码其中I O端口是CPU与外设传送数据的接口 单独编址 不属于内存 端口地址范围0000 FFFFH 这组指令只限于AX AL累加器 1 IN输入指令 长格式 INAL PORT 字节 00 FFHINAX PORT 字 操作 AL PORT AX PORT 功能 把端口PORT的数据输入到累加器 短格式 INAL DX 字节 PORT放入DXINAX DX 字 操作 AL DX AX DX 功能 把DX指向的端口的数据输入到累加器 例3 20例3 21 2 OUT输出指令 长格式 OUTPORT AL 字节 00 FFHOUTPORT AX 字 操作 PORT ALPORT AX功能 把累加器的数据输出到端口PORT 短格式 OUTDX AL 字节 0000 FFFFHOUTDX AX 字 操作 DX AL DX AX功能 把累加器的数据输出到DX指向的端口 例3 22 3 XLAT换码指令 格式 XLAT操作 AL BX AL 功能 把BX AL的值作为有效地址 取出其中的一个字节送AL 例3 23 3 地址传送指令 LEA有效地址送寄存器LDS指针送寄存器和DSLES指针送寄存器和ES 1 LEA有效地址送寄存器指令 格式 LEAREG SRC操作 REG SRC功能 把源操作数的有效地址EA送到指定的寄存器 例3 24例3 25 2 LDS指针送寄存器和DS指令 格式 LDSREG SRC操作 REG SRC DS SRC 2 功能 把源操作数SRC所指向的内存单元中的两个字送到指定的寄存器REG和DS 例3 26 3 LES指针送寄存器和ES指令 格式 LESREG SRC操作 REG SRC ES SRC 2 功能 把源操作数SRC所指向的内存单元中的两个字送到指定的寄存器REG和ES 例如LESDI 10H DS C000H C0010H 0180H C0012H 2000H结果DI 0180H ES 2000H 4 标志寄存器传送指令 LAHF标志寄存器FLAGS的低字节送AHSAHFAH送FLAGS的低字节PUSHF标志进栈POPF标志出栈以上传送类指令均不影响标志位 除SAHF POPF外 3 2 2类型扩展指令 CBW AL扩展为AXCWD AX扩展为DX AX扩展方法为符号扩展 例3 28例3 29 3 2 3算术运算指令 加法指令减法指令乘法指令除法指令 1 加法指令 ADD加法ADC带进位加法INC加1 1 ADD加法指令 格式 ADDDST SRC操作 DST DST SRC 例3 30 溢出判断 以8位二进制数为例 综上所述 CF 1为无符号数的溢出 OF 1为有符号数的溢出 OF位 若两个操作数的符号相同 而结果的符号与之相反时OF 1 否则OF 0 CF位 有进位 借位时CF 1 否则CF 0 2 ADC带进位加法指令 格式 ADCDST SRC操作 DST DST SRC CF例3 31 3 INC加1指令 格式 INCOPR操作 OPR OPR 1 除INC不影响CF 它们都影响条件标志位 条件标志位 条件码 最主要有 进位CF 零ZF 符号SF 溢出OF 2 减法指令 SUB减法SBB带借位减法DEC减1NEG求补CMP比较 1 SUB减法指令 格式 SUBDST SRC操作 DST DST SRC 2 SBB带借位减法指令 格式 SBBDST SRC操作 DST DST SRC CF 3 DEC减1指令 格式 DECOPR操作 OPR OPR 1 4 NEG求补指令 格式 NEGOPR操作 OPR OPR 功能 对OPR求补 求 OPR 即反码 1 只有OPR为0时 CF 0 5 CMP比较指令 格式 CMPOPR1 OPR2操作 OPR1 OPR2 不回送结果 只产生标志位 CF 1为无符号数溢出 OF 1为有符号数溢出 例3 32例3 33例3 34例3 35 3 乘法指令 MUL无符号数乘法IMUL有符号数乘法 1 MUL无符号数乘法指令 格式 MULSRC操作 操作数为字节时 AX AL X SRC 操作数为字时 DX AX AX X SRC 2 IMUL带符号数乘法指令 格式 IMULSRC操作 操作数为字节时 AX AL X SRC 操作数为字时 DX AX AX X SRC 两个相乘的数必须长度相同 SRC不能是立即数 例3 36 4 除法指令 DIV无符号数除法IDIV有符号数除法 1 DIV无符号数除法指令 2 IDIV带符号数除法指令 格式 IDIVSRC操作与DIV相同余数和被除数同符号 被除数长度应为除数长度的两倍 SRC不能是立即数 例3 37例3 38 算术运算综合举例 例3 39 5 十进制调整指令 前面提到的所有算术运算指令都是二进制数的运算 为便于十进制计算 计算机提供了十进制调整指令 在二进制数计算的基础上 给予十进制调整 直接得到十进制结果 BCD码 BinaryCodedDecimal 用二进制编码表示十进制数 四位二进制数表示一位十进制数 由于四位二进制数的权分别为8 4 2 1 所以又称为8421码 压缩的BCD码4位二进制数表示一位十进制数 非压缩的BCD码8位二进制数表示一位十进制数 低4位为8421码 高4位无意义 1 压缩BCD码调整指令 DAA 加法十进制调整指令DAS 减法十进制调整指令 DAA 加法十进制调整指令格式 DAA操作 IFCF 1orAL高4位是 A F THENAL 60H IFAF 1orAL低4位是 A F THENAL 6 例ADDAL BL000010019DAA 0000010040000110113 011000010011BCD码9 4的结果是 10011 BCD即13 DAA使AL自动 6IF每位BCD码值 9THEN该位值加6例3 40BCD1 1834 BCD2 2789求 BCD3 BCD1 BCD200011000001101001834001001111000100127890011111110111101462301100110011011101000110001000114623 DAS 减法十进制调整指令格式 DAS操作 IFAF 1ORAL低4位是 A F THENAL 6IFCF 1ORAL高4位是 A F THENAL 60H 例SUBAL AHDASAL 86H 86 BCD AH 07H 07 BCD SUB即86H 07H 7FHDAS即7FH 6H 79H 79 BCD 2 非压缩BCD码调整指令 AAA 加法ASCII调整AAS 减法ASCII调整AAM 乘法ASCII调整AAD 除法ASCII调整 AAA 加法的ASCII调整指令格式 AAA操作 IFAL低4位是 A F THENAL 6 AL高4位置0 调整产生的进位加到AH中 例3 42 AAS 减法的ASCII调整指令格式 AAS操作 IFAL低4位是 A F THENAL 6 AL高4位置0 调整产生的借位从AH中减去 AAM 乘法的ASCII调整指令格式 AAM操作 先作乘法 把两个一字节且高4位为0的非压缩BCD码相乘 然后用AAM指令把AX中的内容调整为二字节非压缩BCD码格式 例 MULAL BLAAMAL 07HBL 09HMUL使AL 3FH AH 0AAM使AH 06H AL 03H3X16 15 48 15 63 AAD 除法的ASCII调整指令格式 AAD操作 反向调整 先作调整指令AAD 把AX中两个一字节且高4位为0的非压缩BCD码调整为二进制数 然后使用除法指令除以一个字节的且高4位为0的非压缩BCD码 例3 43 3 2 4逻辑指令 AND 与OR 或NOT 非XOR 异或TEST 测试 执行AND操作 但不保存结果 只根据其特征置标志位 按位操作 至少一个操作数是寄存器 例3 44例3 45例3 46例3 47 3 2 5移位指令 SHL 逻辑左移 SAL 算术左移 SHR 逻辑右移 SAR 算术右移 ROL 循环左移 ROR 循环右移 RCL 带进位循环左移 RCR 带进位循环右移 格式 SHLOPR CNTCNT可以是1或CL寄存器 如需移位的次数大于1 则可以在该移位指令前把移位次数先送到CL寄存器 算术移位指令适用于带符号数运算 SAL用来乘以2 SAR用来除以2 逻辑移位指令适用于无符号数运算 SHL用来乘以2 SHR用来除以2 例3 48例3 49 3 2 6串操作指令 MOVS 串传送CMPS 串比较SCAS 串扫描LODS 从串取STOS 存入串 串操作指令每次处理的是字节或字 因此需要重复执行串操作指令才能处理完一个数据串 串操作指令通常需要和以下前缀配合使用 REP重复REPE REPZ相等或为零则重复REPNE REPNZ不相等或不为零则重复 REP的作用重复执行串操作指令 直到CX 0为止 串操作指令每执行一次 使CX自动减1 REPE REPZ的作用当CX 0并且ZF 1时 重复执行串操作指令 直到CX 0或者ZF 0为止 串操作指令每执行一次 使CX自动减1 REPNE REPNZ的作用当CX 0并且ZF 0时 重复执行串操作指令 直到CX 0或者ZF 1为止 串操作指令每执行一次 使CX自动减1 1 MOVS串传送指令 格式有3种 MOVSDST SRC 操作数寻址方式固定MOVSB 字节MOVSW 字 字节操作 ES DI DS SI SI SI 1 DI DI 1字操作 ES DI DS SI SI SI 2 DI DI 2当方向标志DF 0 用 DF 1 用 实现整个串传送的准备工作 SI 源串首地址 如反向传送则是末地址 DI 目的串首地址 如反向传送则是末地址 CX 串长度 设置方向标志DF 设置方向标志DF CLD设置正向 DF 0 向前 地址自动增量 STD设置反向 DF 1 向后 地址自动减量 例3 50 2 CMPS串比较指令 格式有3种 CMPSSRC DST 操作数寻址方式固定CMPSB 字节CMPSW 字 字节操作 ES DI DS SI SI SI 1 DI DI 1字操作 ES DI DS SI SI SI 2 DI DI 2当方向标志DF 0 用 DF 1 用 指令不保存结果 只是根据结果设置标志位 例3 51 3 SCAS串扫描指令 格式有3种 SCASDST 操作数寻址方式固定SCASB 字节SCASW 字 字节操作 AL ES DI DI DI 1字操作 AX ES DI DI DI 2当方向标志DF 0 用 DF 1 用 指令不保存结果 只是根据结果设置标志位 例3 52 4 STOS存入串指令 格式有3种 STOSDST 操作数寻址方式固定STOSB 字节STOSW 字 字节操作 ES DI AL DI DI 1字操作 ES DI AX DI DI 2当方向标志DF 0 用 DF 1 用 例3 53movax extmoves axleadi messmovcx 9movax 0cldrepstosw 5 LODS从串取指令 格式有3种 LODSSRC 操作数寻址方式固定LODSB 字节LODSW 字 字节操作 AL DS SI SI SI 1字操作 AX DS SI SI SI 2当方向标志DF 0 用 DF 1 用 指令一般不和REP连用 3 2 7程序转移指令 无条件转移指令条件转移指令循环指令子程序调用指令中断调用指令 1 无条件转移指令 JMP跳转指令 无条件转移到指令指定的地址去执行程序 转移的目标地址和本跳跳转指令在同一个代码段 则为段内转移 否则是段间转移 转移的目标地址在跳转指令中直接给出 则为直接转移 否则是间接转移 1 段内直接转移 格式 JMPNEARPTROPR操作 IP IP 16位位移量NEARPTR为目标地址OPR的属性说明 表明是一个近 段内 跳转 通常可以省略 位移量是带符号数 IP的值可能减小 程序向后跳 也可能增加 程序向前跳 程序的重新定位并不影响程序的正确执行 2 段内间接转移 格式 JMPWORDPTROPR操作 IP EA 可以使用除立即数以外的任何一种寻址方式 例3 54 3 段间直接转移 格式 JMPFARPTROPR操作 IP OPR的偏移地址CS OPR所在段的段地址 4 段间间接转移 格式 JMPDWORDPTROPR操作 IP EA CS EA 2 可以使用除立即数和寄存器方式以外的任何一种寻址方式 例3 55 2 条件转移指令 条件转移指令根据上一条指令所设置的标志位来判别测试条件 从而决定程序转向 通常在使用条件转移指令之前 应有一条能产生标志位的前导指令 如CMP指令 汇编指令格式中 转向地址由标号表示 所有的条件转移指令都不影响标志位 第一组 根据单个条件标志的设置情况转移第二组 测试CX寄存器的值为0则转移第三组 比较两个无符号数 根据结果转移第四组 比较两个有符号数 根据结果转移 根据单个条件标志的设置情况转移 JZ JE 结果为零转移格式 JZOPR测试条件 ZF 1JNZ JNE 结果不为零转移格式 JNZOPR测试条件 ZF 0JS结果为负转移格式 JSOPR测试条件 SF 1 JNSOPR结果不为负 为正 转移测试条件 SF 0JOOPR结果溢出转移测试条件 OF 1JNOOPR结果不溢出转移测试条件 OF 0JP JPE 奇偶位为1转移格式 JPOPR测试条件 PF 1 JNP JPO 奇偶位为0转移格式 JNPOPR测试条件 PF 0JB JNAE JC 低于 不高于等于 进位位为1 则转移 格式 JBOPR测试条件 CF 1JNB JAE JNC 不低于 高于等于 进位位为0 则转移 格式 JNBOPR测试条件 CF 0 测试CX寄存器的值为0则转移 格式 JCXZOPR测试条件 CX 0 比较两个无符号数 根据结果转移 JB JNAE JC 低于 不高于或等于 进位位为1 则转移 格式 JBOPR测试条件 CF 1JNB JAE JNC 不低于 高于等于 进位位为0 则转移 格式 JNBOPR测试条件 CF 0JBE JNA 低于或等于 不高于 则转移 格式 JBEOPR测试条件 CFORZF 1JNBE JA 不低于或等于 高于 则转移 格式 JNBEOPR测试条件 CFORZF 0 比较两个带符号数 根据结果转移 JL JNGE 小于 不大于等于 则转移 格式 JNLOPR测试条件 SFXOROF 0JLE JNG 小于等于 不大于 则转移 格式 JNLEOPR测试条件 SFXOROF ORZF 0 为何针对有符号数和无符号数须用不同指令 8位二进制数FFH和00H 哪个大 若为无符号数 FFH大 若为有符号数 00H大 3 循环指令 LOOP循环LOOPZ LOOPE为零或相等时循患LOOPNZ LOOPNE不为零或不相等时循环 指令 LOOPOPR测试条件 CX 0 则循环指令 LOOPZ LOOPEOPR测试条件 ZF 1ANDCX 0 则循环指令 LOOPNZ LOOPNEOPR测试条件 ZF 0ANDCX 0 则循环 操作 首先CX寄存器减1 然后根据测试条件决定是否转移 例3 57 4 子程序调用 子程序定义 在模块化程序设计中 经常把程序中某些具有独立功能的部分编写成独立的程序模块 称为子程序 主程序通过CALL指令调用子程序 子程序执行完毕后通过RET指令回到主程序 1 CALL调用指令 格式 CALLDST操作 首先把下一条指令的地址 返回地址 压入堆栈保存 再把子程序的入口地址置入IP CS 寄存器 以便实现转移 对于段内调用 只是向堆栈保存IP寄存器的值 对于段间调用 是先向堆栈保存CS寄存器的值 再向堆栈保存IP寄存器的值 2 RET返回指令 格式1 RET格式2 RETEXP操作 把堆栈里保存的返回地址送回IP CS 寄存器 实现程序的返回 对于段内调用 弹出一个字到IP寄存器 对于段间调用 先弹出一个字到IP寄存器 再弹出一个字到CS寄存器 例3 58 5 中断调用 计算机系统中 当某些临时紧急事件发生时 计算机应能暂停当前程序的运行 转去处理该事件 处理完后再返回到被中断程序的断点处 继续往下执行 该过程称为中断 引起中断的事件叫中断源 每个中断源对应一个中断类型号 处理中断事件的程序叫中断服务程序 中断服务程序的入口地址叫中断向量 系统把所有中断服务程序的入口地址集中存放在中断向量区 每四个字节存放一个中断向量 对应中断服务程序的段地址和偏移地址 用户可通过INT中断指令调用中断服务程序 1 INT中断指令 格式 INTN操作 PUSHFLAGSPUSHCSPUSHIPIP N 4 CS N 4 2 2 IRET从中断返回指令 格式 IRET操作 POPIPPOPCSPOPFLAGS 3 2 8处理器控制指令 标志处理指令 设置或清除标志位 其它处理器控制指令 控制处理器状态 1 标志处理指令 CLC CF置0CMC CF取反STC CF置1CLD DF置0STD DF置1CLI IF置0STI IF置1 2 其它处理器控制指令 NOP 无操作HLT 停机WAIT 等待LOCK 封锁 第四章伪指令与源程序格式 汇编语言程序的语句 指令 伪指令 宏指令 伪指令 伪操作 主要用来定义数据变量和程序结构 4 1伪指令 指令是在程序运行期间由计算机的CPU来执行的 伪指令是在汇编程序对源程序进行汇编期间由汇编程序处理的操作 4 1 1处理机选择伪指令 告诉汇编程序选择哪一种指令系统 处理机选择伪指令有以下几种 8086 286 286P 386 386P 486 486P 586 586P指令中的点 需要 默认选
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 阿克苏市2024-2025学年七年级下学期语文月考测试试卷
- 安徽省黄山市徽州区2023-2024学年高一上学期期末考试物理试卷及答案
- 安徽省蚌埠市禹会区2024-2025学年高一上学期期末考试思想政治试题含参考答案
- 2025 年小升初阳江市初一新生分班考试英语试卷(带答案解析)-(外研版)
- 广东历年(202511-202611)二级人力师论文题目和答辩真题答案
- 脑卒中后吞咽障碍患者进食护理的团体标准应用
- 社区燃气使用安全课件
- 统编版五年级语文上册第七单元拔尖测评卷(含答案)
- 北师大版四年级上册数学期末检测题(无答案)
- 广州房屋定金合同范本
- 金属技术监督管理制度
- 建筑行业材料员培训课件
- 佐贺的超级阿嬷亲子阅读单
- 企业工会制度大全
- NB-T 10316-2019 风电场动态无功补偿装置并网性能测试规范
- JJF(纺织)010-2012纱线捻度仪校准规范
- GB/T 16288-2008塑料制品的标志
- GB/T 14486-2008塑料模塑件尺寸公差
- 第三单元名著导读《朝花夕拾-二十四孝图》课件(15张PPT) 部编版语文七年级上册
- 胰腺肿瘤影像学课件
- 口部运动功能评估分级标准
评论
0/150
提交评论