《汇编语言程序设计》实验教学大纲Word文件下载.docx
- 文档编号:21351712
- 上传时间:2023-01-29
- 格式:DOCX
- 页数:21
- 大小:52.54KB
《汇编语言程序设计》实验教学大纲Word文件下载.docx
《《汇编语言程序设计》实验教学大纲Word文件下载.docx》由会员分享,可在线阅读,更多相关《《汇编语言程序设计》实验教学大纲Word文件下载.docx(21页珍藏版)》请在冰豆网上搜索。
实验目的:
1.熟悉DEBUG的功能,运行并掌握其常用命令。
2.使用DEBUG,通过数据传送指令观察IBM-PC机各种寻址方式的区别。
实验内容:
1.DEBUG的加载及其常用命令(A、U、R、D、E、T、P、G、Q)的使用情况。
(注意:
微机进入DEBUG状态下之后,一切立即数和地址数据均被默认为十六进制数,在输入时数的后面不加后缀“H”。
)
2.将数据段中的两个数求和,结果保存在数据段中。
源程序、机器语言程序如下:
CS:
0100Al0000MOVAX,[0000]
010303060200ADDAX,[0002]
CS;
0107A30400MOV[0004],AX
010ACBRETF
数据段内容如下:
DS:
000023012500;
两个已知数
3.在Debug中编制简单的汇编程序片断,并调试运行,得出结果。
实验主要步骤:
1.在DOS或Windows的命令行窗口执行命令Debug.exe,进入Debug程序环境,熟悉Debug各个命令的用法。
2.实验步骤
(1)用E命令键人上述机器语言程序和数据段的初值。
—EDS:
00023012500
0062A2A2A(2A为*,是为便于查看数据段内容而设置)
—ECS:
100A1000003060200
107A30400CB
(2)用D命令检查数据段、代码段内容。
—DDS:
—DCS:
100
(3)用T命令逐条执行上述程序,注意观察每条指令执行后相应寄存器的变化。
(4)用U命令反汇编本程序。
—U10010A
(5)用R命令修改IP的内容为0100重新执行上述程序。
—RIP
显示:
IP010A
:
0100
(6)用G命令运行程序。
—G=CS:
0100107
观察:
IP=AX=
010010A
IP=AX=
3.自己试着写段程序:
-A100↙
16C6:
0100DB‘1234567890‘↙
010ACLD↙
010BMOVSI,100↙
010EMOVDI,200↙
0111MOVCX,A↙
0114REPMOVSB↙
0116↙
-G=10A116↙;
运行上述程序(起始地址10AH,结束地址116H)。
-D100LA↙;
显示DS:
100开始10个字节内容
01003132333435363738-3930‘1234567890
-DES:
200LA↙显示ES:
02003132333435363738-3930‘1234567890
4.写出实验报告。
实验二、熟悉指令系统
1.熟悉8088/8086的指令书写格式、功能。
2.能熟练运用数据传递、算术、逻辑三类指令。
1.用DEBUG调试程序功能编程序计算(W—(X×
Y+Z—540))/X。
其中X、Y、Z、W均为16位带符号数,要求上式计算结果的商存人AX寄存器中,余数存人DX寄存器。
掌握算术指令的用法。
2.用DEBUG编程并查看逻辑指令的运行结果,掌握逻辑指令的用法。
3.熟悉其它几组指令的功能和用法,并区分字、字节操作。
1.预先编制程序片段,实现(W—(X×
Y+Z—540))/X,将计算结果的商存人AX寄存器中,余数存人DX寄存器。
参考程序代码如下:
DATASEGMENT
XDW1200H
YDW0034H
ZDW0F045H
WDW034AH
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
MOVAX,X
IMULY
MOVCX,AX
MOVBX,DX
MOVAX,Z
CWD
ADDCX,AX
ADCBX,DX
SUBCX,540
SBBBX,0
MOVAX,W
SUBAX,CX
SBBDX,BX
IDIVX
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
2.可以在Debug程序中使用E命令为变量X、Y、Z、W设置初值。
3.使用A命令汇编程序片段,并用G或T命令执行,用R或D命令查看结果。
4.使用A命令汇编几条逻辑指令,并运行,查看结果。
5.写出实验报告。
实验三、建立运行汇编语言程序
1.掌握汇编语言程序格式及其它命令的作用。
2.掌握汇编、连接、运行汇编程序的全过程,并能检查修攙程序简单错误。
1.编写程序,比较两个字符串STRINGl和STRING2所含的字符是否相同。
若相同,则显示'
Match'
;
否则,显示'
Nomatch'
。
2.编辑、汇编、连接这个汇编语言源程序,形成.EXE文件。
3.通过DEBUG调试运行该可执行文件,查看运行结果。
1.根据要求编制汇编源程序。
参考程序如下:
STRINGlDB‘Movethecursorbackward.’
STRING2DB‘Movethecursorbackward.’
MESSlDB‘Match.’,13,10,‘$’
MESS2DB‘NOMatch!
’,13,10,‘$’
PROGSEGMENT
PROG,DS:
DATA,ES:
MOVAX,DATA
MOVDS,AX
MOVES,AX
LEASI,STRINGl
LEADI,STRING2
CLD
MOVCX,25
REPZCMPSB
JZMATCH
LEADX,MESS2
JMPSHORTDISP
MATCH:
LEADX,MESSl
DISP:
MOVAH,09
1NT21H
MOVAH,4CH
PROGENDS
2.使用记事本或其它字处理软件(Edit.exe)编辑该源文件。
3.使用Masm、Link程序汇编、连接该文件,形成可执行的.EXE文件。
参考步骤如下:
(1)调用全屏幕编辑程序EDlT建立ASM文件。
C>
EDIT
输入实验内容1的源程序并以SAMPLE.ASM为文件名将文件存盘。
(2)用汇编程序MASM对源文件SAMPLE.ASM汇编并产生目标文件SAMPLE.OBJ。
MASMSAMPLE
如汇编指示有错误,则需重新调用编辑程序修改程序中的错误,直至汇编通过为止。
(3)用连接程序LINK产生执行文件SAMPLE.EXE。
LINKSAMPLE
(4)执行程序。
可直接从DOS状态执行程序。
SAMPLE
显示器上显示出程序的运行结果。
Match.
4.也可以使用Debug调试运行这个.EXE文件,并查看运行结果。
对实验内容修改两个字符串的内容,使它们互不相同,再观察程序的运行结果。
实验四、循环程序设计
1.加深对循环程序的理解。
2.能构造出正确的循环结构并能实现较复杂的算法。
1.编制程序,要求如下:
从键盘接收一个四位的16进制数,在终端上显示与它等值的二进制数。
1.根据要求,画出程序框图,写出汇编源代码。
Begin:
MOVBX,0;
用于存放四位的16进制数
MOVCH,4
MOVCL,4
INPUT:
SHLBX,CL;
将前面输入的数左移4位
MOVAH,1;
从键盘取数
INT21H
CMPAL,30H;
<
0吗?
JBINPUT;
不是"
0~F"
的数重新输入
CMPAL,39H;
是"
0~9"
吗?
JAAF;
不是,转"
A~F"
的处理
ANDAL,0FH;
转换为:
0000B~1001B
JMPBINARY
AF:
ANDAL,11011111B;
转换为大写字母
CMPAL,41H;
又<
A吗?
CMPAL,46H;
>
F吗?
JAINPUT;
的数重新输入
转换为1010B~1111B
ADDAL,9
BINARY:
ORBL,AL;
将键盘输入的数进行组合
DECCH
JNZINPUT
MOVCX,16;
将16位二进制数一位位地转换成ASCII码显示
DISP:
MOVDL,0
ROLBX,1
RCLDL,1
ORDL,30H
MOVAH,2;
进行显示
LOOPDISP
STOP:
RET
2.上机编辑源程序,并汇编、连接、调试运行,查看结果。
3.写出实验报告。
实验五、分支程序设计
1.加深对分支程序的理解,掌握分支程序的结构。
熟悉运算类指令对标志位的状态影响以及标志位状态的表示方法;
掌握条件转移、无条件转移指令的使用方法。
2.掌握分支程序设计、编写、调试和运行的方法。
1.试编写小程序:
对键盘输入的小写字母用大写字母显示出来。
参考程序段如下:
MOVAH,1;
从键盘输入一个字符
CMPAL,'
a'
;
输入字符<
'
JBSTOP
z'
;
输入字符>
JASTOP
SUBAL,20H;
转换为大写字母或ANDAL,11011111B也可以
MOVDL,AL;
显示一个字符
MOVAH,2
JMPBegin
STOP:
2.编制程序统计学生成绩。
要求如下:
设有10个学生的成绩分别为56、69、84、82、73、88、99、63、100和80分。
试编制程序分别统计低于60分、60~69分、70~79分、80~89分、90~99分及100分的人数存放到s5、s6、s7、s8、s9及s10单元中。
这一题目的算法很简单,成绩分等部分采用分支结构,统计所有成绩则用循环结构完成。
1.根据要求,画出程序框图如下图所示,然后写出汇编源代码。
开始
初始化计数单元
初始化循环计数值
初始化首地址
取一个成绩
Y
60?
S5+1
N
70?
S6+1
80?
S7+1S7+1
90?
S8+1S8+1
N
=100?
S9+1
Y
S10+1
修改地址
N
循环结束?
Y
结束
程序框图
PROGRAMTITLEGOESHERE――result
************************************
datareasegment;
definedatasegment
gradedw56,69,84,82,73,88,99,63,100,80
s5dw0
s6dw0
s7dw0
s8dw0
s9dw0
s10dw0
datareaends
prognamsegment;
definecodesegment
----------------------------
mainprocfar;
mainpartofprogram
assumecs:
prognam,ds:
datarea
start:
;
startingexecutionaddress
;
setupstackforreturn
pushds;
saveolddatasegment
subax,ax;
putzeroinAX
pushax;
saveitonstack
setDSregistertocurrentdatasegment
movax,datarea;
datareasegmentaddr
movds,ax;
intoDSregister
MAINPARTOFPROGRAMGOESHERE
movs5,0;
initializecounter
movs6,0
movs7,0
movs8,0
movs9,0
movs10,0
movcx,10;
initializeloopcountvalue
movbx,offsetgrade;
initializefirstaddr
compare:
movax,[bx];
getaresult
cmpax,60;
<
jlfive
cmpax,70;
jlsix
cmpax,80;
jlseven
cmpax,90;
jleight
cmpax,100;
=100?
jnenine
incs10
jmpshortchange-addr
nine:
incs9
eight:
incs8
jmpshortchange-addr
seven:
incs7
six:
incs6
five:
incs5
change-addr:
addbx,2
loopcompare
ret;
returntoDOS
mainendp;
endofmainpartofprogram
------------------------------
prognamends
***************************
endstart;
endassembly
实验六、子程序设计
1.掌握子程序设计方法,能合理划分子程序。
2.掌握汇编子程序的定义、调用、返回、参数传递等有关问题的实现,以及运行过程中的堆栈、标志位变化情况。
1.编写子程序嵌套结构的程序,把整数分别用二进制和八进制形式显示出来。
主程序BANDO:
把整数变量VAL1存入堆栈,并调用子程序PAIRS;
子程序PAIRS:
从堆栈中取出VAL1,调用二进制显示子程序OUTBIN,显示出与其等效的二进制数;
输出8个空格;
调用八进制显示子程序OUTOCT显示与其等效的八进制数;
调用输出回车及换行符子程序。
1.画出程序流程图,合理划分子程序,正确区分主程序与各子程序的功能与关系。
2.编制主程序与子程序的源代码。
VAL1DW?
CRLFDW0DH,0AH,'
$'
BANDOPROCFAR;
主程序BANDO
ASSUMECS:
CODE,DS:
START:
PUSHDS;
设置返回DOS
SUBAX,AX
PUSHAX
MOVAX,DATA
MOVDS,AX;
给DS赋值
PUSHVAL1
CALLPAIRS
BANDOENDP
PARISPROCNEAR;
PARIS子程序
PUSHBP
MOVBP,SP
PUSHBX
MOVBX,[BP+4];
从堆栈中取出VAL1
CALLOUTBIN;
调用二进制显示子程序
MOVCX,8;
显示8个空格
SPACE:
MOVDL,'
'
LOOPSPACE
CALLOUTOCT;
调用八进制显示子程序
CALLDISP_CRLF
POPBX
POPBP
RET2
PARISENDP
OUTBINPROCNEAR;
二进制显示子程序
MOVCX,16
ONEBIT:
ROLBX,1
MOVDX,BX
ANDDX,1
ORDL,30H;
转换为ASCII码
LOOPONEBIT
OUTBINENDP
OUTOCTPROCNEAR;
八进制显示子程序
ROLBX,1;
16位二进制数包含6位八进制数,最高位仅1位
MOVCX,5;
余下还有5位八进制数
NEXT:
PUSHCX
MOVCL,3;
1位八进制数包含3位二进制数
ROLBX,CL
ANDDX,07H
POPCX
LOOPNEXT
OUTOCTENDP
DISP_CRLFPROCNEAR;
显示回车换行子程序
LEADX,CRLF
MOVAH,09H
DISP_CRLF
CODEENDS
ENDSTART
3.上机编辑源文件,并汇编、连接、调试运行,随时查看堆栈的变化。
4.编写实验报告。
实验七、I/O程序设计
1.熟悉BIOS、DOS中断调用情况,学会如何利用系统功能控制外设的I/O操作
1.分别利用BIOS、DOS中断服务,编程实现对键盘、显示器等的控制。
2.实验编程:
在AX中存放着压缩BCD的十进制数,编程实现把AX中的四位十进制数按照从高位到低位的顺序在屏幕上显示出来(例如若AX=0010001101000101B,则在屏幕上显示“2345”)。
1.根据要求编写汇编源代码,核心代码参考如下:
MOVBX,AX
MOVCL,4
SHRAH,CL
ADDAH,30H
MOVDL,AH
MOVAH,2
INT21H‘显示“2”
MOVAH,BH
ANDAH,0FH
INT21H‘显示“3”
MOVAL,BL
SHRAL,CL
ADDAL,30H
MOVDL,AL
INT21H‘显示“4”
ANDAL,0FH
NT21H‘显示“5”
2.上机编辑源文件,汇编、连接、调试运行,查看结果。
3.编写实验报告。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 汇编语言程序设计 汇编语言 程序设计 实验教学 大纲