课 时:讲课 50学时,上机 20学时
汇编语言程序设计
绪 言
在程序设计技术有了革命性进步和发展的今天,
汇编语言仍具有不可替代的地位。
1 汇编语言的特点
( 1) 可直接控制硬件,充分发挥硬件功能。
( 2) 汇编语言程序代码质量高,占用内存空
间少,执行速度快。
应用优势,
对于解决某些领域的问题,如操作系统,实时
控制和处理、加密 /解密、软件调试、病毒分析及
逆向工程等领域具有独特的优势。
2
在实际应用问题中,常常编写汇编语言子程序,
解决如下的问题:
( 1)进行计算速度或代码长度优化
( 2)存取系统资源
( 3)直接访问硬件
( 4)为不兼容的代码(编程环境)提供接口
设,A=50 B=30 计算,A+B -> C
高级语言, C=A+B ;
汇编语言,
缺点:可移植性差、可读性差。
MOV AX,A
ADD AX,B
MOV C,AX
参考教材:
( 1) IBM PC 汇编语言程序设计,沈美明等,清华大学出版社
( 2)微机汇编语言基础教程,许远等,电子科技大出版社
( 3)宏汇编语言程序设计,王正智等,电子科技大出版社
( 4)汇编语言程序设计,钱晓捷等,电子工业出版社
学习要求:
( 1) 预习 +听课 +复习 +动手 时间比,1+1+1+1
( 2)按时完成上机作业
2 学习汇编语言的目 标 和要求
( 1)掌握汇编语言程序设计的基本方法,为其他专业课奠定
基础(接口技术、组成原理、单片机等),深入理解计
算机如何完成复杂操作和计算以及程序的执行过程。
( 2)培养自我拓展汇编语言新知识的能力,掌握扎实的软件
研制基本功。
3 学习汇编语言需要的基础知识
4 数制、编码及有关运算
1)进位计数制
任一个 r进制数都可以表示成:
0)m(n,rd
rdrdrdrdrdN
m
ni
i
i
n
1
1
0
0
1m
1m
m
m
??
???????
?
??
?
?
?
?
? ??
r i称为 权,r称为 基数,基数表明每一位上可取的数字的个数
( r个,0,1,2,…,r-1,逢 r进一 ),上式称为
把一个 r进制数按权展开。
特点:
一个数码所表示的数的大小与它在数中所处的位置有关。
5
例,(512)10=5× 102+1× 101+2 × 100
(101)2=1 × 22+0 × 21+1 × 20 => (5)10
(24)16=2 × 161+4 × 160 => (36)10
2)不同进制数之间的转换
r进制数 => 十进制数 用展开式
十进制数 => r进制数
整数:除 r 倒取余,商为 0为止。
小数, 乘 r 取整,积为 0为止。
例, (30)10 = ( )2
(0.8125)10 = ( )2
(266)10 = ( )16
展开式, 一个 r进制数的每位数字乘以其权所得积之和
为该数的值。
方法如下,
6
例,(30)10=( 11110 )2
2| 3 0 …… 0 低位
2| 1 5 …… 12| 7 …… 1
2| 3 …… 12| 1 …… 1 高位
0
(0.8125)10 = ( 0.1101 )2
0.8125× 2
1.6250 …… 1 高位
0.6250× 2
1.2500 …… 1
0.2500× 2
0.5000 …… 0
0.5000× 2
1.0000 …… 1 低位
(266)10 = ( 10 A )16
266/16 = 16 …… A 低位
16/16 = 1 …… 0
1/16 = 0 …… 1 高位
7
十进制 (D) 二进制 (B) 八进制 (O,Q) 十六进制 (H)
二进制数与十六进制数之间的转换
四位二进制数一组写成一位十六进制数
二进制数 十六进制数
一位十六进制数写成四位二进制数
例,( 3AB )16 = ( 0011 1010 1011 )2
( 0011 1010 1011 )2 = ( 3AB )16
( 467 )8 = ( 100 110 111 )2
0 0000 0 0
1 0001 1 12 0010 2 2
3 0011 3 34 0100 4 4
5 0101 5 56 0110 6 6
7 0111 7 78 1000 8
9 1001 9 1010 A
1011 B1100 C
1101 D1110 E
1111 F8
3)各种进制的计算
基本方法与十进制相同,逢 r 进 1,借 1 当 r。
例,05C3H 3D25H
+ 3D25H - 05C3H
42E8H 3762H
4)数的编码
原值 例,(± 1100 ) 2 真值
机器数,将最高位留作符号位,0,1分别表示正负号,
连同符号一起数字化的数称为 机器数 。
例,真值, -1100 机器数, 11100
+1011 01011
问题 1:能否将 符号也作为数值的一部分?
带 符号数的几种编码方法,原码、补码、反码
9
问题 2,符号也作为数值的一部分时,数值部分如何变化?
( 1)原码
+1100010 0 1 1 0 0 0 1 0 -1100010 1 1 1 0 0 0 1 0
最高位作符号位,0,1分别表示正负号,有效值部分
用二进值绝对值表示(与正值相同)。
优点:原码表示数据简单直接。
原码在运算上不方便,例,( -8) + 9 =?
设想, 如果让符号位也作为数值的一部分参与运算,是
否可以做到
<1> 使实际操作完全由指令确定
<2> 减法转化为加法
10
7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0
( 2)补码 (模运算)
时针倒拨 2格,3-2=1
时针正拨 10格,3+10=13=12+1=1 ( mod 12)3
12
9
6
1
-2与 10对模 12互补,即以 12为模,-2的补码是 10
3-2 -> 3+(-2) -> 3+10
计算机如何实现模运算?
[x]补 =M+ x ( mod M)补码定义,
例:求正数补码(以二进制小数为例)
x = 0.110 [x]补 = 10.0+0.110
= 0.110 (mod 2)
结论, 正数的补码与原码相同 。
求负数补码
x = - 0.110 [x]补 = 10.0 +( - 0.110)
= 10.0 - 0.110
= 1.010 (mod 2)
结论, 负数补码的尾数与原码不相同,符号通过与模的运
算,已是数值的一部分,可以参与尾数运算,并化减为加。
11
利用机器字长限制
验证,1-0.110 = 1+ 1.010 =0.010
原码转换为补码的方法:
(1)利用定义
(2)利用规律, 原码符号位不变,求反加 1。
补码转换为原码方法, 补码求补
例, (1011 0111)原 => (1100 1001)补
1 0 1 1 0 1 1 1
求反 1 1 0 0 1 0 0 0
+ 1
1 1 0 0 1 0 0 1
再讨论补码实现化减为加,
例, 9-8=9+(-8)=1
-8的原码 1 0 0 0 1 0 0 0
1 1 1 1 0 1 1 1
+ 1
-8的补码 1 1 1 1 1 0 0 0 (-8)
+ 0 0 0 0 1 0 0 1 ( 9)
模溢出 1 <= 0 0 0 0 0 0 0 112
( 3) 反码
1)正数的反码与正数原码相同。
2)负数的反码:符号位为 1,数值部分逐位求反。
0和 -1的表示:
在原码系统中,0有 两种 表示方法:
+0 ( 00000000) -0 ( 10000000)
在补码系统中,0有 几种 表示?
+0 ( 00000000) 进位溢出
求反 加 1
( 10000001) => ( 11111110) => ( 11111111) ( FFH)
( 4) BCD 码 ( Binary-Coded Decimal)
以二进制编码表示的十进制数,称为 BCD码。
也称为二 — 十进制
编码方法,用四位二进制数表示一位十进制数。
=>( 11111111) =>( 1 00000000)
13
-0 ( 10000000)
-1
例,(327)10=(0011 0010 0111)BCD
5 => 0 1 0 1
23 22 21 20
各位权依次为 8,4,2,1,又称为 8421码。
3 2 7
BCD码优点:
1)建立了二进制与十进制的联系。
2)可按二进制规则运算,,加、减 6”修正后,即得十进制数。
BCD码有两种格式:
压缩的 BCD码, 用 四位 二进制数表示一位十进制数
例, (95)10 = (1001 0101)BCD
非压缩的 BCD码, 用 八位 二进制数表示一位十进制数
例, (95)10 = (00001001 00000101)BCD
ASCII码 可以看作一种非压缩的 BCD码,
例, ‘ 5’
=>
35H => (00110101)BCD
14
(5) 字符的编码
ASCII- American Standard Code for Information Interchange
标准的 ASCII码包含 128个基本字符,每个字符用一个 8位
二进制数表示。( 33个非打印字符,95个可打印字符)
标准的 ASCII码编码为:
0 ~ ( 127 )10
( 0000 0000 )2 ~ ( 0111 1111 )2
00H ~ 7FH
8位二进制数可表示数范围, 00 ~FFH
80H ~ FFH 作为 标准的 ASCII码的扩展编码部分,提供
一些其它字符,如制表符、希腊字母等。
编码方法, (P316)字符有序排列,位置固定,每个字符的 列号
写成 4位二进制数作为 高 4位,行号 写成 4位二进制数作为 低 4位,
二者合成一个 8位二进制数,构成一个字符的 ASCII码。
15 next
返回
‘A’ 41H
‘a’ 61H
‘0’ 30H
换行 0AH
回车 0DH
( 1) 汇编语言有显著的特点,有能力解决一些高
级语言不易解决的低层问题,具有不可取代的地位。
( 2)学习汇编语言会涉及到更多的计算机科学基础
知识,需要耐心和细致,通过学习汇编语言可以深
入了解计算机是如何完成复杂的操作和计算的。
( 3)要求 十分熟练 地掌握不同 进制的转换, 运算 及
编码 。重点是 二进制与十六进制的转换, 补码运算,
ASCII编码方案及应用,为后续学习和分析 汇编指令
功能 减少困难。
小 结
认真复习,熟练应用
汇编语言程序设计
绪 言
在程序设计技术有了革命性进步和发展的今天,
汇编语言仍具有不可替代的地位。
1 汇编语言的特点
( 1) 可直接控制硬件,充分发挥硬件功能。
( 2) 汇编语言程序代码质量高,占用内存空
间少,执行速度快。
应用优势,
对于解决某些领域的问题,如操作系统,实时
控制和处理、加密 /解密、软件调试、病毒分析及
逆向工程等领域具有独特的优势。
2
在实际应用问题中,常常编写汇编语言子程序,
解决如下的问题:
( 1)进行计算速度或代码长度优化
( 2)存取系统资源
( 3)直接访问硬件
( 4)为不兼容的代码(编程环境)提供接口
设,A=50 B=30 计算,A+B -> C
高级语言, C=A+B ;
汇编语言,
缺点:可移植性差、可读性差。
MOV AX,A
ADD AX,B
MOV C,AX
参考教材:
( 1) IBM PC 汇编语言程序设计,沈美明等,清华大学出版社
( 2)微机汇编语言基础教程,许远等,电子科技大出版社
( 3)宏汇编语言程序设计,王正智等,电子科技大出版社
( 4)汇编语言程序设计,钱晓捷等,电子工业出版社
学习要求:
( 1) 预习 +听课 +复习 +动手 时间比,1+1+1+1
( 2)按时完成上机作业
2 学习汇编语言的目 标 和要求
( 1)掌握汇编语言程序设计的基本方法,为其他专业课奠定
基础(接口技术、组成原理、单片机等),深入理解计
算机如何完成复杂操作和计算以及程序的执行过程。
( 2)培养自我拓展汇编语言新知识的能力,掌握扎实的软件
研制基本功。
3 学习汇编语言需要的基础知识
4 数制、编码及有关运算
1)进位计数制
任一个 r进制数都可以表示成:
0)m(n,rd
rdrdrdrdrdN
m
ni
i
i
n
1
1
0
0
1m
1m
m
m
??
???????
?
??
?
?
?
?
? ??
r i称为 权,r称为 基数,基数表明每一位上可取的数字的个数
( r个,0,1,2,…,r-1,逢 r进一 ),上式称为
把一个 r进制数按权展开。
特点:
一个数码所表示的数的大小与它在数中所处的位置有关。
5
例,(512)10=5× 102+1× 101+2 × 100
(101)2=1 × 22+0 × 21+1 × 20 => (5)10
(24)16=2 × 161+4 × 160 => (36)10
2)不同进制数之间的转换
r进制数 => 十进制数 用展开式
十进制数 => r进制数
整数:除 r 倒取余,商为 0为止。
小数, 乘 r 取整,积为 0为止。
例, (30)10 = ( )2
(0.8125)10 = ( )2
(266)10 = ( )16
展开式, 一个 r进制数的每位数字乘以其权所得积之和
为该数的值。
方法如下,
6
例,(30)10=( 11110 )2
2| 3 0 …… 0 低位
2| 1 5 …… 12| 7 …… 1
2| 3 …… 12| 1 …… 1 高位
0
(0.8125)10 = ( 0.1101 )2
0.8125× 2
1.6250 …… 1 高位
0.6250× 2
1.2500 …… 1
0.2500× 2
0.5000 …… 0
0.5000× 2
1.0000 …… 1 低位
(266)10 = ( 10 A )16
266/16 = 16 …… A 低位
16/16 = 1 …… 0
1/16 = 0 …… 1 高位
7
十进制 (D) 二进制 (B) 八进制 (O,Q) 十六进制 (H)
二进制数与十六进制数之间的转换
四位二进制数一组写成一位十六进制数
二进制数 十六进制数
一位十六进制数写成四位二进制数
例,( 3AB )16 = ( 0011 1010 1011 )2
( 0011 1010 1011 )2 = ( 3AB )16
( 467 )8 = ( 100 110 111 )2
0 0000 0 0
1 0001 1 12 0010 2 2
3 0011 3 34 0100 4 4
5 0101 5 56 0110 6 6
7 0111 7 78 1000 8
9 1001 9 1010 A
1011 B1100 C
1101 D1110 E
1111 F8
3)各种进制的计算
基本方法与十进制相同,逢 r 进 1,借 1 当 r。
例,05C3H 3D25H
+ 3D25H - 05C3H
42E8H 3762H
4)数的编码
原值 例,(± 1100 ) 2 真值
机器数,将最高位留作符号位,0,1分别表示正负号,
连同符号一起数字化的数称为 机器数 。
例,真值, -1100 机器数, 11100
+1011 01011
问题 1:能否将 符号也作为数值的一部分?
带 符号数的几种编码方法,原码、补码、反码
9
问题 2,符号也作为数值的一部分时,数值部分如何变化?
( 1)原码
+1100010 0 1 1 0 0 0 1 0 -1100010 1 1 1 0 0 0 1 0
最高位作符号位,0,1分别表示正负号,有效值部分
用二进值绝对值表示(与正值相同)。
优点:原码表示数据简单直接。
原码在运算上不方便,例,( -8) + 9 =?
设想, 如果让符号位也作为数值的一部分参与运算,是
否可以做到
<1> 使实际操作完全由指令确定
<2> 减法转化为加法
10
7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0
( 2)补码 (模运算)
时针倒拨 2格,3-2=1
时针正拨 10格,3+10=13=12+1=1 ( mod 12)3
12
9
6
1
-2与 10对模 12互补,即以 12为模,-2的补码是 10
3-2 -> 3+(-2) -> 3+10
计算机如何实现模运算?
[x]补 =M+ x ( mod M)补码定义,
例:求正数补码(以二进制小数为例)
x = 0.110 [x]补 = 10.0+0.110
= 0.110 (mod 2)
结论, 正数的补码与原码相同 。
求负数补码
x = - 0.110 [x]补 = 10.0 +( - 0.110)
= 10.0 - 0.110
= 1.010 (mod 2)
结论, 负数补码的尾数与原码不相同,符号通过与模的运
算,已是数值的一部分,可以参与尾数运算,并化减为加。
11
利用机器字长限制
验证,1-0.110 = 1+ 1.010 =0.010
原码转换为补码的方法:
(1)利用定义
(2)利用规律, 原码符号位不变,求反加 1。
补码转换为原码方法, 补码求补
例, (1011 0111)原 => (1100 1001)补
1 0 1 1 0 1 1 1
求反 1 1 0 0 1 0 0 0
+ 1
1 1 0 0 1 0 0 1
再讨论补码实现化减为加,
例, 9-8=9+(-8)=1
-8的原码 1 0 0 0 1 0 0 0
1 1 1 1 0 1 1 1
+ 1
-8的补码 1 1 1 1 1 0 0 0 (-8)
+ 0 0 0 0 1 0 0 1 ( 9)
模溢出 1 <= 0 0 0 0 0 0 0 112
( 3) 反码
1)正数的反码与正数原码相同。
2)负数的反码:符号位为 1,数值部分逐位求反。
0和 -1的表示:
在原码系统中,0有 两种 表示方法:
+0 ( 00000000) -0 ( 10000000)
在补码系统中,0有 几种 表示?
+0 ( 00000000) 进位溢出
求反 加 1
( 10000001) => ( 11111110) => ( 11111111) ( FFH)
( 4) BCD 码 ( Binary-Coded Decimal)
以二进制编码表示的十进制数,称为 BCD码。
也称为二 — 十进制
编码方法,用四位二进制数表示一位十进制数。
=>( 11111111) =>( 1 00000000)
13
-0 ( 10000000)
-1
例,(327)10=(0011 0010 0111)BCD
5 => 0 1 0 1
23 22 21 20
各位权依次为 8,4,2,1,又称为 8421码。
3 2 7
BCD码优点:
1)建立了二进制与十进制的联系。
2)可按二进制规则运算,,加、减 6”修正后,即得十进制数。
BCD码有两种格式:
压缩的 BCD码, 用 四位 二进制数表示一位十进制数
例, (95)10 = (1001 0101)BCD
非压缩的 BCD码, 用 八位 二进制数表示一位十进制数
例, (95)10 = (00001001 00000101)BCD
ASCII码 可以看作一种非压缩的 BCD码,
例, ‘ 5’
=>
35H => (00110101)BCD
14
(5) 字符的编码
ASCII- American Standard Code for Information Interchange
标准的 ASCII码包含 128个基本字符,每个字符用一个 8位
二进制数表示。( 33个非打印字符,95个可打印字符)
标准的 ASCII码编码为:
0 ~ ( 127 )10
( 0000 0000 )2 ~ ( 0111 1111 )2
00H ~ 7FH
8位二进制数可表示数范围, 00 ~FFH
80H ~ FFH 作为 标准的 ASCII码的扩展编码部分,提供
一些其它字符,如制表符、希腊字母等。
编码方法, (P316)字符有序排列,位置固定,每个字符的 列号
写成 4位二进制数作为 高 4位,行号 写成 4位二进制数作为 低 4位,
二者合成一个 8位二进制数,构成一个字符的 ASCII码。
15 next
返回
‘A’ 41H
‘a’ 61H
‘0’ 30H
换行 0AH
回车 0DH
( 1) 汇编语言有显著的特点,有能力解决一些高
级语言不易解决的低层问题,具有不可取代的地位。
( 2)学习汇编语言会涉及到更多的计算机科学基础
知识,需要耐心和细致,通过学习汇编语言可以深
入了解计算机是如何完成复杂的操作和计算的。
( 3)要求 十分熟练 地掌握不同 进制的转换, 运算 及
编码 。重点是 二进制与十六进制的转换, 补码运算,
ASCII编码方案及应用,为后续学习和分析 汇编指令
功能 减少困难。
小 结
认真复习,熟练应用