汇编语言程序设计
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Ch1 基础知识
5
安徽理工大学 计算机科学与技术系
李敬兆
《汇编语言》
汇编语言的特点 面向机器的低级语言,通常是为特定的计算 机或计算机系列专门设计的。 保持了机器语言的优点,具有直接和简捷 的特点。
可有效地访问、控制计算机的各种硬件设备, 如磁盘、存储器、CPU、I/O端口等。
目标代码简短,占用内存少,执行速度快, 是高效的程序设计语言。 经常与高级语言配合使用,应用十分广泛。
Ch1 基础知识
18
安徽理工大学 计算机科学与技术系
李敬兆
《汇编语言》
十六进制
十进制
BF3CH = 11163 +15162 +3161 +12160 = 48956D 降幂法 除法
例:399D = ? H 399 143 - - 16n 256 16
15 - 1
399/16→24/16→1/16→ 0 ↓ ↓ ↓ F 8 1
如果将十六进制转成二进制数,只要每一位十六进制数用四位 二进制数表示即可。
Ch1 基础知识 16
安徽理工大学 计算机科学与技术系
李敬兆
《汇编语言》
二进制
二进制 二进制
十进制
十进制 1011B = 23+21+20=11D 十进制
降幂法
除法
3 - 2 1 1 - 1 1
例: 27D = ? B 27 11 3 - - 2n 16 8 4 1 1 0
ends
end start
安徽理工大学 计算机科学与技术系
李敬兆
《汇编语言》
建议
●充分注意“汇编”课实践性强的特点, ●多读程序,多写程序,多上机调试程序, ●熟悉PC机的编程结构, ●掌握汇编语言及其程序设计的基本概 念、方法和技巧。
安徽理工大学 计算机科学与技术系
李敬兆
《汇编语言》
第1章 基 础 知 识
安徽理工大学 计算机科学与技术系
李敬兆
《汇编语言》
高级语言
汇编语言虽然较机器语言直观,但仍然烦琐难 懂。于是人们研制出了高级程序设计语言。高级程 序设计语言接近于人类自然语言的语法习惯,与计 算机硬件无关,易被用户掌握和使用。 目前广泛 应用的高级语言有多种,如BASIC、FORTRAN、 PASCAL、C、C++等等。
符号位
数值位
假设机器字长为16位:
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 H.O.Byte L.O.Byte
符号位 = 0 正数 = 1 负数
数值位
安徽理工大学 计算机科学与技术系
李敬兆
《汇编语言》
数的常用表示法 —— 原码
原码表示法:符号 + 绝对值
例:n = 8bit [+3]原码 = [- 3]原码 = [+0]原码 = [- 0]原码 =
∴ 27D = 11011B
安徽理工大学 计算机科学与技术系
李敬兆
《汇编语言》
十进制转换成二进制 方法:对于整数部分除2取余法,小数部分采用乘2取整法 例:117.8125D = 1110101.1101B
2 117 2 58 … … 1 2 29 … … 0 2 14 … … 1 2 7……0 2 3……1 2 1……1 0……1 0.8125 × 2 1.625 … … 1 × 2 1.25 … … 1 ×2 0.5 … … 0 ×2 1.0 … … 1
安徽理工大学 计算机科学与技术系
李敬兆
《汇编语言》
十六进制和二进制的相互转换
方法:对于二进制整数,只要从右到左每4位组成一组,不足4位最左 边补0,即可得到相应的十六进制。对于二进制小数,只要从左到右每 4位组成一组,不足4位最右边补0,即可得到相应的十六进制。
补0
0 111 1101. 0101 11 0 0 补0 7 D 5 C ∴ (1111101.0101111)2 = (7D.5C)16
data
ends
code
main
segment
proc far assume cs:code, ds:data, es:data
汇编后的目 标文件只有 208字节
start:
push sub push mov mov mov ds ax,ax ax ax,data ds,ax es,ax main
code
安徽理工大学 计算机科学与技术系
李敬兆
《汇编语言》
二进制
十六进制
0011 0101 1011 1111 3 5 B F ∴ 0011,0101,1011,1111B = 35BFH A 1 9 C
1010 0001 1001 1100 ∴ A19CH = 1010,0001,1001,1100B
例: 机器字长8位,[- 46]补码 = ? [46]补码 = 0 0 1 0 1 1 1 0 按位求反 1101 0001 末位加一 1 1 0 1 0 0 1 0 = D2H 机器字长16位,[- 46]补码 = FFD2H [+0]补码 = 0 0 0 0 0 0 0 0 按位求反 1111 1111 末位加一 0 0 0 0 0 0 0 0 = [- 0]补码
安徽理工大学 计算机科学与技术系
李敬兆
《汇编语言》
编程实现 c =a+b,并在屏幕上显示出结果。
例1
#include "stdafx.h" #include "stdio.h" int main(int argc, char* argv[]) { int a,b,c; a=1; 编译后的目标文 b=2; 件达到3.59KB c=a+b; printf(“c=%d\n",c); return 0; }
Ch1 基础知识
3
安徽理工大学 计算机科学与技术系
李敬兆
《汇编语言》
汇编语言
为了克服机器语言的缺点,人们采用助记符表示机 器指令的操作码,用变量代替操作数的存放地址等,这 样就形成了汇编语言。所以汇编语言是一种用符号书 写的、基本操作与机器指令相对应的、并遵循一定语 法规则的计算机语言。 用汇编语言编写的程序称为汇编源程序。 汇编语言是一种符号语言,比机器语言容易理解和 掌握,也容易调试和维护。但是,汇编语言源程序要 翻译成机器语言程序才可以由计算机执行。这个翻译 的过程称为“汇编”,这种把汇编源程序翻译成目标 程序的语言加工程序称为汇编程序。 4 Ch1 基础知识
1
8
F
∴ 399D = 18FH
安徽理工大学 计算机科学与技术系
李敬兆
《汇编语言》
1.2 运算(算术运算)
二进制数:逢二进一 借一为二
加法规则 0+0=0 0+1=1 1+0=1 1 + 1 = 0 (进位1) 乘法规则 00=0 01=0 10=0 11=1
安徽理工大学 计算机科学与技术系
安徽理工大学 计算机科学与技术系
李敬兆
《汇编语言》
• 任何进制的数都可用如下方法表示: n 其中:K 是任一个数码; N= ± Ki * ri i i=-m
ri是各位对应的权 r 是基数
Ch1 基础知识
13
安徽理工大学 计算机科学与技术系
李敬兆
《汇编语言》
1.1.2 数制之间的转换 二进制 十进制 十进制 十六进制 二进制 十六进制 降幂法 除法
数制 数制之间的转换 运算 数和字符的表示
安徽理工大学 计算机科学与技术系
李敬兆
《汇编语言》
预 备 知 识
存储容量
1K = 1024B = 210 (Kilo) 1M = 1024K = 220 (Mega) 1G = 1024M = 230 (Giga)
1个二进制位:bit (比特) 8个二进制位:Byte (字节) 1Byte = 8bit 2个字节: Word (字) 1Word = 2Byte = 16bit
李敬兆
《汇编语言》
十六进制数:逢十六进一 借一为十六
0 5 C 3
+
H H
-
3 D 2 5 0 5 C 3
-
1
H H
31 D 2 5
4 2 E 8
H
3 7 6 2
H
安徽理工大学 计算机科学与技术系
李敬兆
《汇编语言》
1.3 计算机中数和字符的表示
计算机中正负数的表示
假设机器字长为8位:
7 6 5 4 3 2 1 0
0 000,0101 1 111,1010 0 000,0000 1 111,1111
= = = =
05H FAH 00H FFH
0 的表示不惟一
安徽理工大学 计算机科学与技术系
李敬兆
《汇编语言》
补码(Two’s Complement)表示法:
正数的补码: 同原码 负数的补码:(1)写出与该负数相对应的正数的补码 (2)按位求反 (3)末位加一
安徽理工大学 计算机科学与技术系
李敬兆
《汇编语言》
1. 1 数 制与转换
1.1.1 数 制
数 制 基数 数 码
二进制
八进制 十进制
Binary
Octal Decimal
2
8 10
0, 1
0, 1, 2, 3, 4, 5, 6, 7 0, 1, 2, 3, 4, 5, 6, 7, 8, 9
十六进制 Hexadecimal
无符号整数的表数范围: 0 ≤ N ≤ 2n-1
安徽理工大学 计算机科学与技术系
李敬兆
《汇编语言》
补码的加法和减法:
求补运算 :对一个二进制数按位求反、末位加一
求补 求补
[X]补码 [-X]补码 [X]补码 加法规则:[X+Y]补码 = [X]补码 + [Y]补码
安徽理工大学 计算机科学与技术系
Leabharlann Baidu
李敬兆
《汇编语言》
IBM—PC汇编语言 程序设计(第二版)
主讲 李敬兆
Ch1 基础知识
1
安徽理工大学 计算机科学与技术系
李敬兆
《汇编语言》
计算机语言的发展
机器语言
高级语言
FORTRAN
BASIC
COBOL PASCAL
汇编语言
C/C++ JAVA
...
Ch1 基础知识
安徽理工大学 计算机科学与技术系
李敬兆
《汇编语言》
例 2.
data
a b c string
C = a + b
segment
db db db db ? ? ? 'c=$' mov mov mov add mov lea mov int add mov mov int mov int mov int ret endp a,1 b,2 al,a al,b c,al dx,string ah,09 21h c,30h dl,c ah,2 21h dl,0ah 21h dl,0dh 21h
反码
补码
0 000,0011 1 000,0011 0 000,0000 1 000,0000
= = = =
03H 83H 00H 80H
0 的表示不惟一
反码表示法:正数的反码同原码,负数的反码数值位与原码相反
例:n = 8bit [+5]反码 = [- 5]反码 = [+0]反码 = [- 0]反码 =
0 的表示惟一
安徽理工大学 计算机科学与技术系
李敬兆
《汇编语言》
n位二进制补码的表数范围: - 2n-1 ≤ N ≤ 2n-1-1
十进制 +127 +126 ... +2 +1 0 -1 -2 ... -126 -127 -128 二进制 n=8 0111 1111 0111 1110 ... 0000 0010 0000 0001 0000 0000 1111 1111 1111 1110 ... 1000 0010 1000 0001 1000 0000 十六进制 7F 7E … 02 01 00 FF FE … 82 81 80 十进制 n=16 +32767 +32766 … +2 +1 0 -1 -2 … -32766 -32767 -32768 7FFF 7FFE ... 0002 0001 0000 FFFF FFFE ... 8002 8001 8000 十六进制
16
0, 1, 2, 3, 4, 5, 6, 7, 8, 9,
A, B, C, D, E, F
二进制:
基数为2,逢二进一
11012 = 1×2 3 + 1×2 2 + 1×2 0 = 1310
十六进制:基数为16,逢十六进一
1001, 0001, 1000, 0111 9 = 1 8 7
9 ×16 3 + 1 ×16 2 + 8 ×16 1 + 7 ×16 0
2
安徽理工大学 计算机科学与技术系
李敬兆
《汇编语言》
机器语言 •
计算机能够直接识别的数据是由二进制数0 和1组成的代码。机器指令就是用二进制代码组 成的指令,一条机器指令控制计算机完成一个基 本操作。 • 用机器语言编写的程序是计算机惟一能够 直接识别并执行的程序,而用其他语言编写的程 序必须经过翻译才能变换成机器语言程序,所以, 机器语言程序被称为目标程序。