微机原教案第四章OKWord格式.docx
- 文档编号:18651290
- 上传时间:2022-12-30
- 格式:DOCX
- 页数:32
- 大小:101.42KB
微机原教案第四章OKWord格式.docx
《微机原教案第四章OKWord格式.docx》由会员分享,可在线阅读,更多相关《微机原教案第四章OKWord格式.docx(32页珍藏版)》请在冰豆网上搜索。
汇编语言中,有两种语句:
指令性语句和指示性语句。
指令性在汇编后产生指令代码,在程序运行时由计算机执行。
指示性指令又称伪指令,不产生代码指令,计算机不执行,只是在汇编期间给汇编程序提供某些信息,如完成数据定义,分配存储区,指示程序结束等功能。
1)指令性语句格式
[格式]:
[前缀]指令操作码[指令操作数];
注释
[]内可有可无。
标号代表本条指令所在存储区的地址,如JMPNEXT。
前缀:
某些指令常与前缀配合使用,如REPMOVSB。
操作码:
必须部分告诉CPU本条指令应进行的操作。
操作数:
为指令执行提供所需的数据,可以是操作数本身,也可以是其存放地址,由寻址方式决定,操作数可以是1个,2个,或没有。
注释:
必须以“;
”开头,说明本条指令或本段指令的功能。
2)指示性语句格式
[名字]伪指令操作码[操作数][;
注释]
名字后不跟冒号,用于定义的变量名、过程名、常量名等。
三、汇编语言中的常用伪指令
1)数据定义与存储器分配伪指令
常用的有:
DB定义字节,其后的每一个操作数都占一个
字节;
DW定义一个字,其后的每一个操作数都占一个字(低位字节在低地址,高在高);
DD定义一个双字,其后的每一个操作数都占4个
字节;
DQ定义一个4字,其后的每一个操作数都占4个
字空间;
例:
DATA1DB10,4
DATA2DW100
DATA3DD3*20,OFFCDH
源程序汇编时,将数据写入存储器。
另:
操作数也可以是字符串,如“HELLO”
可以是“?
”——保存存储空间,但不写入数据,
还可以用DUP重复操作符,
如NDUP(D)——数D重复N次;
例:
MES3DB“HELLO”
DATA1DB0,?
,5,?
DATA2DB3DUP(10),2DUP(1,2)如图右所示
2)表达式赋值伪指令EQU
程序中,常有1个常量/表达式使用频繁的情况,可用EQU语句给其赋一个名字,在程序中直接用这个名字,需要更改时,只须在此语句中更改即可,不须一一更改。
格式;
符号名EQU表达式
P8EQU256
IEQU7*WEIGHT
●EQU语句中如果有变量式标号的表达式,则在该语句前先定义,否则
出错。
另;
表达式赋值也可以用“=”。
例:
P8=256
区别:
EQU赋值后(相当于定义一个常量),不可以改值,
而等号赋值后(相当于定义一个变量),则可以重新定义其值。
3)段定义伪操作
格式:
段名SEGMENT
-----
段名ENDS
成对使用,定义一个段,但并未指明定义的段作什么段使用,必须用ASSUME来分配。
ASSUME段寄存器名:
段名,段寄存器名:
段名---
D1SEGMENT
---
D1ENDS
D2SEGMENT
D2ENDS
D3SEGMENT
D3ENDS
ASSUMECS:
D2,DS:
D1,ES:
D3
说明:
D2段做代码段,D1为数据段,D3为附加数据段;
ASSUME指令必须放于代码段中,否则出错。
上述操作只是定义了段并将各段分配使用,但是并没有将段地址装入相应的段寄存器,必须在程序中将段地址装入段寄存器,指令如下;
D1SEGMENT
XDB5
DESEGMENT
DE,DS:
D1;
必须在代码段中
MOVAX,D1
MOVDS,AX
MOVAX,DE;
不需要,程序初始化时自动完成,但其它段必须有
MOVCS,AX
DEENDS
程序中常用ORG指令来规定段的起始地址。
DATA1SEGMENT
---
DATA1ENDS
ORG0100H
DATA2SEGMENT
DATA2ENDS
则DATA1从0000H开始,DATA2从0100H开始。
4)程序结束伪操作END
格式:
END[标号]
表示程序结束。
汇编程序遇到END语句时,结束汇编,后面的语句将被忽略。
标号指向第一条指令,如果用多个模块连接,则只在主程序中用标号,子模块中只用END。
试编程序求数OPR1与OPR2之和的绝对值,结果保存在RESULT单元。
DATASEGMENT
OPR1DW?
OPR2DW?
RESULTDW?
DATAENDS
STACKSEGMENT
BUFDW50DUP(?
)
STACKENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA,SS:
STACK
ORG200H
START:
MOVAX,DATA
MOVDS,AX
MOVAX,STACK
MOVSS,AX
MOVAX,OPR1
ADDAX,OPR2
JGESTORE
NEGAX
STORE:
MOVRESULT,AX
RET
CODEENDS
ENDSTART
5)子程序定义伪指令
程序名PROCFAR/NEAR
RET
程序名ENDP
子程序中,最后一条指令一般是RET指令,返回主程序;
若无属性,则默认为NEAR属性。
第二节汇编语言程序的上机过程
一、汇编程序的作用
编辑程序——*.ASM——汇编程序——*.OBJ——连接程序——*.EXE
源程序目标文件可执行文件
汇编语言是助记符,标号,符号等符号语言,写成源文件后,不能由CPU执行,必须经过汇编程序翻译成机器语言,生成二进制代码文件*.OBJ,汇编过程中,汇编程序可指出源程序中的错误。
*.OBJ是二进制文件,也不能直接运行,必须经过连接,将目标文件与库文件,其他目标文件连接文件生成可执行文件*.EXE。
二,上机过程
由上述流程可知,为运行汇编语言程序至少需要下列文件:
QE.COM/EDIT.COM/EDLIN.COM……用于编辑源程序,也可以在WINDOWS下的TEXT。
TC必须以.ASM后缀。
ASM.EXE或MASM.EXE………………汇编程序ASM.EXE不支持宏汇编,
LINK.EXE………………………………连接程序.
另外,可有以下辅助程序:
DEBUG.COM……………………………调试工具
EXEZBIN.EXE…………………………将EXE文件转换为.COM文件,也是一种可执行文件.(详情不讲).
步骤:
1)建立源文件
用各种文本编辑软件编写源文件,但必须用*.ASM为后缀,不能是WORD等格式。
2)用ASM或(MASM.EXE)产生目标文件.
例:
C:
>
ASMMY.ASM回车
则显示以下内容:
版本号(略)
OBJECTFILENAME[MY.OBJ]——目标文件名,必须有,可回车生成MY。
OBJ或输入新的目标文件名后回车。
SOURCELISTING[NUL.LST]——LST文件即列表文件,列出源程序与目标机器语言清单,给出符号表,可有可无,不要则回车确认.
CROSSREFERENCE[NUL.CRF]用于产生交叉引用表;
一般不要可回车跳过.
WARRINGERRORS---警告错误
SEVEREERRORS----严重错误;
一般在其后给出错误行号与错误类型.
3)用LINK文件产生*.EXE文件
LINKMY.OBJ
版本号
RUNFILE[MY.EXE]:
——可执行文件名可回车默认MY.EXE也可以回车.
LBTFILE[NUL.MAP]:
——列表文件,给出每个段在存储器中的分配情况,不要则回车
LIBRARIES[.LIB]:
——程序运行所须的库文件,一般没有,回车跳过.
WARNING:
NOSTACKSEGMENT:
——程序中如无定义堆栈段,会出现此情况,不影响程序运行.
THEREWASNERRORSDETECTED:
连接时发现N个错误.
4)程序执行
MY回车
注:
①第二步,第三步时可直接在文件名后加”;
”.以默认以下各项,不用一一回车。
②若第二步有错误,应不执行第二步,而是先修改源程序.
③执行程序时不要输入.EXE等后缀.
第三节DOS系统功能及BIOS功能调用
DOS功能调用使用方法;
DOS的键盘输入(1#,8#调用);
字符串输入(10#9#调用);
常用BIOS调用.
DOS调用的1、2、8、9、10#调用,从键盘接收字符并处理。
基本要求:
掌握常用的DOS功能调用如1号、2号、9号、10号的使用方法;
会使用DOS功能调用来进行输入、输出程序设计。
难点内容:
9号、10号功能的缓冲区设置;
字符的存放和处理。
系统功能调用是DOS为用户提供的一组子程序模块,用INT21H进入,用不同的功能号进入各子程序,方法如下:
1)在AH寄存器中设定所需调用的功能号。
2)根据功能的规定设定入口参数。
3)用INT21H进入子程序。
4)根据规定,从相应的寄存器取得返回值。
常用的几个DOS调用如下:
功能号(AH)
功能
调用参数
返回参数
01
键盘输入并回显
AL=输入字符
02
显示输出
DL=输出字符
08
键盘输入,无回显
09
显示字符串
DS:
DX=串地址
“$”结束字符串
0A
键盘输入字符串到缓冲区
DS:
DX=缓冲区首地
DX=缓冲区最大字符数
DX+1=实际输入字符数
1、1号调用
等待从键盘输入一个字符,如果是数字、字母则在屏幕显示,并将其对应字符的ASCII码送AL。
MOVAH,1
INT21H;
若键入A,则屏幕显示A,AL中内容为41H
2、2号调用
将DL中内容对应的字符显示在屏幕上。
如:
MOVAH,2
MOVDL,‘A’
INT21H;
则屏幕显示A。
3、8号调用:
类似1号调用,但屏幕不显示。
4、9号调用
显示多个字符到屏幕,即字符串。
要求:
串的段地址在DS,偏移地址在DX,字符串必须以$结尾.
MESSAGDB‘HOWDOYOUDO!
’,13,10,’$’
MOVAH,9
MOVDX,SEGMESSAG
MOVDS,DX
MOVDX,OFFSETMESSAG
INT21H
5、10号调用
从键盘接收一串字符存入用户定义好的缓冲区中
定义的缓冲区第一字节为保存最大字符数(用户写入,实际输入大于此数时)发“嘟”声光标止,第二字节为实际输入的字符个数,系统添入字符串从第三个字节开始存入,最后的回车符也占一个字节
向指定的存储单元送10个字符,并将其显示出来
DATASEGMENT
BUFDB12
DB0
DB12DUP(?
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
MAINPROCFAR
START:
MOVAX,DATA;
BUF的段地址已在DS
MOVDS,AXMOVAH.,OFFSETBUF;
偏移地址送DS
MOVAH,OAH
INT21H
LEADX,BUF+1
MOVBX,DX
MOVAL,[BX];
输入的字符数送入AL
MOVAH,0
ADDBX,AX;
BX值+送入字符数
INCBX;
BX+1指向串尾
MOVAL,’$’
MOV[BX],AL;
添加串结束标志
MOVAH,9
INCDX;
DX指向串首
INT21H;
MAINENDP
CODEENDS
例2:
将CL中的低四位在屏幕上显示出来.
分析:
CL中的低四位可能为0—9,A—F,而屏显时要用其ASCII码,只要将其值转化为ASCII码后即可用DOS的2#功能将其显示,
方法:
建立一个对应的ASCII码表格。
TABLEDB‘0’,‘9’,‘A’,‘B’,---‘E’,‘F’
MAINPROCFAR
PUSHDS
MOVAX,0
PUSHAX
MOVAX,DATA
ANDCL,0FH
MOVBX,OFFSETTABLE
MOVCH,0
ADDBX,CL
MOVAL,[BX]
MAINENDP
将CL中内容在屏幕上显示出来。
学生根据上例,自己动手编程,并找同学解释!
有关BIOS调用不讲,学生课余参考清大版《IBM-PC-设计》沈美明等编。
作业:
1、2
第四节循环程序设计
一、程序设计的一般步骤
⑴分析题意,确定算法。
恰当的算法及适当的数据结构可以使程序简洁易读、执行效率高,是编制高质量程序的关键。
⑵画出程序流程图
减少出错,思路清晰。
⑶根据流程图编制程序。
⑷上机调试。
二、循环程序设计的基本形式
一般情况下,循环程序设计有两种形式:
⑴DO_WHILE结构
控制条件在循环程序的入口,先判断入口条件,满足则执行循环体,不满足条件则退出循环。
N
Y
DO_WHILE结构DO_UNTILL语句结构
⑵DO_UNTILL语句结构
先执行一次循环体,再判断控制条件。
LOOP循环
三、实例分析
例一:
试编制程序把BX寄存器内的二进制以十六进制形式在屏幕上显示出来。
分析:
1、二进制到十六进制显示必须转换成ASCII码,即0—9、41H—46H
2、BX寄存器为16位,共有4组4位二进制位,可用一个循环次数为4的循环逐一显示。
3、取出四位二进制位可以用循环左移指令,再将高四位与0FH相与。
程序清单:
CODESEGMENT;
定义代码段,无需其他段
ASSUMECS:
CODE;
段分配
MAINPORCFAR;
定义主程序
START:
PUSHDS
MOVAX,0
PUSHAX
MOVCH,4;
循环次数为4
LOOP1:
MOVCL,4
ROLBX,CL;
BX循环左移四位
MOVAL,BL
ANDAL,0FH;
取其低四位
ADDAL,30H;
转换为ASCII码
CMPAL,3AH
JLDISP;
若小于10,转换完毕
ADDAL,7;
若大于10,需转换到A—F
DISP:
MOVDL,AL
MOVAH,2
INT21H;
显示
DECCH;
循环次数减一
JNZLOOP1;
循环完成否?
否,则继续循环
RET;
完成则退出
MAINENDP
CODEENDSY
ENDSTART
例二、设有数组X与Y,分别有X1~X10与Y1~Y10个元素,试编程计算
结果存放到Z数组。
可以用循环实现,循环次数为10,先算出
再算出
,但是应该注意:
循环体内部有两种操作,应该加以判断。
判断方法:
设定一个逻辑尺,给定每一步骤要进行的操作。
如0011011100其中0表示执行加法,1表示执行减法。
(重点掌握此方法技巧)
因为有数组的定义,所以此程序中应定义数据段。
DATASEGMENT
XDBX1,X2,X3,X4,X5,X6,X7,X8,X9,X10
YDBY1,Y2,Y3,Y4,Y5,Y6,Y7,Y8,Y9,Y10
ZDW10DUP(?
DATAENDS
CODESEGMENT
MIANPROCFAR
PUSHDS
MOVAX,0
PUSHAX
MOVAX,DATA
MOVDS,AX
MOVBX,0
MOVCX,10
MOVDX,0000000011011100B
NEXT:
MOVAX,Y[BX]
SHRDX,1
JCSUBXY
ADDAX,Y[BX]
JMPOK
SUBXY:
SUBAX,Y[BX]
OK:
MOVZ[BX],AX
ADDBX,2
LOOPNEXT
RET
CODEENDS
ENDSTART
很多情况下,循环体中也嵌套有循环,此时应注意从外层循环再次进入内层循环时,一定要注意重新设定内层循环条件。
例三、分析下列程序段,指出此程序段的功能是什么?
执行结果是什么?
MOVAX,1000H
MOVDS,AX;
DS=1000H
MOVSI,2000H
MOVCX,100
MOVAL,[SI];
将[DS*16d+SI]给AL
LP:
CMPAL,[SI+1];
[12000H]与[12001H]比较
JGENEXT;
大于则与下一个比较
MOVAL,[SI+1];
小于则将[12001]存入AL
INCSI
LOOPLP
MOVMIN,AL
MOVAX,4C00H
INT21H
结果:
MIN单元存放100个字节中的最大数。
功能:
从12000H开始的单元的100个字节中找出最大数存放到MIN单元。
例五、编程将从S1单元开始的连续存放的8字节数与从S2开始连续存放的8字节数相减,结果存放到S1开始的单元中(低位在前,高位在后)。
S1、S2分别为8字节数,目的是球差,多位数相减时应考虑借位。
S1第7字节第6字节第5字节……第1字节第0字节
+S2第7字节第6字节第5字节……第1字节第0字节
S1DB8DUP(?
S2DB8DUP(?
MOVAX,0
MOVAX,DATA
MOVDS,AX
MOVCX,8
LEASI,S1
LEABX,S2
MOVAL,[SI]
SBBAL,[BX]
MOV[SI],AL
INCSI
INCBX
第五节分支程序设计
在程序设计中,往往要根据不同的情况来选取某一种操作,一般的,分支结构有IF_THEN_ELSE和CASE两种形式。
YN
IF_THEN_ELSECASE
第一种适用于2分支结构,第二种适用于多分支结构。
一般用条件转移指令来实现分支程序设计。
例一、编程求函数
X由XX单元给出,Y由存放到YY单元。
XXDB10
YYDB?
ASSUMECD:
MAINPROCFARN
MOVAX,0Y
MOVAX,DATAY
MOVDS,AXN
MOVAX,XX
CMPAL,0
JGEBIGER
MOVAL,0FFH
BIGER:
JE
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 微机 教案 第四 OK