Top Banner
Ch1 基基基基 1 安安安安安安 安安安安安安安安安 安安安 安安安安安 《》 IBM—PC 安安安安 安安安安 ( 安安安 ) 安安 安安安
33

IBM — PC 汇编语言 程序设计 ( 第二版 )

Jan 04, 2016

Download

Documents

ingrid-pate

IBM — PC 汇编语言 程序设计 ( 第二版 ). 主讲 李敬兆. 高级语言. 汇编语言. 计算机语言的发展. 机器语言. FORTRAN BASIC COBOL PASCAL C/C++ JAVA. 机器语言. 计算机能够直接识别的数据是由二进制数 0 和 1 组成的代码。机器指令就是用二进制代码组成的指令 ,一条机器指令控制计算机完成一个基本操作。 用机器语言编写的程序是计算机惟一能够直接识别并执行的程序 ,而用其他语言编写的程序必须经过翻译才能变换成机器语言程序,所以,机器语言程序被称为 目标程序 。. 汇编语言. - PowerPoint PPT Presentation
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: IBM — PC 汇编语言 程序设计 ( 第二版 )

Ch1 基础知识 1

安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》

IBM—PC 汇编语言程序设计 ( 第二版 )

主讲 李敬兆

Page 2: IBM — PC 汇编语言 程序设计 ( 第二版 )

Ch1 基础知识 2

安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》

计算机语言的发展

机器语言 FORTRAN

BASIC

COBOL

PASCAL

C/C++

JAVA

...

汇编语言

高级语言

Page 3: IBM — PC 汇编语言 程序设计 ( 第二版 )

Ch1 基础知识 3

安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》

• 计算机能够直接识别的数据是由二进制数计算机能够直接识别的数据是由二进制数 00和和 11 组成的代码。机器指令就是用二进制代码组组成的代码。机器指令就是用二进制代码组成的指令成的指令,一条机器指令控制计算机完成一个基本操作。• 用机器语言编写的程序是计算机惟一能够用机器语言编写的程序是计算机惟一能够直接识别并执行的程序直接识别并执行的程序,而用其他语言编写的程序必须经过翻译才能变换成机器语言程序,所以,机器语言程序被称为目标程序。

机器语言

Page 4: IBM — PC 汇编语言 程序设计 ( 第二版 )

Ch1 基础知识 4

安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》

为了克服机器语言的缺点,人们采用助记符助记符表示机器指令的操作码 ,用变量变量代替操作数的存放地址等,这样就形成了汇编语言。所以所以汇编语言是一种用符号汇编语言是一种用符号书写的、基本操作与机器指令相对应的、并遵循一定书写的、基本操作与机器指令相对应的、并遵循一定语法规则的计算机语言。语法规则的计算机语言。 用汇编语言编写的程序称为汇编源程序用汇编语言编写的程序称为汇编源程序。。 汇编语言是一种符号语言,比机器语言容易理解和掌握,也容易调试和维护。但是,汇编语言源程序要汇编语言源程序要翻译成机器语言程序才可以由计算机执行翻译成机器语言程序才可以由计算机执行。这个翻译的过程称为“汇编汇编”,这种把汇编源程序翻译成目标把汇编源程序翻译成目标程序的语言加工程序称为程序的语言加工程序称为汇编程序汇编程序。

汇编语言

Page 5: IBM — PC 汇编语言 程序设计 ( 第二版 )

Ch1 基础知识 5

安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》

汇编语言虽然较机器语言直观,但仍然烦琐难懂。于是人们研制出了高级程序设计语言。高级程高级程序设计语言接近于人类自然语言的语法习惯,与计序设计语言接近于人类自然语言的语法习惯,与计算机硬件无关,易被用户掌握和使用算机硬件无关,易被用户掌握和使用。 目前广泛应用的高级语言有多种,如 BASICBASIC 、、 FORTRANFORTRAN 、、 PAPASCALSCAL 、、 CC 、、 C++C++ 等等。

高级语言高级语言

Page 6: IBM — PC 汇编语言 程序设计 ( 第二版 )

汇编语言的特点 面向机器的低级语言面向机器的低级语言,通常是为特定的计算 机或计算机系列专门设计专门设计的。 保持了机器语言的优点保持了机器语言的优点,具有直接和简捷直接和简捷 的特点。 可有效地访问、控制计算机的各种硬件设备可有效地访问、控制计算机的各种硬件设备 , 如磁盘、存储器、 CPU 、 I/O 端口等。 目标代码简短,占用内存少,执行速度快目标代码简短,占用内存少,执行速度快, 是高效高效的程序设计语言。

经常与高级语言配合使用经常与高级语言配合使用,应用十分广泛。

安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》

Page 7: IBM — PC 汇编语言 程序设计 ( 第二版 )

#include "stdafx.h" #include "stdio.h" int main(int argc, char* argv[]) { int a,b,c; a=1;

b=2; c=a+b; printf(“c=%d\n",c); return 0;

}

编程实现 编程实现 c =a+bc =a+b ,并在屏幕上显示出结果。 ,并在屏幕上显示出结果。

例例 11

编译后的目标文编译后的目标文件达到件达到 3.59KB3.59KB

安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》

Page 8: IBM — PC 汇编语言 程序设计 ( 第二版 )

8Ch1 基础知识

data segmenta db ?b db ?c db ?string db 'c=$'data ends

code segmentmain proc far assume cs:code, ds:data, es:datastart: push ds sub ax,ax push ax mov ax,data mov ds,ax mov es,ax

mov a,1 mov b,2 mov al,a add al,b mov c,al lea dx,string mov ah,09 int 21h add c,30h mov dl,c mov ah,2 int 21h mov dl,0ah int 21h mov dl,0dh int 21h retmain endpcode ends end start

例 2. C = a + b

汇编后的目汇编后的目标文件只有标文件只有 220808 字节字节

安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》

Page 9: IBM — PC 汇编语言 程序设计 ( 第二版 )

建议 ●充分注意“汇编”课实践性强的特点, ●多读程序 ,多写程序 ,多上机调试程序 , ●熟悉 PC 机的编程结构, ●掌握汇编语言及其程序设计的基本概 念、方法和技巧。

安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》

Page 10: IBM — PC 汇编语言 程序设计 ( 第二版 )

第 1 章 基 础 知 识

数制 数制之间的转换 运算 数和字符的表示

安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》

Page 11: IBM — PC 汇编语言 程序设计 ( 第二版 )

预 备 知 识存储容量1K = 1024B = 210 ( Kilo ) 1M = 1024K = 220 ( Mega ) 1G = 1024M = 230 ( Giga )

1 个二进制位: bit (比特)8 个二进制位: Byte (字节) 1Byte = 8bit2 个字节: Word (字) 1Word = 2Byte = 16bit

安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》

Page 12: IBM — PC 汇编语言 程序设计 ( 第二版 )

1.1.1 数 制 数 制 基 数 数 码 二进制二进制 BinaryBinary 2 0, 1

八进制八进制 OctalOctal 8 0, 1, 2, 3, 4, 5, 6, 7

十进制十进制 DecimalDecimal 10 0, 1, 2, 3, 4, 5, 6, 7, 8, 9

十六进制十六进制 HexadecimalHexadecimal 16 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,

A, B, C, D, E, F

二进制: 基数为二进制: 基数为 22 ,逢二进一,逢二进一 11012 = 1×2 3 + 1×2 2 + 1×2 0 = 1310

十六进制:基数为十六进制:基数为 1616 ,逢十六进一,逢十六进一 1001, 0001, 1000, 0111

9 1 8 7

= 9 ×16 3 + 1 ×16 2 + 8 ×16 1 + 7 ×16 0

安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》

1. 1 . 1 数 制与转换数 制与转换

Page 13: IBM — PC 汇编语言 程序设计 ( 第二版 )

Ch1 基础知识 13

安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》

• 任何进制的数都可用如下方法表示任何进制的数都可用如下方法表示:

N = ± Ki * ri 其中: KKi i

是任一个数码;是任一个数码;

rrii 是各位对应的权是各位对应的权

r r 是基数是基数

n

i=-m

Page 14: IBM — PC 汇编语言 程序设计 ( 第二版 )

1.1.2 数制之间的转换

二进制 十六进制二进制 十六进制

十进制 二进制十进制 二进制

十进制 十六进制十进制 十六进制

降幂法 除法降幂法 除法

安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》

Page 15: IBM — PC 汇编语言 程序设计 ( 第二版 )

二进制二进制 十六进制十六进制

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

安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》

Page 16: IBM — PC 汇编语言 程序设计 ( 第二版 )

Ch1 基础知识 16

安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》

十六进制和二进制的相互转换

方法:对于二进制整数,只要从右到左每 4 位组成一组,不足 4 位最左边补 0 ,即可得到相应的十六进制。对于二进制小数,只要从左到右每4 位组成一组,不足 4 位最右边补 0 ,即可得到相应的十六进制。

0 111 1101. 0101 11 0 0

7 D 5 C

∴ ( 1111101.0101111 ) 2 = ( 7D.5C ) 16

如果将十六进制转成二进制数,只要每一位十六进制数用四位二进制数表示即可。

补 0 补 0

Page 17: IBM — PC 汇编语言 程序设计 ( 第二版 )

降幂法 除法降幂法 除法 例: 27D = ? B

2727 11 3 3 1 11 3 3 1

- - - - 2n 16 8 4 2 116 8 4 2 1

1 1 0 1 1

∴ 2727D = 1101111011B

二进制二进制 十进制十进制

安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》

二进制二进制 十进制十进制

1011B = 23+21+20=11D

二进制二进制 十进制十进制

Page 18: IBM — PC 汇编语言 程序设计 ( 第二版 )

Ch1 基础知识 18

安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》

十进制转换成二进制

方法:对于整数部分除 2 取余法,小数部分采用乘 2 取整法

例例: 117.8125D = 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 11.625 … … 1 × 2 11.25 … … 1 × 2 0.5 … … 0 ×2 11.0 … … 1

1110101.1101B

Page 19: IBM — PC 汇编语言 程序设计 ( 第二版 )

十六进制 十进制

BF3CH = 11163 +15162 +3161 +12160

= 48956D 降幂法 除法 例: 399D = ? H 399 143 15143 15 399/16→24/16→1/16→

0 - - - ↓ ↓ ↓ 16n 256 16 1256 16 1 F 8 1

1 8 F ∴ 399D = 18FH

安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》

Page 20: IBM — PC 汇编语言 程序设计 ( 第二版 )

二进制数:逢二进一 借一为二

加法规则 乘法规则 0 + 0 = 0 0 0 = 0

0 + 1 = 1 0 1 = 0

1 + 0 = 1 1 0 = 0

1 + 1 = 0 (进位 1 ) 1 1 = 1

1.2 运算(算术运算) 安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》

Page 21: IBM — PC 汇编语言 程序设计 ( 第二版 )

0 5 C 3 H

3 D 2 5 H

4 2 E 8 H

3 D 2 5 H

0 5 C 3 H

3 7 6 2 H

-1

-1

十六进制数:逢十六进一 借一为十六

安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》

Page 22: IBM — PC 汇编语言 程序设计 ( 第二版 )

1.3 计算机中数和字符的表示 计算机中正负数的表示

7 6 5 4 3 2 1 0

符号位 数值位

假设机器字长为 16 位:

符号位 = 0 正数 数值位

= 1 负数

15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0

假设机器字长为 8 位:

H.O.Byte L.O.Byte

安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》

Page 23: IBM — PC 汇编语言 程序设计 ( 第二版 )

数的常用表示法 —— 原码 反码 补码原码 反码 补码

原码表示法:符号 符号 + + 绝对值绝对值

例: n = 8bit

[+3] 原码 = 0 000,0011 = 03H

[- 3] 原码 = 1 000,0011 = 83H

[+0] 原码 = 0 000,0000 = 00H

[- 0] 原码 = 1 000,0000 = 80H 0 0 的表示不惟一的表示不惟一

反码表示法:正数的反码同原码,负数的反码数值位与原码相反正数的反码同原码,负数的反码数值位与原码相反

例: n = 8bit

[+5] 反码 = 0 000,0101 = 05H

[- 5] 反码 = 1 111,1010 = FAH

[+0] 反码 = 0 000,0000 = 00H

[- 0] 反码 = 1 111,1111 = FFH 0 0 的表示不惟一的表示不惟一

安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》

Page 24: IBM — PC 汇编语言 程序设计 ( 第二版 )

例: 机器字长 8 位, [- 46] 补码 = ? [46][46] 补码补码 = 0 0 1 0 1 1 1 0

1 1 0 1 0 0 0 1

1 1 0 1 0 0 1 0 = D2H

机器字长机器字长 1616 位,位, [- 46][- 46] 补码 补码 = FFD2H= FFD2H

[+0] 补码 = 0 0 0 0 0 0 0 0

1 1 1 1 1 1 1 1

0 0 0 0 0 0 0 0 = [- 0] 补码

0 的表示惟一

按位求反末位加一

按位求反末位加一

补码补码(( Two’s ComplementTwo’s Complement ))表示法:表示法:

正数的补码: 同原码正数的补码: 同原码负数的补码负数的补码:(( 11 ))写出与该负数相对应的正数的补码写出与该负数相对应的正数的补码

(( 22 ))按位求反按位求反 (( 33 ))末位加一末位加一

安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》

Page 25: IBM — PC 汇编语言 程序设计 ( 第二版 )

十进制 二进制 十六进制 十进制 十六进制

n=8 n=16 +127 0111 1111 7F+127 0111 1111 7F +32767 7FFF +126 0111 1110 7E +32766 7FFE ... ... … … ... +2 0000 0010 02 +2 0002 +1 0000 0001 01 +1 0001 0 0000 0000 00 0 0000 -1 1111 1111 FF -1 FFFF -2 1111 1110 FE -2 FFFE ... ... … … ...-126 1000 0010 82 -32766 8002-127 1000 0001 81 -32767 8001-128 1000 0000 80-128 1000 0000 80 -32768 8000

nn 位二进制补码的表数范围:位二进制补码的表数范围: - 2- 2n-1 n-1 ≤ N ≤ 2≤ N ≤ 2n-1n-1-1-1

无符号整数的表数范围:无符号整数的表数范围: 0 ≤ N 0 ≤ N ≤ 2 ≤ 2nn-1-1

安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》

Page 26: IBM — PC 汇编语言 程序设计 ( 第二版 )

补码的加法和减法:

求补运算 :对一个二进制数按位求反、末位加一 求补 求补

[X] 补码 [-X] 补码 [X] 补码

加法规则: [X+Y] 补码 = [X] 补码 + [Y] 补码

减法规则: [X-Y] 补码 = [X] 补码 + [-Y] 补码

补码减法可转换为补码加法

64

(-46)(-46)

1818

0100 0000

1101 00101101 0010

0001 00100001 0010

例:

安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》

Page 27: IBM — PC 汇编语言 程序设计 ( 第二版 )

进位和溢出进位和溢出进位进位 :: 由于运算结果超出了位数 , 最高有效位向前的进位,

这一位自然丢失,一般不表示结果的对错。

溢出:溢出:表示结果超出了字长允许表示的范围, 一般会造成结果出错。

例: ( - 64) 11000000 127 01111111

+ 64 01000000 + 1 00000001

0 11 00000000 128 10000000

进位 溢出

安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》

Page 28: IBM — PC 汇编语言 程序设计 ( 第二版 )

字符的表示

ASCII 码:

用一个用一个字节字节来表示一个字符,低来表示一个字符,低 77 位位为字符的为字符的 ASCIIASCII 值值,,最高位一般用作校验最高位一般用作校验位。位。

例: ‘ A’ 41H ‘a’ 61H ‘1’ 31H 换行 0AH 回车 0DH 空格 20H

安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》

Page 29: IBM — PC 汇编语言 程序设计 ( 第二版 )

Ch1 基础知识 29

安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》

BCD 码

BCD ( Binary-Coded Decimal )码又称为“二—十进制编码”,专门解决用二进制数表示十进数的问题。最常用的是8421 编码,其方法是用 4位二进制数表示 1 位十进制数,自左至右每一位对应的位权是 88、、 44 、、 22、、 11 。。

Page 30: IBM — PC 汇编语言 程序设计 ( 第二版 )

Ch1 基础知识 30

安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》

BCD 码有两种格式:( 1 )压缩压缩 BCD 码格式( Packed BCD Format ) 用 4 个二进制位表示一个十进制位,就是用 0000B-10

01B 来表示十进制数 0-9 。例如:十进制数 4256 的压缩BCD 码表示为: 0100 0010 0101 0110 B

( 2 )非压缩非压缩 BCD 码格式( Unpacked BCD Format ) 用 8 个二进制位表示一个十进制位,其中,高四位无意义,我们一般用 xxxx 表示,低四位和压缩 BCD 码相同。 例如:十进制数 4256 的非压缩 BCD 码表示为: xxxx0100 xxxx0010 xxxx0101 xxxx0110 B

Page 31: IBM — PC 汇编语言 程序设计 ( 第二版 )

1.4 1.4 逻辑运算逻辑运算(按位操作)“ 与”运算( ANDAND ) “或”运算( OROR)

A B AABB A B AABB 0 0 0 0 0 0 0 1 0 0 1 1 1 0 0 1 0 1 1 1 1 1 1 1

“非”运算( NOTNOT )

“异或”运算( XORXOR ) A AA A B AABB

0 1 0 0 0 1 0 0 1 1 1 0 1 1 1 0

安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》

Page 32: IBM — PC 汇编语言 程序设计 ( 第二版 )

例: X=00FFH Y=5555H ,求 Z=XY= ?

X= 0000 0000 1111 1111 B

Y= 0101 0101 0101 0101 B

Z= 0101 0101 1010 1010 B

Z=55AAH

安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》

Page 33: IBM — PC 汇编语言 程序设计 ( 第二版 )

第 1 章作业

Page 14 1.2 (1) 1.2 (1) 、 、 (3)(3)

1.3 (1) 1.3 (1) 、 、 (3) (3)

1.5 (1) 1.5 (1) 、 、 (3) (3) 、 、 (5)(5)

1.81.8

安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》