Embed
Email

IBM-PC ????????

Document Sample
IBM-PC ????????
Shared by: HC11121314173
Categories
Tags
Stats
views:
0
posted:
12/13/2011
language:
pages:
60
IBM-PC 汇编语言程序设计

Assembly Language

Programming

计算机科学与工程系

徐光平

引言

Assembly Language

Programming

课程安排1

总学时:48学时

– 讲课:36学时,实验:12学时

学分:3

教科书:

– 8086/8088宏汇编语言程序设计教程(第二版)

王正智著 电子工业出版社

课程安排2

参考书:

– IBM-PC汇编语言程序设计(第2版)

作者: 沈美明 温冬婵 出版社: 清华大学出版社



– Intel汇编语言程序设计(第四版)

作者: (美)Kip R. Irvine 译者:温玉杰 张家生 罗云彬 出

版社: 电子工业出版社









– IBM PC 汇编语言程序设计(第五版)

人民邮电出版社

课程考核

考试课程

成绩计算:

– 平时:5%

– 作业:10%

– 实验:15%

– 考试:60%

学习技巧

汇编语言难吗???



语言类课程学习

– 养成自学的习惯

– 养成上机求证的习惯

– 做一定的练习

http://www.tjut.edu.cn:8080/xuebao/hbyy/



下面我们开始学习

什么是汇编语言?

机器特定的编程语言

– 该语言的语句和机器内在语言是一一对应的关系

– 该语言和机器的指令集、系统结构相匹配

程序设计的级别

– 机器语言

– 汇编语言

– 高级语言

IBM-PC 汇编语言

– 针对 8086, 8088, 80186, 80286, 80386, 80486, and

Pentium Processors

什么是汇编器?

系统级别的程序

– 负责将汇编语言编写的源代码翻译成机器语言

– 一般由软件开发商提供,例如我们所使用的

Microsoft 的MASM 6.11版本的编译器





– 源文件

– 目标文件

– 可执行文件

为什么要学习汇编语言?

能够学习到处理器是 能够创建小巧有效的

如何工作的 程序

理解计算机的基本系 允许程序员绕过高层

统结构 语言的限制编程

探究数据和指令的内 有些工作必须用汇编

部表述 语言完成

机器语言

数字表示的机器执行的指令集合,被称为

处理器指令集

– 处理器能够执行的基本指令的集合

每个指令被编码成为数字符号

指令可能占用一个或者多个字节

每个数字代表一个机器指令

IBM-PC机器指令举例

1011000000000101b or B005h



操作码 = 10110000b

– 含义:拷贝一个字节数据到AL寄存器中

字节数据由该指令的第二部分代表:

00000101b

汇编语言 vs. 机器语言编程

机器语言编程

– 编写一系列的数字符号表示程序执行所需的指

令和数据

汇编语言编程

– 采用符号指令表示,将翻译成机器语言程序和

数据常量

第1部分 软硬件基础知识





Assembly Language

Programming

编写汇编程序,需要计算机硬件和软件两方面的

知识。

该部分侧重于最为基础的硬件和软件知识介绍。

1 数据表示

Assembly Language

Programming

二进制数字

1101101b

– 数位从左到右依次排列 b6b5b4b3b2b1b0

– 下标表示位值(place value )

bi  2i

需要熟记各个位值

– 转换到十进制数的多项式

b6*26 + b5*25 +b4*24 +b3*23 +b2*22 +b1*21 + b0*20

In this case, 1101101b is

64+32+8+4+1 = 109d

十进制到二进制的转换

109d 转换到二进制-循环被2 109 / 2 = 54 r 1

除 54 / 2 = 27 r 0

– 余数作为数位值 27 / 2 = 13 r 1

– 直到0为止

13 / 2 = 6 r 1

将余数组合起来

6/2=3r0

– 第一位余数作为二进制数的最低

位 3/2=1r1

– 109d = 1101101b 1/2=0r1

十六进制数

0~9, A, B, C, D, E, F

注意:

– 数字以H结尾





大家思考:

– 为何引入十六进制数?

二进制和十六进制

Binary  Hex Hex  Binary

– 4位一组划分 (从最低位 – 相反的方法每个数字展

开始) 成4 bits

– 最后一组不足4位补0 可以忽略前面的若干的0



– 每组对应的数据转换成

对应的数字





0100 1110b = 4Eh

37h = 0011 0111b

二进制数据存储

存储数据的大小定义,通常

– 字节byte DB

– 字word DW

– 双字double word DD

– 四字quad word DQ

存储器中的每个字节都有唯一的地址

基本加法

Easy !! Hex Example:

c c

例如:

c c c c 3CF02 Watch Carries

0+0 = 0

10101 0+1 = 1 +435C9

+ 1111 1+0 = 1

804CB

1+1 = 10

100100 1+1+1 = 11

基本减法

Hex example:

b b b b b b b

A borrow

FCF02 1101000011

adds sixteen

-435C9 - 1101001

B9939 1011011010

字符数据ASCII

American Standard Code for Information

Interchange (ASCII)

– 7-bit 二进制码表示的128个字符

– 通常占用1字节

包括一些控制字符

– ASCII码的序列称为ASCII字符串

注:数字字符‘1’~‘9’的ASCII码值:

30~39

大家思考:

– 如何将ASCII码值和对应的数字相转换?

有符号数和无符号数

无符号数:所有位均为数据位

有符号数:最左边的位为符号位

– 例如:1111 1101 无符号数252,而有符号数为-7





格式 字节 字 双字



Max无符号数 255 / 28-1 216-1 232-1



Max有符号数 127 / 27-1 215-1 231-1

理解 Two’s Complement Code

补码的定义: Code for +107

[X]补 = (M + X) mod M 107d = 1101011b

code: 01101011 (6Bh)

其中:M= 2n

Code for -107

正数的编码无符号 -107 + 256 = 149

正数表示 149d = 10010101b

负数的编码其值加 code: 10010101b (95h)

上256后对应的正数编

码 大家计算

6Bh + 95h = ?

二进制补码转换

c 和 -c 的二进制补码

加和的值等于2的幂

– 8-bit code: c+(-c)=28

– 16-bit code: c+(-c)=216

求补码的方法1:

(-c) = 2n-c (-c) = 2n-c

= [(2n-1)-c]+1 求补码的方法2:

 翻转所有的位

加 1

解码二进制补码举例

0001,0110,1011,1000b 1110,1001,0100,1000b

以0开头表示正数 以1开头表示负数

– 简单地转换成十进制数 – 应用转换规则

– 转换成十进制数

- 0001,0110,1011,1000b

不要忘记负号!

补码的加减运算

加法运算 减法运算

1111,0000,1101 F23C F23C

+ 0111,0110,1001 - 2CF0 + D310

0110,0111,0110 ? C54C

结果为正数 结果为负数





请大家动手转换成十进制运算,检验结果

Wait……..

检验

Binary Dec Hex Decimal

1111,0000,1101 -243 F23C (-3524)

+0111,0110,1001 +1897 - 2CF0 - 11504

0110,0111,0110 1654 C54C - 15028





负数解码 对F23C解码:

1111,0000,1101 1111,0010,0011,1100

-(0000,1111,0011) -(0000,1101,1100,0100)

-243 -3524

算术进位

算术进位

无符号数 有符号数

1111 1100 252 - 4

CF = 1, OF = 0

+ 0000 0101 + 5 + 5

1 0000 0001 无效 1 有效 1



进位CF的设置,由符号位的运算进位0或1产生的。

对于无符号数,产生了数据位的进位而无效。

算术溢出

溢出的两情形:

无符号数 有符号数

0111 1001 121 +121

CF = 0, OF = 1

+ 0000 1011 + 11 + 11

1000 0100 有效 132 无效 -124

情形1:当符号位有进位输入,而没有进位输出时

无符号数 有符号数

1111 0110 +246 -10

CF = 1, OF = 1

+ 1000 1001 + 137 + -119

1 0111 1111 无效 127 无效 127



情形2:当进位输出不是由进位输入产生时

作业1

P11

– #2

– #3

– #6

– #7

2 IBM-PC 硬件

Assembly Language

Programming

处理器

8x86各种处理器的速度,寻址空间,寄存

器以及总线数据宽度不同。

8086

– 16bits registers, 1MB 内存空间,总线8位

8088

– 16位数据总线

80386

– 32位寄存器,32位总线,寻址4GB

Pentium

– 32位寄存器,64位数据总线

Intel 8086处理器的结构

8086 寄存器

寄存器 – 处理器中临时存储数据的地方

– 数据寄存器 (16-bit)

AX, BX, CX, DX

– 地址寄存器 (16-bit)

段寄存器: CS, SS, DS, ES

指针寄存器: SP, BP, IP

变址寄存器: SI, DI

– 状态寄存器 flag (16-bit)

通用数据寄存器

都是用来保存数据的, 各个寄存器的对应高

因此称为通用寄存器 低字节可单独使用

但各有用途 – AH, AL, BH, etc.

– AX : 累加

– BX : 基址 高8位 低8位

AH AL

– CX : 计数 AX



– DX : 数据 BX BH BL



CX CH CL

DX DH DL

内存组织

物理地址

8086寻址范围1MB (220

bytes) 10000H

10011111

每个字节的地址从 10001H

00100110

00000h 到 FFFFFh编码, 10002H

01001000

10003H

并且编址是唯一确定的 10000011 10004H

01011100 10005H

10100010







注意:由于各个寄存器为16位,而20位的地址的寻址通过16位的

寄存器完成。这是如何进行的呢?

数据寻址方式

段:偏移量寻址

– 段segment:一个存储区域,起始地址为能够

被16整除的地址,即后4位为0(通常不写)

– 偏移量:段范围内的存储单元相对于段起始地

址的数量,偏移量的范围从0000H到FFFFH

段:偏移量寻址



逻辑地址 物理地址

逻辑地址 = 段地址:偏移地址 段地址 : 偏移地址

1000 : 0000H 10000H

10011111

1000 : 0001H 10001H

00100110

物理地址=段地址×16 +偏移量 1000 : 0002H 01001000 10002H

1000 : 0003H 10003H

10000011 10004H

1000 : 0004H 01011100 10005H

1000 : 0005H 10100010

逻辑地址 vs. 物理地址



16 位 段 地 址 0000





+ 16 位 偏 移 地 址



20 位 物 理 地 址

段寄存器

代码段CS CS 0200H 存储器

对应执行的指令,起始 DS

地址对应第一条可执行 0400H

02000H

的指令 SS 0480H

数据段DS ES

8KB代码

对应程序的数据、常量



堆栈段SS 04000H

对应暂存任何数据,包 2KB数据

括子程序所用的数据

256堆栈 04800H

扩展段ES

对应于特殊的数据和操

作使用

CS寄存器和IP寄存器

CS register表示程序代码段的起始地址

IP寄存器包含要执行的下一指令的地址的偏

移量,和CS寄存器相关联

IP寄存器的内容是程序中不能修改的



大家思考:某条指令的地址为

CS: 394BH

IP:514H

实际的物理地址:?

SS寄存器和SP寄存器

SS寄存器保存了暂时的数据和地址段的起

始地址

SP堆栈指针保存了堆栈段的段内的偏移量,

也就是堆栈的当前顶部地址

上述两者结合起来

ES寄存器

扩展数据段一般用于字符串操作的寻址,

一般和DI寄存器相关联

BP 和 变址寄存器

BP为基址寄存器 SI 和 DI 称为变址寄存器

– 可指定为任何段的偏移 –作用1:保存相对于任何段

量,但缺省指的是堆栈 的偏移量,但通常缺省保

段 存相对于数据段的偏移量

–作用2:有时保存相对于数

组地址的索引数据

标志寄存器

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

OF DF IF TF SF ZF AF PF CF







标志寄存器保存了当前程序的执行状态

OF 溢出标志 DF 方向标志

SF 符号标志 IF 中断标志

ZF 零标志 TF 陷阱标志

CF 进位标志 PF 奇偶标志

AF 辅助进位标志

8086的系统启动

重置系统状态,执行的第一条指令位于FFFF0H

– CS = FFFFh

– IP = 0000h

– 其余各个寄存器清零

执行ROM中指令,进入BIOS程序的处理

– 系统内存检查

– 初始化中断向量表和相关数据

从磁盘中载入操作系统

– 位于磁盘的启动扇区

– DOS

载入执行command.com

80x86寄存器

31 16 15 8 7 0

EAX AH AX AL

EBX BH BX BL

ECX CH CX CL

EDX DH DX DL

ESP SP

8086 /

EBP BP

ESI SI 8088 /

EDI DI 80286





EIP IP

EFLAGS FLAGS 存



CS 器

DS

80x86的程序可见寄存器组 SS

通用寄存器 ES

专用寄存器 FS

GS

段寄存器

中断

中断:某些事件使得处理器挂起当前的操作,

并为引起中断的原因去作一些事情。

–有些原因是正常的,例如键盘输入请求;

–有些是非法的,例如除数为0的操作。

中断服务程序

堆栈Stack

LIFO 数据结构

– 支持 PUSH 和 POP 操作

作用

– 发生中断处理和过程调用时,保护当前执行的

现场;

– 过程返回时,依据堆栈保存的地址继续执行

堆栈的构造

堆栈是通过堆栈段寄存器和偏移量访问的

一段内存区域

–SS :指向了堆栈的开始地址

–SP :指向了堆栈的顶部





Stack Size: 000C





SS:0340 SP:000C

动作

PUSH: 压栈操作,减少SP

POP: 出栈操作,增加SP





Stack Size: 000C





SS:0340 SP:0008



PUSH

POP

PUSH

PUSH source

– source 指的是任何16/32位通用或者段寄存器,

或者字/双字的地址

PUSHF

– 将标志寄存器的内容压栈

动作:

– SP减去2/4

– 在SS:SP地址存放source数据

PUSH 举例

Stack Size: 000C

3C 09 A4 40 2C FF A2 43 07 06 4C 2A 09 46





SS:0340 SP:0008

PUSH AX

AX: 0123



3C 09 A4 40 2C FF A2 23 01 06 4C 2A 09 46





SS:0340 SP:0006

POP

POP destination

– destination指的是任何16/32位通用或者段寄存

器,或者字/双字的地址

POPF or POPFD

– 将标志寄存器的内容出栈,存入标志寄存器

动作:

– 将 SS:SP 地址的数据拷贝到destination

– SP加2/4

POP 举例

3C 09 A4 40 2C FF A2 23 01 06 4C 2A 09 46





SS:0340 SP:0006



POP ES



3C 09 A4 40 2C FF A2 23 01 06 4C 2A 09 46





SS:0340 SP:0008

ES: 0123

小节:复习题

1. The binary representation for decimal 58 is

(a) 01001001 (b) 00011001

(c) 00111010 (d) 01010100





2. The two's complement of binary 11010001 is

(a) 10110111 (b) 11001000

(c) 00101111 (d) 01010100

3. The general purpose registers are

(a) AX, BX, CX, DX (b) SP, BP, IP

(c) DI, SI (d) CS, DS, ES, SS





4. The index registers are the

(a) AX, BX, CX, DX (b) SP, BP, IP

(c) DI, SI (d) CS, DS, ES, SS

5. 若栈顶的物理地址为20100H,当执行完指令PUSH AX后,栈顶的物

理地址为( )。

A. 20102H B. 20101H C. 200FFH D. 200FEH





6. 已知: BX=1234H, BP=5678H, SI=1357H, DS=0925H, SS=0468H,

CS=4B10H,指出下述指令中存储器操作数的有效地址和实际地址。

(1) MOV AL, [BX]





(2) MOV BH, CS:[SI]





(3) MOV CH, [BP+20H]





(4) MOV CL, SS:[SI+50H]


Other docs by HC11121314173
List aloja alfabeb
Views: 5  |  Downloads: 0
Sheet 5
Views: 3  |  Downloads: 0
AZ?RBAYCAN D�VL?T AQRAR UNIVERSITETI*
Views: 16  |  Downloads: 0
Traitements d'images et Vision par ordinateur
Views: 2  |  Downloads: 0
PROJET GRAND STADE DE L�OLYMPIQUE LYONNAIS
Views: 1  |  Downloads: 0
Sheet1 - TRU toolkit
Views: 4  |  Downloads: 0
6611 Net Sec
Views: 3  |  Downloads: 0
APROVADOS_EM_EXCEL_PARA_ADILSON
Views: 608  |  Downloads: 0
By registering with docstoc.com you agree to our
privacy policy

You are almost ready to download!

You are almost ready to download!