汇编语言 程序设计 第 1 章 基础知识 第 1 章 基础知识 ◆ 汇编语言程序设计概述 ◆ 进位计数制及其相互转换 ◆ 计算机中数的表示 ◆ 计算机中字符的表示 汇编语言程序设计概述 进位计数制及其相互转换 计算机中数的表示 计算机中字符的表示
汇编语言 程序设计 1.1 汇编语言程序设计概述 机器语言是计算机第一代语言,它全部由 0 、 1 代码组成,是能够直接被机器所接受的语言,是最 底层的计算机语言。机器语言不容易记忆,程序编 写难度大,调试修改繁琐,且不易移植,现程序员 很少用。但机器语言执行速度最快,它是一种面向 机器的程序设计语言。 机器语言汇编
汇编语言 程序设计 具有一定含义的符号作为助忆符,用指令助忆 符、符号地址等组成的符号指令称为汇编格式指令 ( 或汇编指令 ) 。汇编语言是汇编指令集、伪指令集 和使用它们规则的统称。汇编语言比机器语言直观, 容易记忆和理解,用汇编语言编写的程序也比机器 语言程序易读、易检查、易修改。对于不同的计算 机,针对同一问题所编写的汇编语言源程序是互不 通用的。用汇编语言编写的程序执行效率比较高, 但通用性与可移植性仍然比较差。计算机不能直接 识别用汇编语言编写的程序,必须由一种专门翻译 程序将汇编语言程序翻译成机器语言程序,计算机 才能执行。 汇编语言
汇编语言 程序设计 1. 可以更深刻认识计算机的工作过程 用汇编语言编制程序,可以清楚地了解计算机 是怎样完成各种复杂工作的。在此基础上,程序设 计人员更能充分地利用机器硬件的全部功能,发挥 机器的长处。 2. 许多领域和场合需要使用汇编语言. 与硬件资源密切相关的软件开发;. 要求执行效率高、反应快的领域;. 受存储容量限制的应用领域。 为什么要学习和使用汇编语言 返回
汇编语言 程序设计 1. 数制的概念 按进位的原则进行计数叫进位计数制,简称数 制。每种数制都有其基数和各数位的位权。基数是 指该数制中允许选用的基本数码的个数。每个数码 所表示的数值等于该数码乘以一个与数码所在位置 有关的常数,这个常数叫位权,位权的大小是以基 数为底,数码所在位置的序号为指数的整数次幂。 2 .常用的数制 在汇编语言中常用的数制有:十进制、 二进制、 八进制和十六进制。 1.2 进位计数制及其相互转换 进位计数制
汇编语言 程序设计 十进制数的基数为 10 ,十进制数的位权为 10 i , 其中 i 代表数字在十进制数中的序号,任意一个 10 进 制 N 可表示为: N= a n a n-1 … a 1 a 0.a -1 … a -m = a n ×10 n + a n-1 ×10 n-1 + … +a 1 × a 0 × a -1 × …… +a -m ×10 -m -m = ∑ a i ×10 i i=n 2. 二进制 二进制数的基数为 2 ,二进制数中每一个数字的 位权由 2 的幂次决定,即: 2i, 其中 i 为数字在二进制 数中的序号。 1. 十进制
汇编语言 程序设计 N = a n a n-1 ….. a 1 a 0.a -1 …… a -m = a n ×2 n + a n-1 ×2 n-1 + ….. +a 1 ×2 1 + a 0 ×2 0 + a -1 × …… +a -m ×2 -m -m = ∑a i ×2 i i=n 3. 十六进制 十六进制数的基数为 16 ,十六进制中每位数字的位 权由 16 的幂次决定 N = a n a n-1 ….. a 1 a 0.a -1 …… a -m = a n ×16 n +a n-1 ×16 n-1 + … +a 1 ×16 1 +a 0 ×16 0 +a -1 × …… +a -m ×16 -m -m = ∑a i ×16 i i=n 其中 m , n 意义同前, ai 取值范围为 0-9 , A , B , C , D , E , F 中任一数字。
汇编语言 程序设计 各种数制间的相互转换 将数由一种数制转换成另一种数制称为数制间的 转换。 1. 非十进制转换成十进制 非十进制数转换成十进制数采用 “ 位权法 ” ,即把非 十进制数写成各自的按权展开式,然后按十进制运算 原则求和,其和值就是转换后对应的十进制数。 【 例 1.1 】 将十六进制数 B2F 转换成十进制数。 ( B2F ) 16 = B × × F × 16 0 = 11 × × × 16 0 = = ( 2863 ) 10
汇编语言 程序设计 2. 十进制数转换成非十进制数 将一个十进制数转换非十进制数时,整数部分 和小数部分的转换方法是不同的,需将整数部分和 小数部分分别转换,将两个转换结果结合起来就可 以得到对应的非十进制数。 (1) 十进制整数转换成非十进制 整数将十进制整数转换为非十进制整数采用 “ 除 基取余法 ” ,即:将十进制整数及此期间产生的商逐 次除以需转换为数制的基数。直到商为零为止,并 记下每一次相除所得到的余数。按从后往前的次序 将各余数记作 KnKn-1Kn-2 …… K0 ,从而构成转换 后 对应的非十进制整数。第一次得到的余数为非十进 制数的最低位,最后一次得到的余数为非十进制数 的最高位。
汇编语言 程序设计 【 例 1.3 】将整数 125 转换成对应的十六进制整数 则得:( 125 ) 10 = ( 7D ) 16 (2) 十进制小数转换成非十进制小数 将十进制小数转换为非十进制小数采用:将十 进制小数及此期间产生的积小数部分逐次乘以需转 换为数制的基数,直到积的小数部分为零为止或达 到一定精度为止,并记下每一次相乘所得到的整数 部分,按照从前往后的次序,将各整数部分记作 k – 1 k-2 …… k-m ,从而构成转换后对应的非十进制小数。 【 例 1.4 】将十进制数 转换成对应的二进 制数 因为 ( 125 ) 10 = ( ) 2 ( ) 10 = ( ) 2 所以 ( ) 10 = ( ) 2 返回
汇编语言 程序设计 1.3 计算机中数的表示 数值型数据是用二进制数来表示的,数值数据分 为有符号数和无符号数,有符号数有正、负之分, 通常,无符号数最高位表示数值,而有符号数最高 位表示符号,规定:用 “ 0 ” 表示 “ + ” 号,用 “ 1 ” 表示 “ ﹣ ” 号。把这种连同数字与符号组合在一起的二进制数 称为机器数,由机器数所表示的实际值称为真值。 真值的符号用 “ + ” 或 “ ﹣ ” 表示。有符号数可以用不同的 码制来表示,即:原码、反码、补码、移码等,常 用的是补码。
汇编语言 程序设计 原码表示法 设字长为 n 位,最高位为符号位,正数的符号用 “ 0 ” 表示, 负数的符号用 “ 1 ” 表示,数值部分 n-1 位用二进制真值的绝对 值表示,这种表示法称为原码。 例如 设字长为 8 当 x = 时, [x] 原 = , 当 x = 时, [x] 原 = 当 x = 时, [x] 原 = ,当 x = 时, [x] 原 = 补码表示法 补码表示法规定:正数的补码与原码相同,负数的补码 是对该数的原码除符号位外各位取反,然后末位加 1 。 例如,设字长为 8 当 x = 时, [x] 补 = , 当 x = 时, [x] 补 = 当 x = 时, [x] 补 = 当 x = 时, [x] 补 =
汇编语言 程序设计 反码表示法 反码表示法规定:正数的反码和原码相同,负数的反码是 对该数的原码除符号位外各位取反,即 “ 0 ” 变 “ 1 ” , “ 1 ” 变 “ 0 ” 。 例如 设字长为 8 当 x = 时, [x] 反 = , 当 x = 时, [x] 反 = 当 x = 时, [x] 反 = ,当 x = 时, [x] 反 = 移码表示法 移码的定义 : [x] 移 = 2 n + x (2 n > x ≥ -2 n ) 移码是在真值上加一个常数 2 n ,在数轴上移码所表示的范 围恰好对应与真值在数轴上的范围向轴的正方向移动 2 n 个单 元,而得到移码名称。同一真值的补码和移码只差最高位相 反 。 例如 x = [x] 移 = = x = [x] 移 = = x = [x] 补 = =
汇编语言 程序设计 补码的加法和减法运算 1 .补码加减运算的基本公式 [A] 补 +[B] 补 =[A+B] 补 ( 整数 mod 2 n +1 ;小数 mod 2 ) [A-B] 补 = [A] 补 +[-B] 补 ( 整数 mod 2 n +1 ;小数 mod 2) 【例 1.10 】设字长为 8 , x = , y = ,用补码的加法 求 x+y 解: [x] 补 = , [y] 补 = [x] 补 +[y] 补 = = (按模 2 的意义,最左边的 1 丢掉) 即 x+y = 【例 1.10 】 x = , y = ,用补码的减法求 x-y 解: [x] 补 = , [y] 补 = , [-y] 补 = [x] 补 - [y] 补 = [x] 补 + [-y] 补 = =
汇编语言 程序设计 2 .溢出判断 两个符号位相同的补码相加,如果和的符号位与加数的符号相反, 则表明运算结果溢出;两个符号位相反的补码相减,如果差的符号 位与被减数的符号位相反,则表明运算结果溢出。这种方法需要判 断操作是加法还是减法,以及运算结果与操作数的符号关系。 【例 1.12 】机器字长为 8 ,高位为符号位,令 A = -91 , B = +43 ,求 [A-B] 补 解:由 A = -91= ,得 [A] 补 = 由 B = +43 = ,得 [B] 补 = , [-B] 补 = [A-B] 补 = [A] 补 + [-B] 补 = = 按模 2 n +1 的意义,最左边的 “ 1 ” 自然丢掉,而符号位变成了 0 与正 确的符号为 1 不同,因此可以判断运算出现溢出,这是因为 A-B= 超出了机器字长所能表示的范围。
汇编语言 程序设计 定点数和浮点数 按小数点的位置是否固定,一般分为定点数和浮点数,相应地 数据具有定点表示和浮点表示两种形式。 1 .定点数 在机器中,小数点位置固定的数称为定点数,定点数根据小数 点隐含固定位置不同,又分为定点小数和定点整数。一般采用定 点小数表示法。
汇编语言 程序设计 2 .浮点数 浮点数是指小数点位置不固定、根据需要而浮动的数,它既有整数部分 又有小数部分。定点数所能表示的范围非常有限,在许多场合下是不够用 的,浮点数表示法可以扩大数据的表示范围。 一个数 N 用浮点数表示可以写成: N = M×R E 其中 M 表示尾数, E 表示指数, R 表示基数。基数一般取 2 、 8 、 16 。一 旦计算机定义好了基数值,就不能再改变了,因此,基数在浮点数中不用 表示出来,是隐含的。 计算机中参与运算的数超出了浮点数的表示范围时称为溢出。如果一个 数的阶码大于计算机所能表示的最大阶码,则称为上溢;反之,若小于最 小阶码,则称为下溢。 采用浮点表示的数,在运算之前要进行对齐小数点的操作(称为对阶), 才能进行加减运算。 返回
汇编语言 程序设计 1.4 计算机中字符的表示 计算机中字符的表示方法有多种,最常见的有 ASCII 码、 BCD 码。 ASCII 码 ASCII 码( American Standard Code for Information Interchange )是 美国标准信息交换码,已被国际标准化组织定为国际标准,是目前最普 遍使用的字符编码。 ASCII 码有 7 位码和 8 位码两种编码方案,常用的是 7 位码方案。 7 位 ASCII 码是用七位二进制数进行编码的,可共表示 27 =128 个字符。 ASCII 码的每个字符用 7 位二进制码表示,其排列次序为 b6b5b4 b3b2b1b0 , b6 为高位, b0 为低位。 数 0-9 ASCII 码的编码值为 30H-39H ,大写英文字母 A-Z 的编码值为 41H-5AH ,小写英文字母 a-z 的编码值为 61H-7AH 。
汇编语言 程序设计 BCD 码 BCD 码( Binary Coded Decimal )是一种二-十进制的编码,它 使用 4 位二进制数表示一位十进制数。最常用的 BCD 码 8421 码,又 叫 NBCD 码( Natural Binary Coded Decimal Code ),由于 4 位 二进制数可表示 16 种状态,只取前 10 种状态 来表示十进 制数码 0-9 ,从左到右每位二进制数的权分别是 8 、 4 、 2 、 1 ,因此 又叫 8421 码。这种编码既具有二进制形式,又具有十进制的特点, 它是逢 “ 十 ” 进位的。 BCD 码十个不同的码分别是: 0000 、 0001 、 0010 、 0011 、 0100 、 0101 、 0110 、 0111 、 1000 和 1001 ,这十个 码分别代表十进制数码 0 、 1 、 2 、 3 、 4 、 5 、 6 、 7 、 8 、 9 。 例如:十进制数 1258 对应的 BCD 码是 ;反之, BCD 码 对应的十进制数是 9872 。 返回