第四节汇编语言程序设计Word文件下载.docx

上传人:b****1 文档编号:397486 上传时间:2023-04-28 格式:DOCX 页数:24 大小:72.63KB
下载 相关 举报
第四节汇编语言程序设计Word文件下载.docx_第1页
第1页 / 共24页
第四节汇编语言程序设计Word文件下载.docx_第2页
第2页 / 共24页
第四节汇编语言程序设计Word文件下载.docx_第3页
第3页 / 共24页
第四节汇编语言程序设计Word文件下载.docx_第4页
第4页 / 共24页
第四节汇编语言程序设计Word文件下载.docx_第5页
第5页 / 共24页
第四节汇编语言程序设计Word文件下载.docx_第6页
第6页 / 共24页
第四节汇编语言程序设计Word文件下载.docx_第7页
第7页 / 共24页
第四节汇编语言程序设计Word文件下载.docx_第8页
第8页 / 共24页
第四节汇编语言程序设计Word文件下载.docx_第9页
第9页 / 共24页
第四节汇编语言程序设计Word文件下载.docx_第10页
第10页 / 共24页
第四节汇编语言程序设计Word文件下载.docx_第11页
第11页 / 共24页
第四节汇编语言程序设计Word文件下载.docx_第12页
第12页 / 共24页
第四节汇编语言程序设计Word文件下载.docx_第13页
第13页 / 共24页
第四节汇编语言程序设计Word文件下载.docx_第14页
第14页 / 共24页
第四节汇编语言程序设计Word文件下载.docx_第15页
第15页 / 共24页
第四节汇编语言程序设计Word文件下载.docx_第16页
第16页 / 共24页
第四节汇编语言程序设计Word文件下载.docx_第17页
第17页 / 共24页
第四节汇编语言程序设计Word文件下载.docx_第18页
第18页 / 共24页
第四节汇编语言程序设计Word文件下载.docx_第19页
第19页 / 共24页
第四节汇编语言程序设计Word文件下载.docx_第20页
第20页 / 共24页
亲,该文档总共24页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

第四节汇编语言程序设计Word文件下载.docx

《第四节汇编语言程序设计Word文件下载.docx》由会员分享,可在线阅读,更多相关《第四节汇编语言程序设计Word文件下载.docx(24页珍藏版)》请在冰点文库上搜索。

第四节汇编语言程序设计Word文件下载.docx

语句类型合格式

汇编语言的语句可分为两类:

指令性语句和指示性语句。

指令性语句就是由指令组成的,可被CPU执行的语句,就是前面所讲到的指令系统。

指示性语句则不是由CPU执行,而是用来告知汇编程序如何对程序进行汇编的指令,不生成目标代码,就是后面讲到的伪指令。

一、指令性语句格式:

[标号:

][前缀]操作码[操作数[,操作数]][;

注释]

二、指示性语句格式:

[名字]伪操作指令操作数[,操作数,……][;

说明:

“[]”之间的是可选项,可有可没有。

注释:

是指对指令的说明,可有可没有,前面必需加“;

”。

3、二者区别

●‘标号’表示的是指令的符号地址,后面要加‘:

’,而‘名字’表示的变量名、段名和进程名等,后面不加‘:

’。

●指令性语句中的操作数最多有两个,而指示性语句种的操作数可按照需要有多个,之间用“,”隔开。

数据项及表达式

操作数包括三类:

当即数操作数、寄放器操作数、存储器操作数,而当即数(数据项)又能够是常量、标号、变量和表达式。

一、常量

包括数字常量和字符串常量,数字常量分为:

十进制、二进制和十六进制,字符串常量是用单引号括起来的一个或多个ASCII字符。

二、标号

是人为肯定的,是给指令或某一存储单元地址所起的名字。

标号不能以数字开头,但数字能够出此刻标号的中间或末尾;

最长为31个字符,能够由数字、字母和下划线组合而成;

在指令性语句中,它代表该指令的符号地址,在程序中其它地方能够引用那个标号。

有3种属性:

段、偏移量和类型。

●段属性:

就是标号所在段的段地址;

●偏移量属性:

就是指标号所在段的起始地址到概念该标号的地址之间的字节数(偏移地址),是16位的无符号数。

●类型:

有两种,NEAR和FAR。

NEAR表示为近标号,只能在段内引用,地址指针为2个字节;

FAR表示为远标号,可在其它段被引用,地址指针为4个字节。

3、变量

是指存储器中某个数据区的名字,由于数据区中的内容是能够改变的,因此,在程序中,变量的值也能够改变。

变量在指令中能够作为存储器操作数引用。

变量名由字母开头,最长为31个字符。

在利用中,应注意:

1)变量类型与指令的要求须一致;

2)在概念变量时,是指数据区的首地址;

段属性:

就是变量所在段的段地址;

偏移量:

就是指变量所在段的起始地址到变量地址之间的字节数。

类型:

BYTE、WORD、DWORD、QWORD、TBYTE,表示数据区中存取操作对象的大小。

注意:

1)变量类型与指令的要求必需相符;

2)概念变量时,变量名对应的是数据区的首地址。

若是数据区有多个数据,则在对其它数据操作时,需修改地址。

4、表达式

表达式不是指令,本身不能执行,是操作数的一种表示形式,在程序汇编时,将表达式进行相应的运算,取得一个肯定得值。

所以,在程序运行时,表达式本身已是一个有肯定值的操作数。

表达式仅是将求其值的计算任务交给了汇编程序来完成。

表达式是由操作数和运算符组成。

例:

MOVAX,[BP+4];

第二个操作数为表达式

用一个运算符能够对一个操作数或几个操作数进行运算,就组成一个表达式,从而取得一个新的值。

运算符包括:

1)算术运算符:

+、-、×

、/、MOD;

可用于数值表达式和地址表达式。

算术运算符用于数值表达式时,其汇编结果也是一个数值。

MOVAX,3×

5+3相当于MOVAX,12H

用于地址表达式时,通常利用“+”和“-”运算符,也能够用“×

”、“/”。

MOVAX,[START+2]

MOVAX,[START+2*4]

2)逻辑运算符:

AND、OR、NOT、XOR;

一般只用于数值表达式,用来对数值进行按位逻辑运算,并取得一个数值结果。

MOVAX,NOT01010101B相当于MOVAX,B

注:

逻辑运算指令:

只出此刻指令的操作码部份,运算在执行指令时完成;

逻辑运算符:

只出此刻指令的操作数部份,运算在汇编时完成;

ORAL,0BOR00001010B相当于ORAL,B

3)关系运算符:

EQ、NE、LT、GT、LE、GE

参与关系运算的两个操作数必需都是数值,或是同一段中的存储单元地址,而运算结果是一个逻辑值。

若是关系式不成立,结果为“假”,在汇编时,每一名的输出都为“0”

若是关系式成立,结果为“真”,在汇编时,每一名的输出都为“1”;

MOVAX,5EQ0101——→MOVAX,0FFFFH

MOVBL,11HLE16——→MOVBL,00H

4)取值运算符和属性运算符

取值运算符用来分析一个存储器操作数的属性;

而属性运算符则是规定存储器操作数的某个属性。

包括:

取值运算符OFFSET、SEG及属性运算符PTR

1OFFSET:

用来取得一个标号或变量的偏移地址。

MOVSI,OFFSETDATA1——→LEASI,DATA1

2SEG:

用来取得一个标号或变量的段地址。

MOVAX,SEGDATA1

MOVDS,AX

③PTR:

用来对存储器操作数规定类型,通常和伪指令BYTE、WORD、DWORD连起来利用。

JMPWORDPTR[BX+DI];

段内间接转移

JMPDWORDPTR[BX+DI];

段间间接转移

MULBYTEPTR[SI]

PTR运算符仅对当前指令有效。

5)其它运算符

1方括号[]:

指令顶用方括号表示存储器操作数,而方括号中的内容表示操作数的偏移地址。

MOVAX,[BX]

2段超越运算符“:

”,跟在某个段寄放器名的后面表示段重设,用来指定一个存储器操作数的段属性,而无论其原来隐含的段是什么。

MOVAX,ES:

[BX]

2伪指令

属于指示性语句,与CPU指令的区别:

1)CPU指令在程序运行时由CPU执行,每条指令对应一个特定的操作;

而伪指令在汇编进程中由汇编程序执行。

2)汇编以后,每条CPU指令被汇编并产生一条与之对应的目标代码;

而伪指令不产生与之相应的目标代码。

3)二者都有标号,但CPU指令的标号有冒号,而伪指令中的标号没有冒号;

数据概念伪指令

功能:

主要用来概念一个变量的类型,给存储器赋初值,给变量分派存储空间。

一、格式

[变量名]伪指令操作数[,操作数,……]

方括号中的变量名为可选项,变量名后面不跟冒号。

常常利用伪指令包括:

DB、DW、DD、DQ、DT:

用来概念字节、字、双字、四字和十字节的紧缩BCD码。

CRDB0DH

CRDW0DFFH

二、操作数说明

1)操作数能够是常数、表达式或字符串;

CRDW100×

5+20

2)数据概念伪指令能够概念多个数据元素,例:

CRDB0DH,02H,08H,但每一个数据元素的值不能超过由伪指令所概念的数据类型限定的范围

3)字符和字符串都必需放在单引号内,且概念字符串只能用DB;

3、DUP:

重复操作符,用来重复多次一样的操作。

格式:

重复次数DUP(操作数,操作数,……)

“重复次数”能够是表达式,但结果必需是正整数。

A1DW10DUP(2DUP(2,0,1),4)

MOVAX,A1+8来讲明存储单元的内容

4、“?

”:

能够给变量概念存储空间,但不给变量赋初值。

A1DW?

A1DB20DUP(?

符号概念伪指令

就是给一个表达式赋给一个名字。

名字EQU表达式

表达式能够是常数、符号、数值表达式、地址表达式及指令助记符。

例子见书上158页

EQU对同一个符号不能重复概念,若需要对符号重复概念时,可用“=”伪指令。

段概念伪指令

汇编语言源程序是用分段的方式来组织程序、数据和变量的,一个程序由若干逻辑段组成,每一个逻辑段就是通过段概念伪指令来概念的。

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

段名ENDS

SEGMENT和ENDS必需成对出现,对于同一个逻辑段概念,二者段名必需相同,而且段名不能与指令助记符或伪指令重名。

定位类型、组合类型、类别的说明,学生自己看书。

例如:

DATASEGMENT

DAT1DW20DUP(?

DATAENDS

设置段寄放器伪指令

ASSUME段寄放器:

段名[,……]

用来指明用SEGMENT概念的段,属于哪个段。

ASSUMEDS:

DATA

ASSUME只是指明所概念的段属于哪个段,但没有把所概念段的段地址装入到段寄放器中,即段初始化,但代码段的段地址是自动装入的。

8086采用分段结构,能够有多个逻辑段,但每一个程序模块只允许有4个逻辑段,即一个代码段、一个数据段、一个附加段和一个堆栈段。

见书上161【例4-5】

进程概念伪指令

在程序设计中,通常将具有某种功能的程序块看做一个进程,可被其它程序来挪用。

进程名:

PROC[NEAR/FAR]

RET

ENDP

进程名实际上是进程入口的符号地址,PROC和ENDP必需成对出现,且二者进程名必需相同;

NEAR:

近进程,与挪用程序在同一个代码段内,可省略;

FAR:

远进程,与挪用程序在在不同的代码段内,不能省略;

进程能够嵌套,也能够递归挪用;

进程的最后一条指令必需是返回指令RET。

见书上162【例4-6】

宏概念伪指令

在程序设计中,若是多次利用同一个程序段,就可以够将那个程序段概念为一个宏指令,需要时,利用宏指令名来代替,即宏挪用。

宏命令名MACRO[形式参数,…]

ENDM

宏命令名是宏概念的标志,但ENDM前不加宏命令名。

形参有多个,在宏调历时,用实际参数顺序代替形式参数。

见书上163【例4-7】

与进程概念的区别:

宏命令伪指令由宏汇编程序在汇编进程中进行处置,碰到宏调历时,宏汇编程序就用所对应的宏概念体来代替;

而进程挪用,执行CALL指令时,CPU使程序控制转移到挪用进程的入口地址。

宏挪用只简化源程序,但不能简化目标代码;

对于进程来讲,每一个进程的概念都产生相应的机械代码,调历时,只需用CALL指令,在程序中,不会出现所挪用程序的目标代码。

进程挪用需要保护断点地址、恢复断点地址等相关操作,额外占用CPU时刻,而宏概念不需要断点保护,相较较执行速度较快。

模块概念与连接伪指令

一、NAME伪指令

NAME模块名

用于给汇编后取得的目标程序一个名字,NAME前不允许加标号。

二、TITLE伪指令

TITLE题目名

为程序清单的每一页指定打印的题目。

3、END伪指令

END[标号]

是源程序的结束标志。

标号表示程序执行的开始地址,可省略。

汇编程序对END以后的语句不进行处置,程序中所有有效语句应放在END语句之前。

源程序中必需有END结束语句,不然程序要犯错。

练习

一、写出下列数据段中每一个符号所对应的值

DATAREASEGMENT

MAXEQUOFFFH;

MAX=0FFFH

VALONEEQUMAXMOD10H;

VALONE=000FH

VALTWOEQUVALONE×

2;

VALTWO=001EH

BUFSIZEEQU((VALTWOGT10H)AND10H)+10H;

BUFSIZE=0020H

BUFFERDBBUFSIZDUP(?

BUFENDEQUBUFFER+BUFSIZE-1;

BUFEND=001FH

DATAREAENDS

二、已知32位数寄存在DX:

AX中,编写程序将32位数左移4位,并将最高位存入CH寄放器中(低4位)

3DOS功能挪用

一、概述

1、系统中提供的功能挪用有两种,DOS功能挪用、BIOS功能挪用。

用户程序在挪用这些系统服务程序时,是采用软中断指令来实现,即:

INTn(n为中断类型号),而且这些系统服务程序在系统启动时已被加载到内存中,程序入口也被放到了中断向量表中。

2、BIOS是(BasicInput/OutputSystem的缩写,即大体输入/输出系统),指固化在ROM中的一组程序,简称ROMBIOS;

BIOS提供了最低级,最直接的硬件控制,是硬件与软件之间的接口。

BIOS主要包括以下一些功能:

1)系统自检及初始化。

例如,系统加电启动时对硬件进行检测;

对外部设备进行初始化;

设置中断向量;

引导操作系统等。

2)系统服务。

为操作系统和应用程序提供系统服务,这些服务主要与I/O设备有关,如读取键盘输入等。

3)硬件中断处置。

提供硬件中断服务程序。

3、DOS是IBMPC系列微机的操作系统,负责管理系统的所有资源,协调微机的操作,其中包括大量的可供用户挪用的服务程序。

DOS的功能挪用不依赖于具体的硬件系统。

所有的DOS系统功能挪用是采用软中断指令INT21H来实现,21H是一个中断向量号,共包括90多个中断服务程序,有设备管理、目录管理、文件管理和其它功能操作。

而且对每一个子功能进行了编号,即功能号。

咱们能够通过来指定功能号来挪用INT21H中相应的中断服务程序。

(见411页附录C.3)

4、DOS功能挪用的利用方式

1)在相应的寄放器中设置有关的入口参数;

2)在AH寄放器中设置功能号;

3)执行INT21H指令;

4)从规定的寄放器中分析出口参数;

单字符输入功能挪用

MOVAH,01H;

设置功能号

INT21H;

执行中断挪用

CMPAL,0DH;

分析、应用出口参数

二、常常利用的DOS功能挪用

●显示器输出:

显示单字符(02H功能),显示字符串(09H功能)

●键盘输入:

单字符输入(01H、07H、08H功能)、字符串输入(0AH功能)

●返回到DOS

1、显示单字符(02H功能)

入口参数:

DL=要显示字符的ASCII码

功能号:

AH=02H

类型号:

21H

出口参数:

实现功能:

显示所指定字符,光标随动。

显示字符‘A’

MOVDL,‘A’

MOVAH,02H

INT21H

使光标回到下一行的行首。

MOVDL,0DH;

显示回车符

MOVAH,02H

MOVDL,0AH;

显示换行符

2、显示单字符(06H功能),直接控制台I/O,即可输入也可输出。

412页,见附录C.3,06H

3、显示字符串(09H功能)

DS:

DX=字符串的首地址

AH=09H

21H

显示字符串,且光标随动。

在概念要显示的字符串,字符串最后应为’$’,作为结束显示的标志。

编程显示一个字符串

dataSEGMENT;

概念显示的子符串

striDB‘……………’,‘$’

dataENDS

codeSEGMENT

ASSUMECS:

code,DS:

data

Start:

MOVAX,data;

置缓冲区地址于DS:

DX

MOVDS,AX

LEADX,stri

MOVAH,09H;

调显示功能

INT21H

……

CodeENDS

ENDStart

4、单字符输入(01H、07H、08H功能)

●输入一个字符,在屏幕上回显(01H)

AH=01H

AL=键入字符的ASCII码

从键盘输入一个字符,并在屏幕上回显,光标移动,检测Ctrl-Break键

见书上171页【例4-8】

●输入一个字符,不在屏幕上回显(07、08H功能),且07H为直接控制台输入。

AH=08H

从键盘输入一个字符,不在屏幕上回显,不检测Ctrl-Break键

用不带回显功能输入密码时:

Input:

MOVAH,08H;

等待从键盘输入

MOV[DI],AL;

存入缓冲区

CMPAL,0DH;

是回车符?

JNZinput;

不是,继续输入

Check:

……;

密码检查

5.字符串输入(0AH功能)

DS:

DX=缓冲区的首地址

,(DS:

DX)=限制最多输入的字符数

AH=0AH

(DS:

DX+1)=实际键入的字符个数(不含回车符),从(DS:

DX+2)开始顺序寄存键入的字符串,回车符0DH为串尾最后一字符。

等待从键盘输入字符串,并存入设定的缓冲区内,同时回显字符串,光标随着移动,回车符使光标回到行首。

注意事项:

应按要求先概念缓冲区,再挪用。

应用0AH功能输入字符串

dataSEGMENT;

概念缓冲区

maxDB11;

概念限制最多输入个数

lenthDB?

用于寄存实际输入个数

striDB11DUP(?

);

用于寄存输入的字符串

ASSUMECS:

start:

MOVAX,data;

置缓冲区地址于DS:

MOVDS,AX

LEADX,max

MOVAH,0AH

INT21H;

调0A输入功能

codeENDS

ENDstart

六、返回到DOS

AH=4CH

使程序正常退出并返回到DOS。

例1:

利用DOS功能挪用,编程从键盘输入字符串,而且给出显示提示:

Pleaseinput:

dataSEGMENT

striDB‘PleaseInput:

’,’$’

maxDB11,?

11DUP(?

code,DS:

MOVAX,data;

MOVDS,AX

LEADX,stri

MOVAH,09H;

显示提示

INT21H

LEADX,max;

等待从键盘输入字符

MOVAH,0AH

MOVAH,4CH;

返回DOS

INT21H

ENDstart

4汇编语言设计基础

一、程序设计概述

一、程序质量的评价标准

1)程序的正确性和完整性;

2)程序的易读性;

3)程序的执行时刻和效率;

4)程序所占内存的大小;

89C52(8K),89C55(20K)

二、程序设计的一般步骤

1)分析问题,成立数学模型,模块划分并画出结构框图;

2)肯定各模块的数据结构和算法;

3)画程序流程图;

4)用指令和伪指令为数据和程序代码分派存储空间或寄放器;

5)编写、调试程序;

二、源程序的大体结构

一、顺序结构

最多见、最大体的程序结构,CPU依照指令的排列顺序逐条执行。

已知Z=(X+Y)-(W+Z),其中X,Y,Z,W均为用紧缩BCD码表示的数,写出程序。

分析:

在这里要注意是BCD数相加、减运算,要进行十进制调整。

具体程序如下:

MOVAL,Z

MOVBL,W

ADDAL,BL

DAA

MOVBL,AL;

BL=(W+Z)

MOVAL,X

MOVDL,Y

ADDAL,DL;

AL=(X+Y)

DAA;

十进制调整

SUBAL,BL;

AL=(X+Y)-(Z+W)

DAS;

MOVZ,AL;

结果送Z

调整指令隐含的操作数是AL(AX);

让学生看书上172页【例4-14】

二、分支结构

分支程序的大体思想是按照逻辑判断的结果来形成程序的分支,如图,若A成立,则执行P1;

不然执行P2。

设X为字节存储单元,Y为字存储单元,编程实现下面的功能。

流程图:

见书上174页【例4-16】与【例4-17】

3、循环结构

在程序中,需要多次重复执行操作时,

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

当前位置:首页 > 自然科学 > 物理

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2