第4章汇编语言程序设计汇总.docx

上传人:b****9 文档编号:25857841 上传时间:2023-06-16 格式:DOCX 页数:19 大小:19.29KB
下载 相关 举报
第4章汇编语言程序设计汇总.docx_第1页
第1页 / 共19页
第4章汇编语言程序设计汇总.docx_第2页
第2页 / 共19页
第4章汇编语言程序设计汇总.docx_第3页
第3页 / 共19页
第4章汇编语言程序设计汇总.docx_第4页
第4页 / 共19页
第4章汇编语言程序设计汇总.docx_第5页
第5页 / 共19页
点击查看更多>>
下载资源
资源描述

第4章汇编语言程序设计汇总.docx

《第4章汇编语言程序设计汇总.docx》由会员分享,可在线阅读,更多相关《第4章汇编语言程序设计汇总.docx(19页珍藏版)》请在冰豆网上搜索。

第4章汇编语言程序设计汇总.docx

第4章汇编语言程序设计汇总

第4章汇编语言程序设计

主要内容

汇编语言源程序的结构

汇编语言语句格式

伪指令

功能调用

汇编语言程序设计

§4.1汇编语言源程序

了解:

汇编语言源程序的结构

汇编语言语句类型及格式

一、汇编语言源程序结构

1.汇编语言源程序与汇编程序

汇编语言源程序用助记符编写

汇编程序源程序的编译程序

汇编语言源程序汇编程序机器语言目标程序

2.汇编语言程序设计与执行过程

输入汇编语言源程序(EDIT)源文件.ASM

汇编(MASM)目标文件.OBJ

链接(LINK)可执行文件.EXE

调试(TD)最终程序

 

二、汇编语言语句类型及格式

1.汇编语言语句类型

指令性语句

CPU执行的语句,能够生成目标代码

指示性语句

CPU不执行,而由汇编程序执行的语句,不生成目标代码

2.汇编语言语句格式

指令性语句:

[标号:

][前缀]助记符[操作数],[操作数][;注释]

指令的符号地址

标号后要有冒号操作码注释前加分号

指示性语句格式

[名字]伪指令助记符操作数[,操作数,…][;注释]

变量的符号地址指示性语句中至

其后不加冒号有一个操作数

3.标号、名字

标号后有冒号,在指令性语句前;名字后不加冒号,在指示性语句前。

英文字母、数字及专用字符组成,最大长度不能超过31个,且不能由数字打头,不能用

保留字(如寄存器名,指令助记符,伪指令)。

4.操作数

寄存器

存储器单元

常量

变量或标号

表达式

常量

数字常量

字符串常量用单引号引起的字符或字符串

例:

‘A’

MOVAL,’A’

例:

’ABCD’

汇编时被译成对应的ASCII

码41H,42H,43H,44H

用单引号引起的字符或字符串

变量

代表内存中的数据区,程序中视为存储器操作数

变量的属性:

段值变量所在段的段地址

偏移量变量单元地址与段首地址之

间的位移量。

类型字节型、字型和双字型

表达式

算术运算

逻辑运算

*关系运算

取值运算和属性运算

其它运算

算术运算和逻辑运算符

算术运算符

+,-,*,/,MOD

逻辑运算符

AND,OR,NOT,XOR

例:

MOVAL,8AND4

MOVAL,8+4-1

取值运算符

用于分析存储器操作数的属性

获取变量的属性值

OFFSET取得其后变量或标号的偏移地址

SEG取得其后变量或标号的段地址

TYPE取变量的类型

LENGTH取所定义存储区的长度

SIZE取所定义存储区的字节数

取值运算符例

MOVAX,SEGDATA

MOVDS,AX

MOVBX,OFFSETDATA

LEABX,DATA

取值运算符例

若BUFFER存储区用如下伪指令定义:

BUFFERDW200DUP(0)

则:

TYPEBUFFER等于2

LENGTHBUFFER等于200

SIZEBUFFER等于400

属性运算符

用于指定其后存储器操作数的类型

运算符:

PTR

例:

MOVBYTRPTR[BX],12H

其它运算符

方括号:

[]方括号中内容为操作数的偏移地址

段重设符

段寄存器名:

[]用于修改默认的段基地址

§4.2伪指令

掌握:

伪指令的格式及实现的操作

伪指令的应用

伪指令

由汇编程序执行的“指令系统”

作用:

定义变量;

分配存储区

定义逻辑段;

指示程序开始和结束;

定义过程等。

常用伪指令

数据定义伪指令

符号定义伪指令

段定义伪指令

结束伪指令

过程定义伪指令

宏命令伪指令

一、数据定义伪指令

用于定义数据区中变量的类型及大小

格式:

[变量名]伪指令助记符操作数,…;[注释]

符号地址

定义变量类型

定义变量值及区域大小

1.数据定义伪指令助记符

DB定义的变量为字节型

DW定义的变量为字类型(双字节)

DD定义的变量为双字型(4字节)

DQ定义的变量为4字型(8字节)

DT定义的变量为10字节型

数据定义伪指令例

DATA1DB11H,22H,33H,44H

DATA2DW11H,22H,3344H

DATA3DD11H*2,22H,33445566H

数据定义伪指令例_变量在内存中的分布

DATA111DATA322

220

330

440

DATA21122

000

220

000

44XX

3366

55

44

33

数据定义伪指令的几点说明

伪指令的性质决定所定义变量的类型;

定义字符串必须用DB伪指令

例:

DATA1DB‘ABCD’,66H

41H‘A’

42H‘B’

43HC’

44H‘D’

66H

2.重复操作符

作用:

为一个数据区的各单元设置相同的初值

目的:

常用于声明一个数据区

格式:

[变量名]伪指令助记符nDUP(初值,…)

例:

BW20DUP(0)

M1DB10DUP(0)

3.“?

”的作用

表示随机值,用于预留存储空间

MEM1DB34H,’A’,?

随机数

占1个字节单元

DW20DUP(?

预留40个字节单元,每单元为随机值

数据定义伪指令例

M1DB‘Howareyou?

M2DW3DUP(11H),3344H

DB4DUP(?

M3DB3DUP(22H,11H,?

变量在内存中的分区

数据定义伪指令例

M1M211HM322H

00H11H

11HXX

00H22H

11H11H

00HXX

44H22H

33H11H

XXXX

XX

XX

XX

二、符号定义伪指令

格式:

符号名EQU表达式

操作:

用符号名取代后边的表达式,不可重新定义

例:

CONSTANTEQU100

VAREQU30H+99H

EQU说明的表达式不占用内存空间

三、段定义伪指令

说明逻辑段的起始和结束;

说明不同程序模块中同类逻辑段之间的联系形

段定义伪指令格式

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

段名ENDS

说明逻辑段的起点

说明不同模块中同名

段的组和连接方式

定位类型

PARA:

段的起点从节边界开始

(16个字节为1节)

BYTE:

段的起点从存储器任何地址开始

WORD:

段的起点从偶地址开始

PAGE:

段的起点从页边界开始

组合类型

与其它模块中的同名段在满足定位类型的前提

下具有的组合方式:

NONE:

不组合

PUBLIC:

依次连接(顺序由LINK程序确定)

COMMON:

覆盖连接

STACK:

堆栈段的依次连接

AT表达式:

段定义在表达式值为段基的节边界

MEMORY:

相应段在同名段的最高地址处。

类别

不同模块连接时将相同类别的段放在连续的内存区域中

段定义伪指令例

DATASEGMENT

变量在逻辑段中的位置MEM1DB11H,22H

就代表了它的偏移地址MEM2DB‘Hello!

MEM3DW2DUP(?

DATAENDS

表示变量所在逻辑段的段地址

表示变量的类型

四、设定段寄存器伪指令

说明所定义逻辑段的性质

格式:

ASSUME段寄存器名:

段名[,段寄存器名:

段名,…]

五、结束伪指令

表示源程序结束

格式:

END[标号]

汇编语言源程序结构

数据段名SEGMENT堆栈段名SEGMENT

……

数据段名ENDS堆栈段名ENDS

附加段名SEGMENT代码段名SEGMENT

……

附加段名ENDS

代码段名ENDS

END

一个完整源程序结构例

DSEGSEGMENT

DATA1DB1,2,3DUP(?

DATA2DW1234H

DSEGENDS

ESEGSEGMENT

DB20DUP(?

ESEGENDS

SSEGSEGMENTSTACK‘STACK’

DB200DUP(?

SSEGENDS

一个完整源程序结构例

CSEGSEGMENT

ASSUMECS:

CSEG,DS:

DSEG,

ES:

ESEG,SS:

SSEG

START:

MOVAX,DSEG

MOVDS,AX段寄存器初始化

MOVAX,ESEG——将段地址送

MOVES,AX相应的段寄存

MOVAX,SSEG

MOVSS,AX

┇源程序代码

CSEGENDS

ENDSTART

 

六、过程定义伪指令

用于定义一个过程体

格式:

过程入口的符号地址

过程名PROC[NEAR/FAR]

RET

过程名ENDP

过程定义及调用例

定义延时子程序调用延时子程序:

DELAYPROCCALLDELAY

PUSHBX

PUSHCX

MOVBL,2

NEXT:

MOVCX,4167

W10M:

LOOPW10M

DECBL

JNZNEXT

POPCX

POPBX

RET

DELAYENDP

七、宏命令伪指令

宏源程序中由汇编程序识别的具有独

立功能的一段程序代码

格式:

宏命令名MACRO<形式参数>

ENDM

八、其它伪指令

ORG段内程序代码或变量的起始偏移地址

格式:

ORG表达式

例:

计算值为非负常数

ORG2000H

其它伪指令

NAME-------为目标程序设定一个名字

格式:

NAME模块名

TITLE-------为程序清单指定打印标题

格式:

TITLE标题名

§4.3功能调用

DOS功能调用

BIOS功能调用

DOS功能调用

包含多个子功能的功能包;

用软中断指令调用,中断类型码固定为21H;

各子功能采用功能号来区分。

DOS功能调用

设备管理

目录管理

文件管理

其它

DOS功能调用

调用格式:

MOVAH,功能号

<置相应参数>

INT21H

一、单字符输入

调用方法:

MOVAH,01

INT21H

输入的字符在AL中

单字符输入例

GET_KEY:

MOVAH,1

INT21H

CMPAL,’Y’

JZYES

CMPAL,’N’

JZNO

JMPGET_KEY

YES:

NO:

交互式应

答程序

注意问题:

调用格式

字符输入缓冲区的定义

1.调用格式

AH功能号OAH

DS:

DX字符串在内存中的存放地址

INT21H

2.定义字符缓冲区

用户自定义缓冲区格式:

存放字符个数:

≤255

N1N20DH

存放键入的字符

整个缓冲区

实际键入字符数

最大可键入字符数

输入字符串程序段

DAT1DB20,?

,20DUP(?

┇在数据段中定义

LEADX,DAT1

MOVAH,0AH

INT21H

输入缓冲区

定义后的输入缓冲区初始状态:

14H

20个字节

三、单字符显示输出

AH功能号O2H

DL待输出字符

INT21H

单字符显示输出例

MOVAH,02

MOVDL,41H

INT21H

执行结果:

屏幕显示A

四、字符串输出显示

AH功能号O9H

DS:

DX待输出字符串的偏移地址

INT21H

字符串输出显示

被显示的字符串必须以‘$’结束,且所显示的

内容不应出现非可见的ASCII码

字符串输出显示例

DATASEGMENT

MESS1DB‘InputString:

’,0DH,0AH,’$’

DATAENDS

CODESEGMENT

MOVAH,09

MOVDX,OFFSETMESS1

INT21H

§4.4汇编语言程序设计

设计步骤:

根据实际问题抽象出数学模型

确定算法

画程序流程图

分配内存工作单元和寄存器

程序编码

调试

程序流程图符号

起始:

功能:

判断:

子过程:

汇编语言程序结构

顺序结构

循环结构

先判定型

后判定型

分枝结构

单分枝

多分枝

子程序结构

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 幼儿教育 > 幼儿读物

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1