微机原理与接口技术 第三章 汇编语言基础 · 微机原理与接口技术 第三章...

37
微机原理与接口技术 第三章 汇编语言基础 董明皓 [email protected] 2020

Transcript of 微机原理与接口技术 第三章 汇编语言基础 · 微机原理与接口技术 第三章...

Page 1: 微机原理与接口技术 第三章 汇编语言基础 · 微机原理与接口技术 第三章 汇编语言基础 ... 微机原理与系统设计 汇编语言基础 董明皓 dminghao@xidian.edu.cn.

微机原理与接口技术

第三章 汇编语言基础

董明皓

[email protected]

2020版

Page 2: 微机原理与接口技术 第三章 汇编语言基础 · 微机原理与接口技术 第三章 汇编语言基础 ... 微机原理与系统设计 汇编语言基础 董明皓 dminghao@xidian.edu.cn.

汇编语言程序设计基础1

2

3

循环程序设计技术4

子程序设计技术5

源程序的汇编、链接和调试

分支程序设计技术

微机原理与系统设计 8086CPU的指令系统 董明皓 [email protected]

Page 3: 微机原理与接口技术 第三章 汇编语言基础 · 微机原理与接口技术 第三章 汇编语言基础 ... 微机原理与系统设计 汇编语言基础 董明皓 dminghao@xidian.edu.cn.

汇编语言基本概念1

2

3

8086的六类指令4

总结5

汇编语言指令分类

数据与转移地址的寻址方式

汇编语言程序设计基础

微机原理与系统设计 汇编语言基础 董明皓 [email protected]

Page 4: 微机原理与接口技术 第三章 汇编语言基础 · 微机原理与接口技术 第三章 汇编语言基础 ... 微机原理与系统设计 汇编语言基础 董明皓 dminghao@xidian.edu.cn.

1. 汇编语言基本概念

什么是机器语言 ?

人向机器发送号令,让机器能读懂的语言

机器能读懂什么语言 ?

01011101100010100…….

10110000B00010010B ; 告诉CPU将AL 12H。

例如:

微机原理与系统设计 汇编语言基础 董明皓 [email protected]

Page 5: 微机原理与接口技术 第三章 汇编语言基础 · 微机原理与接口技术 第三章 汇编语言基础 ... 微机原理与系统设计 汇编语言基础 董明皓 dminghao@xidian.edu.cn.

1. 汇编语言基本概念

汇编语言与机器语言属于低级语言,它们与高级语言有较大的区别,汇编语言中的语句与机器的型号密切相关 。

在高级语言中,完成某个加法功能,我们可采用语句 X=A+B ,只要给变量A和B赋一确

定值,此加法就可以实现了。在汇编语言中则不同,程序必须指出A、B存放在何处,相加后的结果又存放在何处。

高级语言告诉机器做什么,汇编语言告诉机器怎么做!

微机原理与系统设计 汇编语言基础 董明皓 [email protected]

Page 6: 微机原理与接口技术 第三章 汇编语言基础 · 微机原理与接口技术 第三章 汇编语言基础 ... 微机原理与系统设计 汇编语言基础 董明皓 dminghao@xidian.edu.cn.

1. 汇编语言基本概念

汇编 翻译官:把助记符翻译成机器语言

汇编:把汇编语言源程序翻译成机器语言程序的过程

汇编程序:能把汇编语言源程序翻译成机器语言程序的系统程序(语言加工程序)。

8086宏汇编程序为MASM.EXE。

微机原理与系统设计 汇编语言基础 董明皓 [email protected]

Page 7: 微机原理与接口技术 第三章 汇编语言基础 · 微机原理与接口技术 第三章 汇编语言基础 ... 微机原理与系统设计 汇编语言基础 董明皓 dminghao@xidian.edu.cn.

1. 汇编语言基本概念

如:

机器语言程序

汇编程序为MASM.EXE

源程序

MOV AL , 12HADD AX, 21HPUSH AXMOV BL, 0FFHAND BL, ALPOP AX

B0 1204 2150B3 FF20 C358

汇编

反汇编

在DEBUG.EXE下进行

H省去,默认有H

微机原理与系统设计 汇编语言基础 董明皓 [email protected]

Page 8: 微机原理与接口技术 第三章 汇编语言基础 · 微机原理与接口技术 第三章 汇编语言基础 ... 微机原理与系统设计 汇编语言基础 董明皓 dminghao@xidian.edu.cn.

3.4 汇编语言程序设计的基本步骤

1. 分析问题:从实际问题中提取数据模型,明确任务要求

就目的

2. 确定算法:找出解决方案,确定算法,画出程序流程图

3. 编写程序:根据流程图及汇编语言系统,采用汇编语言

编程(写出用户代码)

4. 检验程序:上机调试

5. 编写软件说明:编写软件使用功能、使用前提等

微机原理与系统设计 汇编语言基础 董明皓 [email protected]

Page 9: 微机原理与接口技术 第三章 汇编语言基础 · 微机原理与接口技术 第三章 汇编语言基础 ... 微机原理与系统设计 汇编语言基础 董明皓 dminghao@xidian.edu.cn.

从汇编语言源程序到可执行程序所经过的处理过程

用全屏幕编辑软件编辑汇编语言源程序 文件名.ASM

用汇编程序MASM.EXE对源程序文件名.ASM 进行汇编

有语法错误吗?

在磁盘上形成目标程序文件文件名.OBJ

用连接程序LINK.EXE对文件名.OBJ 进行连接

有错误吗?

在磁盘上形成了可执行文件文件名.EXE

没有

*.obj:地址不连续的目标码文件 *.exe:地址连续的目标码文件

3.4 汇编语言程序设计的基本步骤

Page 10: 微机原理与接口技术 第三章 汇编语言基础 · 微机原理与接口技术 第三章 汇编语言基础 ... 微机原理与系统设计 汇编语言基础 董明皓 dminghao@xidian.edu.cn.

.ASM .OBJ .EXE汇编 连接

masm.exe

步骤:

1)编写源程序;2)汇编;3)连接;4)调试。

4.1.1 汇编语言程序设计的基本步骤

link.exe

微机原理与系统设计 汇编语言基础 董明皓 [email protected]

Page 11: 微机原理与接口技术 第三章 汇编语言基础 · 微机原理与接口技术 第三章 汇编语言基础 ... 微机原理与系统设计 汇编语言基础 董明皓 dminghao@xidian.edu.cn.

4.1.2 伪指令

伪指令:伪指令不是CPU运行的指令,而是程序员给汇编程

序下达的命令。是在汇编源程序期间由汇编程序执行的命令。

伪指令用来对汇编程序进行控制,对程序中的数据进行存

储空间分配、实现条件汇编、列表等处理,其格式和汇编

指令一样,但不产生目标代码,即不直接命令CPU去执行

什么操作。

微机原理与系统设计 汇编语言基础 董明皓 [email protected]

Page 12: 微机原理与接口技术 第三章 汇编语言基础 · 微机原理与接口技术 第三章 汇编语言基础 ... 微机原理与系统设计 汇编语言基础 董明皓 dminghao@xidian.edu.cn.

4.1.2 伪指令

DB:定义字节,其后的每个操作数占有一个存储单元,连

续存放;

BUFFER DB 2, 3

STRING DB ‘NO’ ‘O’‘N’03H02HBUFFER

DW:定义字,其后的每个操作数占有两个字节;

BUF DW 2, 3, 5

05H00H

00H03H00H02HBUF

STRING

DD: 定义双字,其后每个操作数占4个字

节;

还有DQ(4个字长)、DT(10个字节长)

数据定义伪指令

Page 13: 微机原理与接口技术 第三章 汇编语言基础 · 微机原理与接口技术 第三章 汇编语言基础 ... 微机原理与系统设计 汇编语言基础 董明皓 dminghao@xidian.edu.cn.

4.1.2 伪指令数据定义伪指令

若仅保留单元,不初始化,用?代替初值;

若数据重复,用 n DUP( )代替,n为重复次数。

ARRAY DB 100 DUP(?);保留100个字节,首地址为

ARRAY,不初始化,即100个字节内均为随机值

DATA1 DB 100 DUP(‘AB’);初始化200个字节,内有100个41H, 42H(即41H 42H 41H 42H 41H 42H……)

微机原理与系统设计 汇编语言基础 董明皓 [email protected]

Page 14: 微机原理与接口技术 第三章 汇编语言基础 · 微机原理与接口技术 第三章 汇编语言基础 ... 微机原理与系统设计 汇编语言基础 董明皓 dminghao@xidian.edu.cn.

4.1.2 伪指令段定义伪指令(SEGMENT-ENDS)

一般的源程序分为4个段:代码段Code、数据段Data、堆栈段

Stack、附加段Extra。各个段从段定义语句开始,到段结束语

句ENDS结束。

段名 SEGMENT [定位类型] [组合类型] [类别]

……段体

……段名 ENDS

用户指定 可任选定义

微机原理与系统设计 汇编语言基础 董明皓 [email protected]

Page 15: 微机原理与接口技术 第三章 汇编语言基础 · 微机原理与接口技术 第三章 汇编语言基础 ... 微机原理与系统设计 汇编语言基础 董明皓 dminghao@xidian.edu.cn.

4.1.2 伪指令

1)段名必须是合法的标识符。

• 以字母开头

• 不能使用专用标示符,如:MOV、ADD、AND等

• 起名时应该有含义,明确段内内容种类,让程序阅读者

一目了然,如:STACK、CODE、DATA等

• SEGMENT/ENDS左侧的段名一致

• SEGMENT/ENDS配对使用

段定义伪指令(SEGMENT-ENDS)

微机原理与系统设计 汇编语言基础 董明皓 [email protected]

Page 16: 微机原理与接口技术 第三章 汇编语言基础 · 微机原理与接口技术 第三章 汇编语言基础 ... 微机原理与系统设计 汇编语言基础 董明皓 dminghao@xidian.edu.cn.

4.1.2 伪指令段定义伪指令(SEGMENT-ENDS)2) 段名一旦定义,具有五个属性

段地址

偏移地址

定位类型

组合类型

‘类别’

微机原理与系统设计 汇编语言基础 董明皓 [email protected]

Page 17: 微机原理与接口技术 第三章 汇编语言基础 · 微机原理与接口技术 第三章 汇编语言基础 ... 微机原理与系统设计 汇编语言基础 董明皓 dminghao@xidian.edu.cn.

4.1.2 伪指令

2)定位类型:

表示本段起始地址位于何处

内存可以看成是一本书,分成

页,段,字,和字节。

每256个地址为一页(PAGE),每

页的起始地址为二进制:

**** **** **** 0000 0000

16进制:***00H

段定义伪指令(SEGMENT-ENDS) 第一页

(256个地址)

第二页

(256个地址)

00000H

000FFH

00100H

00200H

001FFH

微机原理与系统设计 汇编语言基础 董明皓 [email protected]

Page 18: 微机原理与接口技术 第三章 汇编语言基础 · 微机原理与接口技术 第三章 汇编语言基础 ... 微机原理与系统设计 汇编语言基础 董明皓 dminghao@xidian.edu.cn.

4.1.2 伪指令段定义伪指令(SEGMENT-ENDS)

每16个地址为一节(PARA),

每段的起始地址为二进制:

**** **** **** **** 0000

16进制:****0H

段(节)是默认的定位类型 。

第一段

(16个地址)

第二段

(16个地址)

***00H

***0FH

***10H

***1FH

***20H微机原理与系统设计 汇编语言基础 董明皓 [email protected]

Page 19: 微机原理与接口技术 第三章 汇编语言基础 · 微机原理与接口技术 第三章 汇编语言基础 ... 微机原理与系统设计 汇编语言基础 董明皓 dminghao@xidian.edu.cn.

4.1.2 伪指令段定义伪指令(SEGMENT-ENDS)

• 每2个地址为一个字(WORD),每个字的起始地址为偶数;

• 基本的类型是字节(BYTE),每个字节只包含一个地

址,可以是内存的任何空间。

• 定位类型表示所定义的段存放在内存空间时,段首地址

对内存空间的要求,即段起始点是放在一页的起点上

(PAGE)还是一段的起点上(PARA)等

• 如果不定义定位类型,编译程序将默认其为段类型,即

将段首地址放在从****0H开始的内存空间。

微机原理与系统设计 汇编语言基础 董明皓 [email protected]

Page 20: 微机原理与接口技术 第三章 汇编语言基础 · 微机原理与接口技术 第三章 汇编语言基础 ... 微机原理与系统设计 汇编语言基础 董明皓 dminghao@xidian.edu.cn.

4.1.2 伪指令段定义伪指令(SEGMENT-ENDS)

BYTE: 表示本段起始单元可以从任一地址开始;

WORD: 表示本段起始单元从一个偶地址开始;

PARA: 表示本段起始单元从一个段的边界开始(默认);

PAGE: 表示本段起始单元从一个页的边界开始。

微机原理与系统设计 汇编语言基础 董明皓 [email protected]

Page 21: 微机原理与接口技术 第三章 汇编语言基础 · 微机原理与接口技术 第三章 汇编语言基础 ... 微机原理与系统设计 汇编语言基础 董明皓 dminghao@xidian.edu.cn.

4.1.2 伪指令段定义伪指令(SEGMENT-ENDS)3)组合类型

• 多模块程序设计时,告诉汇编程序(masm.exe),所定义的段

与其他段的关系,即将该段存放内存时,是否将该段与其

他段在物理上或逻辑上放在一起。

• NONE: 表示本段与其他段不发生任何关系,该段有自己的

段基址,是默认的组合关系(缺省型)。

• PUBLIC:在满足定位类型的前提下与其他模块的同名段连

接在一起,形成一个新的逻辑段,共用一个段基址。

微机原理与系统设计 汇编语言基础 董明皓 [email protected]

Page 22: 微机原理与接口技术 第三章 汇编语言基础 · 微机原理与接口技术 第三章 汇编语言基础 ... 微机原理与系统设计 汇编语言基础 董明皓 dminghao@xidian.edu.cn.

4.1.2 伪指令段定义伪指令(SEGMENT-ENDS)

COMMON: 表示产生一个覆盖段。连接时,把本段与其他

也用COMMON说明的同名段置成相同的起始地址,重叠在

一起,共享相同的存储区,其段长度由 长的段确定。

STACK: 在每个汇编程序中,只能必须有一个堆栈段,连接

时,将本段与其他也用STACK说明的同名段连接成一个连续

的STACK段,编译程序自动初始化SS和SP寄存器,使SS的内容为该连续段的段基址,SP指向堆栈底部加1的存储单元。

(masm 5.0版本)

NONE型:告诉link程序,本逻辑段和任何模块的任何逻辑

段都没有联系,为缺省型。

3)组合类型

Page 23: 微机原理与接口技术 第三章 汇编语言基础 · 微机原理与接口技术 第三章 汇编语言基础 ... 微机原理与系统设计 汇编语言基础 董明皓 dminghao@xidian.edu.cn.

4.1.2 伪指令段定义伪指令(SEGMENT-ENDS)3)组合类型

MEMORY: 表示本段在存储器中应定位在所有其他段的

高地址。

AT<表达式>: 表示本段从表达式指定的地址处开始装入,

这样,在程序中用户就可以直接定义段地址,这种方式不

适用于代码段。

大纲规定:单模块程序设计

如: STACK SEGMENT STACK

DB 256 DUP (?)

STACK ENDS

Page 24: 微机原理与接口技术 第三章 汇编语言基础 · 微机原理与接口技术 第三章 汇编语言基础 ... 微机原理与系统设计 汇编语言基础 董明皓 dminghao@xidian.edu.cn.

4.1.2 伪指令段定义伪指令(SEGMENT-ENDS)

4) 类别

是用单引号括起来的字符串,以表明该段的类别,如代

码段(CODE)、数据段(DATA)、堆栈段(STACK)等。

当然也允许用户在类别中用其他的名。

这样进行连接时,连接程序便将同类别的段(但不一定同

名)放在连续的存储区内。

微机原理与系统设计 汇编语言基础 董明皓 [email protected]

Page 25: 微机原理与接口技术 第三章 汇编语言基础 · 微机原理与接口技术 第三章 汇编语言基础 ... 微机原理与系统设计 汇编语言基础 董明皓 dminghao@xidian.edu.cn.

STACK SEGMENT STACK ‘STACK’

DB 256 DUP (?) ;

TOP LABEL WORD

STACK ENDS

DATA SEGMENT

……

DATA ENDS

CODE SEGMENT

ASSUME CS: CODE, DS:DATA, ES:DATA

ASSUME SS: STACK ;段寻址伪指令

4.1.3 8086汇编语言的完整结构

其起始地址为:0000H,栈底为00FFH,SP

指向栈底+1单元,为0100H。

人工为SS、SP指定地址,TOP具有该单元

的SEG、EA、TYPE,但其不占MEM单元

Page 26: 微机原理与接口技术 第三章 汇编语言基础 · 微机原理与接口技术 第三章 汇编语言基础 ... 微机原理与系统设计 汇编语言基础 董明皓 dminghao@xidian.edu.cn.

START:

MOV AX , DATA ;DATA为段名,而非变量名

= MOV AX , SEG DATA ;源OPR的寻址方式为立即寻址

MOV DS, AX

MOV ES, AX

MOV AX, STACK

MOV SS, AX

MOV SP OFFSET TOP

……

CODE ENDS

END START

4.1.3 8086汇编语言的完整结构

微机原理与系统设计 汇编语言基础 董明皓 [email protected]

Page 27: 微机原理与接口技术 第三章 汇编语言基础 · 微机原理与接口技术 第三章 汇编语言基础 ... 微机原理与系统设计 汇编语言基础 董明皓 dminghao@xidian.edu.cn.

• 用户编写程序

• 程序在计算机中运行

• 计算机的控制由操作系统交给用户程序

• 运行用户程序

• 当用户程序运行结束后,应再将控制权交回操作系统

所以,在程序中应该有返回DOS的操作。

在计算机中,返回DOS的操作由操作系统中的一个子程序

来实现,用户使用时调用这个子程序即可。

4.1.3 8086汇编语言的完整结构

微机原理与系统设计 汇编语言基础 董明皓 [email protected]

Page 28: 微机原理与接口技术 第三章 汇编语言基础 · 微机原理与接口技术 第三章 汇编语言基础 ... 微机原理与系统设计 汇编语言基础 董明皓 dminghao@xidian.edu.cn.

00000H

DS,ES 100个字节

SS 用户程序空间

FFFFFH

CS

4.1.3 8086汇编语言的完整结构每当一个用户的可执行文件.EXE装入内存后,存储器的分配

情况如图:

系统占用

程序段前缀

用户数据区

用户堆栈区

用户代码段

…………

系统和ROM占用

Page 29: 微机原理与接口技术 第三章 汇编语言基础 · 微机原理与接口技术 第三章 汇编语言基础 ... 微机原理与系统设计 汇编语言基础 董明皓 dminghao@xidian.edu.cn.

系统占用

INT 20H程序段前缀

用户数据区

用户堆栈区

用户代码段

…………

系统和ROM占用

• 用户程序的代码前一定有100个字节的程序段

前缀(Program Segment Prefix, 简称PSP),PSP

给出了用户的可执行文件(.EXE)的若干控制信

息。

• 其中PSP的开始处(第1,2字节)有一条中断指

令INT 20H的代码,通过它可以结束用户程序,

返回操作系统。

• 在用户程序执行完以后,通过执行该条指令

就可以返回DOS。

4.1.3 8086汇编语言的完整结构

Page 30: 微机原理与接口技术 第三章 汇编语言基础 · 微机原理与接口技术 第三章 汇编语言基础 ... 微机原理与系统设计 汇编语言基础 董明皓 dminghao@xidian.edu.cn.

30

返回操作系统的另一个办法是通过系统调用(调用号是4CH)。

这时,在用户程序结束时,用下面两条指令:

MOV AH, 4CH;执行4CH号子程序-结束用户程序,返回DOS

INT 21H ;执行21H号中断-调用DOS系统子程序

即可实现返回DOS。

4.1.3 8086汇编语言的完整结构

微机原理与系统设计 汇编语言基础 董明皓 [email protected]

Page 31: 微机原理与接口技术 第三章 汇编语言基础 · 微机原理与接口技术 第三章 汇编语言基础 ... 微机原理与系统设计 汇编语言基础 董明皓 dminghao@xidian.edu.cn.

START:

MOV AX , DATA

= MOV AX , SEG DATA

MOV DS, AX

MOV ES, AX

MOV AX, STACK

MOV SS, AX

MOV SP OFFSET TOP

……

MOV AH, 4CH

INT 21H

CODE ENDS

END START

4.1.3 8086汇编语言的完整结构

微机原理与系统设计 汇编语言基础 董明皓 [email protected]

Page 32: 微机原理与接口技术 第三章 汇编语言基础 · 微机原理与接口技术 第三章 汇编语言基础 ... 微机原理与系统设计 汇编语言基础 董明皓 dminghao@xidian.edu.cn.

4.1.2 伪指令

其他伪指令

微机原理与系统设计 汇编语言基础 董明皓 [email protected]

Page 33: 微机原理与接口技术 第三章 汇编语言基础 · 微机原理与接口技术 第三章 汇编语言基础 ... 微机原理与系统设计 汇编语言基础 董明皓 dminghao@xidian.edu.cn.

STACK SEGMENT STACK ‘STACK’

DB 256 DUP (?)

TOP LABEL WORD

STACK ENDS

DATA SEGMENT

VAR1 DB 10H

VAR2 DW ?

X-WORD DW 1234

DATA ENDS

CODE SEGMENT

ASUME CS: CODE, DS:CODE, ED:DATA

ASUME SS: STACK

4.1.3 8086汇编语言的完整结构

微机原理与系统设计 汇编语言基础 董明皓 [email protected]

Page 34: 微机原理与接口技术 第三章 汇编语言基础 · 微机原理与接口技术 第三章 汇编语言基础 ... 微机原理与系统设计 汇编语言基础 董明皓 dminghao@xidian.edu.cn.

START:

MOV AX , DATA = MOV AX , SEG DATA

MOV DS, AX

MOV ES, AX

MOV AX, STACK

MOV SS, AX

MOV SP OFFSET TOP

……

MOV AL, X-WORDMOV AL, BYTE PTR X-WORD

MOV AH, 4CH

INT 21H

CODE ENDS

END START

4.1.3 8086汇编语言的完整结构

微机原理与系统设计 汇编语言基础 董明皓 [email protected]

Page 35: 微机原理与接口技术 第三章 汇编语言基础 · 微机原理与接口技术 第三章 汇编语言基础 ... 微机原理与系统设计 汇编语言基础 董明皓 dminghao@xidian.edu.cn.

4.1.2 伪指令

Label伪指令

微机原理与系统设计 汇编语言基础 董明皓 [email protected]

Page 36: 微机原理与接口技术 第三章 汇编语言基础 · 微机原理与接口技术 第三章 汇编语言基础 ... 微机原理与系统设计 汇编语言基础 董明皓 dminghao@xidian.edu.cn.

STACK SEGMENT STACK ‘STACK’

DB 256 DUP (?)

TOP LABEL WORD

STACK ENDS

DATA SEGMENT

VAR1 DB 10H

VAR2 DW ?

X-WORD DW 1234

X-BYTE LABEL BYTE

DATA ENDS

CODE SEGMENT

ASUME CS: CODE, DS:CODE, ED:DATA

ASUME SS: STACK

4.1.3 8086汇编语言的完整结构

微机原理与系统设计 汇编语言基础 董明皓 [email protected]

Page 37: 微机原理与接口技术 第三章 汇编语言基础 · 微机原理与接口技术 第三章 汇编语言基础 ... 微机原理与系统设计 汇编语言基础 董明皓 dminghao@xidian.edu.cn.

START:

MOV AX , DATA

= MOV AX , SEG DATA

MOV DS, AX

MOV ES, AX

MOV AX, STACK

MOV SS, AX

MOV SP OFFSET TOP

……

MOV AL, BYTE PTR X-WORDMOV AL, X-BYTE

MOV AH, 4CH

INT 21H

CODE ENDS

END START

4.1.3 8086汇编语言的完整结构