汇编语言程序设计实验指导Word文档格式.docx
- 文档编号:20584560
- 上传时间:2023-01-24
- 格式:DOCX
- 页数:44
- 大小:36.97KB
汇编语言程序设计实验指导Word文档格式.docx
《汇编语言程序设计实验指导Word文档格式.docx》由会员分享,可在线阅读,更多相关《汇编语言程序设计实验指导Word文档格式.docx(44页珍藏版)》请在冰豆网上搜索。
3)用T命令逐条运行这些指令,检查并记录有关寄存器及ZF情况。
3、带进位加减法:
1)用A命令在内存200H处键入下列内容,并用U命令检查:
MOVAH,12
MOVAL,84
MOVCH,56
MOVCL,78
ADDAL,CL
ADCAH,CH
MOVDH,A7
MOVDL,58
SUBDL,7F
SBBDH,34
2)用T命令逐条运行这些指令,检查并记录有寄存器及CF内容。
3)上面这段程序若改用16位操作指令达到同样结果,怎么改?
试修改并运行之。
*4、BCD码加减法(选作)
1)内容:
MOVAL,65
ADDAL,16
DAA
2)要求:
用A命令键入,U命令检查,T命令逐条运行并记录有关寄存器及AF内容。
相加后AL值本来是7B,经DAA指令调整后变为81,即65和16两个BCD码的和。
实验二内存操作数及寻址方法
1、DEBUG命令:
A,T,D,F,G;
2、数据在内存中的存放方式和内存操作数的几种寻址方式;
3、汇编指令:
INC,DEC,LOOP,INT3的应用;
4、汇编语言伪指令:
BYTEPTR和WORDPTR的应用。
(可以只用byte和word)
实验内容和步骤
一、内存操作数及各种寻址方式使用
程序内容:
MOVAX,2000
MOV[200],AX
MOVBX,210
MOVBYTEPTR[BX],50
MOVCL,40
INCBX
MOV[BX],CL
DECCL
MOVSI,5
MOV[BX+SI],CL
MOV[BX+SI+1],CL
MOVWORDPTR[BX+SI+2],1234
操作步骤
1)用A命令键入上述程序,并用T命令逐条运行。
2)每运行一条有关内存操作数的指令,要用D命令检查并记录有关内存单元的内容并注意是什么寻址方式。
D命令显示结果时,双字节数在内存的存放是高地址对应高数据位;
指令中出现的BYTEPTR及WORDPTR是因为操作数的宽度必须一致。
二、求累加和程序
程序内容:
MOVBX,200
MOVCX,9
XORAX,AX
ADDAL,[BX];
按字节相加
ADCAH,0;
若有进位则到AH中
LOOP108
INT3
操作步骤:
1)进入DEBUG环境。
2)用命令F200L1040在内存200H-20FH地址处填入一系列值40H。
3)用命令A100将上述程序键入到100H开始的内存中。
LOOP指令用到108H号地址,即为ADD指令的当前地址,构成一个循环。
4)用命令G=100执行该程序段,程序运行后停在INT3指令上,此时观察AX寄存器
的值为240H,即为9个40H的和。
INT3指令是一条断点中断指令,程序遇到该指令则停止。
5)用T=100命令单步执行,观察IP、CX及AX寄存器的值,分析程序执行过程。
实验三数据串传送和查表程序
1、利用简化段定义方法实现程序结构定义;
2、利用DOS的21H号中断调用完成输入输出;
3、查表法和查表指令XLAT;
4、数据串传送指令MOVS及重复前辍REP;
5、掌握EQU和DUP伪指令的用法。
实验内容及步骤
一、利用查表方法显示内存单元的内容
1、编辑下列程序:
.modelsmall
.stack
.data
str1db'
ABCDEFGHIJ'
;
待显示的内存区内容
str2db'
Pleaseinputthenumberyouwilldisplay:
'
10,13,'
$'
.code
.startup
movah,9
movdx,offsetstr2
int21h;
显示STR2字符串的内容,即提示信息
movah,1
输入待显示的字符序号(0-9)
movbx,offsetstr1
subal,30h
xlat;
查STR1表,对应序号的字符ASCII码进入AL
movdl,al
movah,2
显示对应字符
.exit0
End
2、程序汇编通过后,在运行过程中输入0-9的任意数字,显示STR1字符串中对应位置的字符。
3、在DEBUG环境中,用P命令调试执行该程序,察看AL寄存器的变化情况及结果的输出,分析其执行过程。
二、数据串传送程序
abcdefghijklmn'
源串定义
lengsequ$-str1
str2dblengsdup(?
),'
目标串
movax,ds
moves,ax;
使DS和ES为同一个段
cld
leasi,str1
leadi,str2
movcx,lengs
repmovsb;
串复制
显示目标串
2、程序汇编通过后,运行程序察看输出结果。
3、在DEBUG环境中,用P命令调试执行该程序,察看SI、DI寄存器及相应内存单元的变化情况,分析其执行过程。
4、如果把源串的小写字母复制到目标串的同时再修改为对应的大写字母,该怎么修改程序?
实验附录ASCII码表
编码
字符
00
NUL
20
SPACE
40
@
60
`
01
SOH
21
!
41
A
61
a
02
STX
22
“
42
B
62
b
03
ETX
23
#
43
C
63
c
04
EOT
24
$
44
D
64
d
05
ENQ
25
%
45
E
65
e
06
ACK
26
&
46
F
66
f
07
BEL
27
‘
47
G
67
g
08
BS
28
(
48
H
68
h
09
HT
29
)
49
I
69
i
0A
LF
2A
*
4A
J
6A
j
0B
VT
2B
+
4B
K
6B
k
0C
FF
2C
4C
L
6C
l
0D
CR
2D
4D
M
6D
m
0E
SO
2E
.
4E
N
6E
n
0F
SI
2F
/
4F
O
6F
o
10
DEL
30
50
P
70
p
11
DC1
31
1
51
Q
71
q
12
DC2
32
2
52
R
72
r
13
DC3
33
3
53
S
73
s
14
DC4
34
4
54
T
74
t
15
NAK
35
5
55
U
75
u
16
SYN
36
6
56
V
76
v
17
ETB
37
7
57
W
77
w
18
CAN
38
8
58
X
78
x
19
EM
39
9
59
Y
79
y
1A
SUB
3A
:
5A
Z
7A
z
1B
ESC
3B
;
5B
[
7B
{
1C
FS
3C
<
5C
\
7C
|
1D
GS
3D
=
5D
]
7D
}
1E
RS
3E
>
5E
^
7E
~
1F
US
3F
?
5F
_
7F
实验四完整段定义程序实现
1、掌握完整段格式定义的程序设计方法;
2、掌握伪指令:
SEGMENT、ENDS、ASSUME、END、OFFSET、DUP;
3、掌握汇编语言程序中指名程序入口的方法;
4、了解用INT21H的4C号功能调用返回系统的方法;
5、掌握用MASM、LINK工具进行汇编和链接的过程。
实验内容
要求程序中实现对键盘输入的字符作如下处理:
●如果输入的是小写字母则转换成对应的大写字母并显示在屏幕上;
●如果输入的是大写字母则转换成对应的小写字母并显示在屏幕上;
●如果输入的是键盘上的Esc键则退出程序执行;
●按其它任意可显示键,则不作处理,直接显示输出。
实验步骤
DATASEGMENT;
数据段定义
MESSAGEDB'
Pleaseinputyourkey!
0DH,0AH,'
DATAENDS
STACKSEGMENTPARASTACK'
STACK'
堆栈段定义
DB50DUP(?
STACKENDS
CODESEGMENT;
代码段
ASSUMECS:
CODE,DS:
DATA,SS:
STACK;
分配段寄存器
START:
MOVAX,DATA
MOVDS,AX
MOVDX,OFFSETMESSAGE
MOVAH,9
INT21H;
显示提示信息
AGAIN:
MOVAH,1
读入一个键盘按键
CMPAL,1BH;
按的是ESC键(ASCII码为1BH)则退出程序
JEEXIT
CMPAL,61H
JBNEXT
CMPAL,7AH
JANEXT
SUBAL,20H;
ASCII码在61H和7AH之间(小写字母)则转换为大写字母
JMPDISP
NEXT:
CMPAL,41H
JBDISP
CMPAL,5AH
JADISP
ADDAL,20H;
ASCII码在41H和5AH之间(大写字母)则转换为小写字母
DISP:
MOVDL,AL
MOVAH,2
显示当前字符
JMPAGAIN;
循环
EXIT:
MOVAH,4CH;
结束程序
INT21H
CODEENDS
ENDSTART;
指定START标号为程序入口地址
2、把上述程序保存为ASM源文件,利用MASM根据对源文件进行汇编,产生.OBJ文件,若汇编时提示有错,编辑工具修改源程序后重新汇编,直至通过。
3、用LINK将.OBJ文件连接成可执行的.EXE文件。
4、在DOS状态下运行LINK产生的.EXE文件,按过键盘之后在屏幕上显示实验要求的字符,按ESC键可返回DOS。
汇编过程中若出现错误,可参阅本章最后的实验附录。
5.把上述程序改为简化段定义格式,再汇编,查看执行结果。
实验五分支结构程序设计
1、掌握利用无条件转移指令JMP和有条件转移指令实现多分支程序的设计方法。
2、掌握用DOS的中断调用,实现再程序执行过程中从键盘动态输入字符串的方法。
3、掌握程序中标号的定义和使用。
实现从键盘输入一个月份数值(1-12),根据输入的月份数值显示相应的月份英文单词缩写,如输入5则显示May。
mondb'
Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec'
msg1db'
Pleaseinputamonth(1-12):
13,10,'
msg2db'
Inputerror!
Nowtryagain...'
bufferlabelbyte;
定义输入月份的输入缓冲区
maxlendb3;
最多2个数字,包括一个回车
actlendb?
保存实际输入的字符个数
stringdb3dup(?
);
保存输入的月份数字内容(ASCII码)
shuru:
开始输入月份编号
leadx,msg1
movah,09h
leadx,buffer
movah,0ah
输入月份数值
cmpactlen,0;
若没有输入月份则转出错处理
jeshuruerr
;
以下判断输入月份是否合法
leadi,string
cmpactlen,2
jeda10;
若输入的是2位数月份值则转到da10标号处执行
moval,string;
若只输入1位数字月份值,则读出该值
andal,0fh;
把ASCII码转换为对应数字
jmpjisuan
da10:
moval,string
把月份数值十位的ASCII码转换为对应数字(如12月的1字)
movbl,10
mulbl
andstring[1],0fh;
把月份数值个位的ASCII码转换为对应数字
addal,string[1];
十位加上个位(如12月)
jisuan:
以下计算偏移地址
cmpal,1;
比1小是非法月份
jbshuruerr;
若月份值小于1则转出错处理
cmpal,12
jashuruerr;
比12大也是非法月份
subal,1;
月份值减1
shlal,1
shlal,1;
月份再乘4对应了MON字符串中从首地址开始的字符相对位置
xorah,ah;
1月份从0位置开始即JAN,...5月份从位置16开始即MAY
leasi,mon;
找到被显示月份字符的位置
addsi,ax
movcx,3
output:
movdl,[si];
输出对应月份英文缩写
movah,2
int21h
incsi
loopoutput
.exit0
shuruerr:
leadx,msg2;
输入出错时提示出错,并转到程序起始处重新执行
movah,09h
jmpshuru
end
3、程序运行中不输入月份值(直接回车),或输入非法月份值,观察程序执行的情况。
实验六分支与循环混合结构程序设计
1、掌握利用.IF语句实现分支程序的设计方法;
2、掌握利用.REPEAT语句实现循环程序的设计方法;
3、掌握DIV指令的使用特点;
4、掌握地址表的定义和使用方法。
实现成绩单的分等级统计功能,在数据段中有成绩单的定义,并包含有若干个分数,程序根据成绩单数据的个数循环分别统计个分数段成绩的个数,最后输出个等级段的分数个数。
要求:
成绩单数据少于100字节,输出的每个档次统计值按两位数显示。
HANDB42,62,68,70,79,82,85,90,95,99,66,88,78,90,98,200;
成绩单
countequ$-han;
记录数据个数
MEMDB6dup(0);
分别用于存放各分数段成绩的个数
scoreedb10,13,'
Score"
E"
countis:
定义各分数段的提示信息
scoreddb10,13,'
D"
scorecdb10,13,'
C"
scorebdb10,13,'
B"
scoreadb10,13,'
A"
scoreodb10,13,'
Other"
tabledwscoreo,scoree,scored,scorec,scoreb,scorea;
定义地址表
MOVCX,count
movsi,0
begin:
统计各个分数段的成绩个数
.ifhan[si]<
addmem[1],1
.elseifhan[si]>
=60&
han[si]<
=69
addmem[2],1
=70&
=79
addmem[3],1
=80&
=89
addmem[4],1
=90&
=99
addmem[5],1
.else
addmem[0],1
.endif
loopbegin
movcx,6
.repeat;
开始循环
movsi,cx
decsi
addsi,si;
计算地址表中对应地址项与提示信息的对应关系
movdx,table[si]
xorah,ah
movsi,cx
MOVal,mem[si-1];
读出统计好的一个数值(此处只能处理99以下的)
movbl,10
divbl;
ax/10
movmem[si-1],ah;
AH为余数是个位,暂时存放回该内存单元
movdl,AL;
al为商是十位
adddl,30h;
转换为ASCII码
MOVAH,2
INT21H;
以十进制形式显示十位
movdl,mem[si-1]
adddl,30h
再显示个位
.untilcxz;
CX自动减1,减到0结束循环
END
3、修改成绩单的内容再重新汇编和运行程序,观察程序的结果变化情况。
4、利用DEBUG工具的U命令反汇编可执行程序,观察.IF语句及.REPEAT语句所对应的汇编指令情况。
5、利用MASM的命令行,汇编源文件并生成.LST列表文件,查看列表文件内容。
实际上高级程序结构控制语句在汇编时,都转换成相应的比较指令和条件转移指令了。
高级程序结构控制语句使得程序设计、理解都变得非常方便。
实验七多重循环及过程的应用
1、掌握多重循环程序和排序程序设计方法;
2、掌握带符号数的比较及转移语句应用;
3、伪指令EQU及操作符'
的使用;
4、掌握过程的定义和调用方法;
5、掌握把内存数据(16位有符号2进制)按照10进制显示输出的方法。
完成冒泡法排序程序,利用过程对排好序的数据按10进制显示输出
1、输入下列程序,汇编并连接通过。
arraydw12,-66,108,9,5,-123,2000,-900;
待排序数据
countequ$-array
pushcountdb0;
用于临时存放被显示数据的10进制总位数
.s
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 汇编语言 程序设计 实验 指导