2009汇编语言程序杓频谝徽耞免费下载.ppt_第1页
2009汇编语言程序杓频谝徽耞免费下载.ppt_第2页
2009汇编语言程序杓频谝徽耞免费下载.ppt_第3页
2009汇编语言程序杓频谝徽耞免费下载.ppt_第4页
2009汇编语言程序杓频谝徽耞免费下载.ppt_第5页
已阅读5页,还剩97页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

课程 汇编语言程序设计 教师 李征Tel 85416184CellICQ 1340915EMAIL lizheng jackrain75 第一章预备知识 汇编语言是一种什么样的语言 例 对比两个相同功能的程序片段 它们分别由高级语言和汇编语言实现 功能 如果x y z大于0 则把结果赋值给var1 如果小于等于0 则var1赋值为0C语言片段 if var1 x y z 0 var1 0 汇编语言是一种什么样的语言 特点 1 书写简单 可读性高 2 程序执行过程无法观测 汇编语言是一种什么样的语言 汇编语言程序片段 moval xaddal ysubal zjal1jmpl2l1 movvar1 aljmpl3l2 movvar1 0l3 指令 指令 可执行程序的最基本组成元素 具有原子性 CPU执行程序是按照逐条读取 逐条执行的规则进行的 汇编语言是一种什么样的语言 特点 1 书写复杂 阅读困难 2 每一行为一条指令 程序的执行过程清晰 3 由于使用指令直接编写程序 执行效率高 汇编语言特点 占用空间少 执行速度快 直接控制硬件能力强 但不容易掌握 开发周期较长且可移植性差 汇编语言特点 程序员关心的问题 高级语言 数据类型 程序逻辑汇编语言 数据类型 程序逻辑 程序逻辑与指令的对应 数据获取方式 学习汇编语言的原因 1 除机器语言外 最接近底层硬件的语言 是编写硬件驱动程序 调试硬件接口的基本工具 2 能反映CPU执行程序的步骤 能帮助理解计算机硬件系统的工作原理 是深入学习计算机系统底层知识的重要理论基础 学习汇编语言的原因 3 直接使用指令设计程序 得到最快的执行速度 占用最小的存储空间 通常用作编写核心算法 编程者应了解机器的内部结构及与编程相关的硬件知识 编码及运算CPU的寄存器组存储器管理机制外设接口与端口中断系统 使用汇编语言编程需要具备的基础知识 第1章预备知识 1 1建立 二进制数描绘一切 的观念1 2数制转换与二进制数1 3数和字符在计算机中的编码 1 1使用 二进制 描述的世界 计算机系统只能处理数字信号 主要使用仅有两种状态的数字信号 一种状态代表1 一种状态代表0 计算机底层世界是一个二进制的世界 是0和1构成的世界 1 1使用 二进制 描述的世界 汇编语言是一种是面向硬件的低级语言 经常使用二进制数据形式 深刻理解二进制数是学好这门语言的基础 1 1使用 二进制 描述的世界 二进制数可以表示什么 1 数值 2 文字 3 图像 4 声音 5 程序 1 1使用 二进制 描述的世界 计算机系统中的二进制信息究竟代表什么含义呢 其含义只能由使用这些信息的人进行解释 1 2数制转换与二进制数 1 2 1进位记数制及其相互转换计算机系统使用的数据是二进制形式 但是人类所习惯的数据表达方式是十进制形式 熟悉数的二进制形式以及数制间转换原理是深入系统底层了解数学运算规律的必要条件 1 2 1进位记数制及其相互转换 表示一个数可以有很多种形式 最直观的方式是数轴上一个点 为了平时描述方便 人们往往使用十进制数的书写或口述形式来表达一个数 1 2 1进位记数制及其相互转换 例如 3 是一个具体的数 十进制 这个 3 只是它的一个名称二进制 如果以二进制方式来表达它 那么它应该叫做 011 虽然名称不同 但是在数轴上是同一个点 1 2 1进位记数制及其相互转换 像一个人可以有很多个名字一样 一个数可以有很多种表示形式 但是一个人被社会认同的名称只有一个 身份证上的名字 同理 在计算机系统中 一个数只有一种表示形式能够被计算机系统识别 二进制表示形式 什么是进位记数制 基数 在进位记数制中 一种记数制允许选用基本数字符号的个数叫做基数 系数 在任意数位上出现的基本数字符号 位权 在一个数中 系数在不同数位代表的值不同 如果基数为R 则第n位的位权为Rn 每个系数表示的数值等于它本身乘以位权 计算机中常用的进位记数制 十进制 0123456789二进制 01八进制 01234567十六进制 0123456789abcdef 十进制数转换为R进制数 十进制数 47361 352 的多项式形式 47361 352 4 104 7 103 3 102 6 101 1 100 3 10 1 5 10 2 2 10 3式中的4 7 3 6 1 3 5 2分别为不同数位上的系数 10n即为十进制数的权 多项式表达并不是十进制所独有 任何数制都可以表达为权与系数相结合的形式 十进制数转换为R进制数 如果十进制数 47361 352 有一个R进制的表示形式 R为任意基数 这个R进制数的多项式形式如下 47361 352 KnRn Kn 1Rn 1 K2R2 K1R1 K0R0 K 1R 1 K 2R 2 K mR m 十进制数转换为R进制数 把这些系数按照顺序抽出来即可得这个数的R进制形式 KnKn 1 K2K1K0 K 1K 2 K m与十进制数中系数的变化范围为0 9相似 R进制数中系数Ki变化范围为0 R 1 如何得到这些R进制系数呢 整数部分的系数采用除以基数取余数的方法得到 第一步 KnRn Kn 1Rn 1 K2R2 K1R1 K0R0 R KnRn 1 Kn 1Rn 2 K2R1 K1R0余数为K0 得到第0位系数 如何得到这些R进制系数呢 第二步 KnRn 1 Kn 1Rn 2 K2R1 K1R0 R KnRn 2 Kn 1Rn K2R0余数为K1 得到第1位系数 不断使用R来整除上次得到的商 直到最后商为0为止 即可由低位到高位求得R进制系数 如何得到这些R进制系数呢 小数部分的系数可以采用乘以基数取整数的方法得到 第一步 K 1R 1 K 2R 2 K mR m R K 1 K 2R 1 K mR m 1整数部分为K 1 得到第 1位系数 如何得到这些R进制系数呢 第二步 K 2R 1 K mR m 1 R K 2 K mR m 2整数部分为K 2 得到第 2位系数 如何得到这些R进制系数呢 不断使用R乘以上次乘法得到的小数部分 直到乘积结果为0或者出现无限循环为止 这样可由高位到低位得到R进制小数的各位系数 十进制数转换为R进制数 例1 求9 2的三进制表示形式 整数部分 3 903 301结果为100 3 十进制数转换为R进制数 小数部分 0 2 3 0 600 6 3 1 810 8 3 2 420 4 3 1 210 2 3 0 60 已经进入无限循环这里保留3位小数 为0 012 3 100 012 3 即为9 2的三进制表示形式 十进制数转换为R进制数 例2 求34 5的四进制表示整数部分 4 3424 802结果为202 4 小数部分 0 5 4 2 02结果为0 2 4 202 2 4 即为34 5的四进制表示形式 十进制数转换为R进制数 例3 求125 5的二进制表示整数部分 2 12512 6202 3112 1512 712 311结果为1111101 2 十进制数转换为R进制数 小数部分 0 5 2 11结果为0 1 2 1111101 1 2 即为125 5的二进制表示形式 十进制数转换为R进制数 例4 求28的十六进制表示16 28C11C 16 即为28的十六进制表示形式 十进制数转换为R进制数 方法总结 整数部分的系数采用十进制数除以基数取余数的方法得到 小数部分的系数采用十进制数乘以基数取整数的方法得到 注 不同进位计数制不能混合运算 十进制 十进制 十进制运算 十进制运算 转换为R进制 转换为R进制 R进制数转换为十进制数 通过多项式合并来实现 KnRn Kn 1Rn 1 K2R2 K1R1 K0R0 K 1R 1 K 2R 2 K mR m上式是一个R进制数的多项式形式 首先要求式中的Ki和R都已经是十进制形式的数 将此多项式按照十进制运算合并即可得十进制形式 R进制数转换为十进制数 例5 把前面例子中得到的各个转换结果重新转换为十进制数的表达形式100 012 3 1 32 0 31 0 30 0 3 1 1 3 2 2 3 3 9 1 9 2 27 9 0 11 0 07 9 18由于出现了无限循环小数 所以最后结果和原始数据有差异 原始数据为9 2 R进制数转换为十进制数 202 2 4 2 42 0 41 2 40 2 4 1 32 8 1 2 40 51111101 1 2 1 26 1 25 1 24 1 23 1 22 0 21 1 20 1 2 1 64 32 16 8 4 1 1 2 125 5由于前面转换中没有出现无限循环小数 所以逆转换的结果是精确的 R进制数转换为十进制数 1C 16 1 161 12 160 16 12 28由于十六进制数的基数大于10 可能出现大于10的系数 必须将这种系数变成十进制形式再进行计算 此规则对于基数大于10的记数制都适用 二 八 十六进制间相互转换 计算机系统的硬件只能识别二进制数 但是二进制数的冗长表达形式使它远没有十进制数方便 但系统底层某些数据用二进制形式才能清晰的表达它的含义 例如I O接口中的状态字 编程语言中提供八进制和十六进制数据形式 比二进制数表达更简练 而且和二进制数有着密切的联系 与二进制数之间的相互转换也很容易 二 八 十六进制间相互转换 例6 将二进制数11010011分别转换为八进制数和十六进制数11010011 011010011 21 20 21 21 20 323 8 11010011 11010011 23 22 20 21 20 0D3 16 二 八 十六进制间相互转换 如果要将八进制或十六进制数转换为二进制数 那么只需将每一位系数分别转换为二进制 然后把它们按顺序拼接即可 熟练之后 这些转换过程可以很快的完成 这也是汇编语言程序设计中需要熟练掌握的内容 1 2 1进位记数制及其相互转换 数制间转换重点掌握十进制数与二进制数间转换 二进制与八进制 十六进制间转换 要求对整数的转换熟练 小数转换掌握方法即可 课程中涉及的计算问题基本上是整数计算 不涉及浮点数计算 1 2 2二进制数运算 加法运算二进制加法运算规则是逢2进1 即 0 0 00 1 11 0 11 1 10减法运算二进制减法运算规则是借1当2 即 0 0 01 0 11 1 00 1 1 向高位借1 1 2 2二进制数运算 乘法运算二进制乘法运算规则是0乘以任何数得0 1乘以任何数得该数 即 0 0 00 1 01 0 01 1 1除法运算二进制除法运算规则是0除以1得0 1除以1得1 0做除数无意义 即 0 1 01 1 1 1 2 2二进制数运算 逻辑或运算逻辑或运算规则是1和任何数相或得1 只有0与0相或得0 其运算符号为 或 0 0 00 1 11 0 11 1 1例1 131100 1001 1101 1 2 2二进制数运算 逻辑与运算逻辑与运算规则是0和任何数相与得0 1和任何数相与该数值不变 其运算符号为 或 0 0 00 1 01 0 01 1 1例1 141100 1001 1000 1 2 2二进制数运算 逻辑非运算逻辑非运算是单目运算 其运算规则是1非为0 0非为1 其运算符号为 或者在逻辑变量上方加一横线 0 1 1 0例1 15 1011 0100 1 2 2二进制数运算 逻辑异或运算逻辑异或运算规则是0和任何数相异或该数值不变 1和任何数相异或该数值变反 其运算符号为 0 0 00 1 11 0 11 1 0例1 161101 1001 0100 1 3数和字符在计算机中的编码 数 是指理论上的数值 它可以采用各种进位记数制表示 也可以采用数轴上的点表示 字符 是指各种具体字体形状 实际上每个 字符 都是一幅小的图像 数 的编码是指二进制数在计算机中的实际表示形式 字符 的编码是指字符图像在计算机中的编号 数与编码的区别 联系 数 理论上的数值 可以表示为多种进位计数制 编码 计算机系统中数的表示形式 数是内容 编码是形式 通常二者在外观上是有区别的 计算机系统中实施的各种运算都是编码运算 但与理论上数的运算是对应的 注 进位计数制是一种数的表达形式 它是形成编码的基础 但还不能直接作为编码 1 3 1整数在计算机中的表示 1 无符号整数 编码 无符号整数包括整数0和正整数 在表示无符号整数时 全部数位均用于表示数值 n位二进制数能够表示的无符号整数的范围是 0 2n 1 1 3 1整数在计算机中的表示 2 带符号整数 编码 带符号整数包括整数0和正整数 负整数 在表示带符号整数时 一般用最高有效位表示符号 0 表示正号 1 表示负号 其余的数位是数值位 1 3 1整数在计算机中的表示 带符号数包括原码 反码 补码等几种编码方式 n位二进制数能够表示带符号整数的最大范围是 2n 1 2n 1 1 原码 若数值是正数 则直接使用二进制数即可表达 例如使用一个字节 8个二进制位组成的基本单位 表示一个无符号整数 可以表示28 256个整数 表达范围为0到255 但是实际应用中经常要区分正数和负数 这就涉及到一个符号表达问题 原码 例如如下两个二进制数 0110011 0110011计算机内部只有1和0两种表达方式 如果要表示符号 牺牲一个二进制位表示符号 原码 为了不影响算术运算 那么牺牲一个字节 8位 或者一个字 16位 的最高位是很合适的 原码 最高位为0表示正数 最高位为1表示负数 其它二进制位用于表达数值 上面两个二进制数表示为原码 0011001110110011 原码 原码加减运算的基本法则 原码的加减运算中 符号不参与运算 仅数值部分参加运算 因此 符号对运算结果的影响必须在运算前进行 原码 CPU的运算器 ALU 在进行运算时必须先比较两个操作数的最高位是否相同 如果相同 则是同符号数运算 那么按照运算符进行运算 如果不同 则是异符号数运算 必须把加法变成减法 把减法变成加法 原码 要求ALU中不但提供加法器 而且要提供减法器 计算机的硬件逻辑因此变得更复杂 如果是减法 则需要区分减数和被减数 专门针对原码设计的加法器和减法器称为原码加法器和原码减法器 原码 原码运算的实质 1 符号与数值是分离的 符号判断与数值运算分别进行 2 在对其数值部分实施运算时 实质上是无符号数运算 补码 原码解决了正负数在机器内的表达问题 但是硬件操作并不方便 而且会使硬件逻辑变得相对复杂 为了解决这些问题 计算机设计者使用了二进制数的另一种编码表示 补码 补码 补码的含义是指正数和负数的编码是互补的形式 如果两个数的值相等 而符号相反 那么使用它们的补码直接相加就会等于0的补码 形成一种编码耦合 补码 补码的统一定义 X 补 2n X 补码存在字长限制 n表示字长 正数和零的补码 字节 59 补 28 00111011 100000000 00111011 1 舍去 00111011 8位以内的部分为补码 M只是在第8位上为1 从第0位开始计位编号 因为字节长度限制 相加结果仍等于正数真值 结论 正数或0的补码就是它的真值本身 负数的补码 59 补 28 00111011 100000000 00111011 11000101可以看到 负数的补码已与真值完全不一样 但是却实现了编码耦合 59 补 59 补 00111011 11000101 100000000 28 由真值求相应的补码 例1 18设A 65 B 65 则用8位二进制数表示的补码为 A 补 01000001 B 补 2n B 256 65 100000000 01000001 10111111练习 A 补 B 补 补码的基本运算规律 补码基本运算规律 X 补 X 补 2n加上字长限制 X 补 X 补 0 补 由已知补码求真值 如果把补码变回二进制数真值 则先判断符号位 如果是正数 那么补码本身就是真值 如果为负数 就用2n减去补码 也就是求负数补码的逆过程 已知负数补码求真值 X 补 2n X X 2n X 补注 所求结果只包括数值部分 需添加负号才能形成完整真值 由已知补码求真值 例7 分别求已知补码00110010和11010011的真值 00110010 为正数 补码等于真值11010011 为负数 100000000 11010011 00101101 真值为 00101101 快速求负数补码的方法 正数补码就是它的真值本身 负数补码则是把数值先变反 再加1 就得到补码 快速求负数补码的方法 例8 使用变反加1的方法求负数补码真值 01011001相反数 01011001变反 10100110加1 10100111 快速求负数补码的方法 验算 01011001 10100111 0 舍去第8位 验算过程解释 01011001 正数补码 10100110 值变反的结果 1 11111111 1去掉超出字节范围的第8位以后 结果一定为0的补码 变反加1的实质 一个M位的二进制形式 数或编码 A 将其变反加1后得到的结果为耦合的二进制形式A 满足A A 2M 可推论 A 变反加1应得到A 去掉负号的负数真值与负数补码是相互耦合的二进制形式 快速由负数补码求真值的方法 变反加1的方法可以由负数真值计算补码 这个方法同样可以用于由负数补码计算它的真值 就上例的运算结果 变反加1后 添上一个负号 又变回了负数真值 快速由补码求相反数补码的方法 已知 X 补 求 X 补 X可为正数 也可为负数 例9 已知补码10011101 求其相反数的补码已知补码 10011101变反 01100010加1 01100011 变反加1快速方法总结 总结变反加1方法可用的场合 1 求负数真值对应的补码2 求负数补码对应的真值3 求已知补码的相反数补码 补码的符号位 对于正数补码 最高位总是0 对于负数补码 最高位总是1 所以补码保持了和原码同样的优点 即具有符号位 补码的符号位 但是补码和原码的符号位不同 原码的符号位可以同后面的数值分开理解 是两个独立的部分 而补码的符号位实质上是数值的一部分 不能脱离整体 去掉符号位的补码无意义 补码的符号位 补码的符号位可以任意扩展 1 01010011 2 11010001试任意增添符号位 并检验是否改变了补码所表示的真值 补码运算的实质 1 补码的符号是其真值编码的一部分 不能从编码中分离 2 补码的符号作为编码的一部分参加运算 其运算实质上是带符号数运算 运算结果可为正数补码 也可为负数补码 补码加减运算规律 补码的加减运算规律如下所示 闭合性 X 补 Y 补 X Y 补 X 补 Y 补 X 补 Y 补 X Y 补式中的X和Y为二进制数真值 可以为正数 也可以为负数 思考 无符号数编码的减法是否满足闭合性 原码的减法是否满足闭合性 补码运算规律的优势 补码加补码得到和的补码 补码减补码得到差的补码 补码具有良好的运算性质 闭合性 不需要区别对待符号位 符号位同样要参加运算 不需要根据符号位来判断使用加法还是减法 按照表达式的直接含义运算 补码运算规律的优势 补码减法不需要判断被减数与减数的大小关系00000001 0000001011111111如果解释为无符号数 实际完成的运算为256 1 2 255如果解释为补码 则为1 2 1 补码运算规律的优势 计算机内部使用的加减法方法如下式所示 加法 X 补 Y 补减法 X 补 Y 补 X 补 Y 补可见 补码的减法可以用加法来实现 先对减数求相反数补码 然后再相加 可以实现减法 补码运算规律的优势 如果使用补码 CPU的运算部件中仅提供一个加法器就可以完成加减两种运算 而且不需要用于判断符号位的逻辑电路 简化了运算部件的复杂度 补码的表示范围 在实际使用中 要注意补码的表示范围 如果是字节数据 补码的范围为 128到127 无符号数是0到255 都是28个编码 如果是字数据 补码的范围为 32768到32767 无符号数是0到65535 补码的表示范围 这里不给出证明 只给出说明 以字节为例 补码表示范围只有7位 因为正数补码最高位必须为0 负数补码最高位必须为1 最大的正数补码为 01111111 这就是十进制的127 其相反数的补码为10000001 即 127 但它不是字节补码中最小的负数 补码的表示范围 原码的0有两种形式 00000000 正0 和1

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论