汇编实验报告终.docx
- 文档编号:24123932
- 上传时间:2023-05-24
- 格式:DOCX
- 页数:19
- 大小:222.32KB
汇编实验报告终.docx
《汇编实验报告终.docx》由会员分享,可在线阅读,更多相关《汇编实验报告终.docx(19页珍藏版)》请在冰豆网上搜索。
汇编实验报告终
实验一汇编语言源程序的输入
一、实验目的
1.通过实验了解和熟悉微机系统的配置。
2.学习在DEBUG状态下输入汇编源程序的方法。
3.初步掌握调试(在DEBUG状态下)的过程。
二、实验原理
1.本实验要求在DEBUG状态下输入汇编源程序,并用DEBUG命令进行调试。
用单步跟踪的方法验证指令的功能。
2.以下是给定的参考程序,并在实验时在每条指令的“;”符号右边按要求填写指令的执行结果。
注:
⑴微机进入DEBUG状态下之后,一切立即数和地址数据均被默认为十六进制数,在输入时数的后面不加后缀“H”;
⑵在DEBUG状态下执行程序时,“INT20H”指令可使系统执行完该指令前的程序时返回到“-”提示符状态,并且恢复CS和IP寄存器原来的值。
参考程序:
MOVAX,2000;AL=00H
MOVDS,AX;DS=2000H
NOTAX;AX=DFFFH
XORAX,AX;AX=0000H
DECAX;AX=FFFFH
INCAX;AX=0000H
MOVBX,2030;BH=20H
MOVSI,BX;SI=2030H
MOV[SI],BL;[2030H]=30H
MOVWORDPTR[SI],10F;[2030H]=0FH[2031H]=01H
MOVDI,SI;DI=2030H
MOV[DI+50],BH;[DI+50H]=20H
MOVBH,[SI];BH=0FH
MOVBL,[DI+50];BL=20H
MOVSP,5000
PUSHAX;AX=0000H[SS:
4FFEH]=00H[SS:
4FFFH]=00H
PUSHBX;BX=0F20H[SS:
4FFCH]=20H[SS:
4FFDH]=0FH
POPAX;AX=0F20H
POPF;F=00000000
NEGBX;BX=F0E0H
XCHGBX,AX;BX=0F20H
STD;F=01010001
STI;F=01110001
CLD;F=00110001
CLI;F=00010001
ADCDI,2050;DI=4081HF=00000010//执行过程中考虑上一条指令的进位标志2030【BI】+2050+1(上一条指令的进位标志)
ADCSP,DI;SP=9081HF=10010010
ADCAX,1500;AX=05E0HF=00000001
SUBAX,BX;AX=F6C0HBX=0F20H
SHLAH,1;AH=ECH
RCLAX,1;AX=D981H
SHRBH,1;BH=07H
RCRBL,1;BL=90H
MOVCL,4
MOVDX,80F0
ROLDX,CL;DX=0F08HCL=04H
INT20;CS=00A7HIP=1072H
标志名
标志为1
标志为0
OF溢出(是/否)
OV
NV
DF方向(减量/增量)
DN
UP
IF中断(允许/关闭)
EI
DI
SF符号(负/正)
NG
PL
ZF零(是/否)
ZR
NZ
AF辅助进位(是/否)
AC
NA
PF奇偶(偶/奇)
PE
PO
CF进位(是/否)
CY
NC
实验二数据的建立与传送程序
一、实验目的
1.继续学习DEBUG命令。
2.验证指令的功能。
二、实验原理
在DEBUG状态下,分别输入下面各程序段,每输入完一个程序段,用G命令进行连续方式执行程序,在连续执行时,要记录程序的执行结果。
参考程序:
1.在内存10000H单元开始,建立00H~0FH~00H31个数,要求00H~0FH数据逐渐增大,0FH~00H逐渐减小。
该程序从内存CS:
0100H地址开始输入。
MOVAX,1000H
MOVDS,AX
MOVSI,0
MOVCL,0FH
XORAX,AX
PPE1:
MOV[SI],AL
INCSI
INCAL
DECCL
JNZPPE1
MOVCX,10H
PPE2:
MOV[SI],AL
INCSI
DECAL
LOOPPPE2//每执行一次LOOP指令,CX减1,判断CX是否为0,不为0,转移到指定的标号处继续执行,否则,顺序执行
INT20H
注:
转移指令的符号地址直接用绝对偏移地址,该地址在用A命令汇编输入时,可以看到程序全部运行完之后,可用DEBUG的Dump命令查看建立的数据块内容。
例如:
-D1000:
001E(31个数)
1000:
00000102030405060708090A0B0C0D0E
1000:
100E0D0C0B0A09080706050403020100
2.把上一个程序的执行结果(建立的31个字节数据块,其首地址在10000H),分几种方式传送到以下指定的区域。
(a)该程序从内存CS:
0150H开始输入。
把数据块传送到15050H开始的存贮区域中。
参考程序:
MOVAX,1000H
MOVDS,AX
MOVSI,0
MOVDI,5050H
MOVCX,1FH;数据块长度是31
PPEA:
MOVAL,[SI]
MOV[DI],AL
INCSI
INCDI
LOOPPPEA
INT20H
检查内存数据块的传送情况,可用“D”命令。
1000:
5050000102030405060708090A0B0C0D0E0F
1000:
50600E0D0C0B0A09080706050403020100
(b)用串传送指令MOVSB,把数据块传送到15150H开始的区域,该程序从内存CS:
0200H开始输入。
检查程序最后的执行结果,可用“D”命令,例如:
-D1000:
5150↙
MOVAX,1000
MOVDS,AX
MOVES,AX
MOVSI,0
MOVDI,5150
MOVCX,1F
CLD
MOVSB
LOOP[MOVSB]//写MOVSB前面的偏移地址
INT20
1000:
5150000102030405060708090A0B0C0D0E0F
1000:
51600E0D0C0B0A09080706050403020100
(c)用重复串操作指令“REPMOVSB”把数据块传送到15250H开始的区域。
该程序从CS:
250H地址开始输入。
检查程序的最后执行结果时,可用:
-D1000:
5250H
MOVAX,1000
MOVDS,AX
MOVES,AX
MOVSI,0
MOVDI,5250
MOVCX,1F
CLD
REPMOVSB
INT20
1000:
5250000102030405060708090A0B0C0D0E0F
1000:
52600E0D0C0B0A09080706050403020100
(d)用串操作的减量工作方式,把数据块传送到25050H开始的区域。
该程序从CS:
0300H开始输入。
检查程序的最后执行结果,用D命令:
-D2000:
5050↙
MOVAX,1000
MOVDS,AX
ADDAX,AX
MOVES,AX
MOVSI,1E
MOVDI,506E
MOVCX,1F
STD
REPMOVSB
INT20
2000:
5050000102030405060708090A0B0C0D0E0F
2000:
50600E0D0C0B0A09080706050403020100
实验三分支程序设计
一、实验目的
⒈练习分支程序的编写方法。
⒉练习汇编语言程序的上机过程。
二、实验原理
⒈通过分支程序设计调试和运行,进一步熟悉掌握汇编程序执行的软件环境。
⒉通过分支程序的执行过程,熟悉EDIT的使用,建立OBJ文件EXE文件的方法。
四、实验内容
给出三个有符号数,编写一个比较相等关系的程序:
如果这三个数都不相等,则显示0;
如果这三个数中有两个数相等,则显示1;
如果这三个数都相等,则显示2;
该实验的实验代码如下:
;text3.asminDOS
.modelsmall
.stack
.data
stringdb'pleaseinputthreenumbers:
',13,10,'$'
var1db?
var2db?
var3db?
vardb0
tempdb?
.code
.startup
movdx,offsetstring
movah,9
int21H
callreadsiw
moval,temp
movvar1,al
calldispcrlf
callreadsiw
moval,temp
movvar2,al
calldispcrlf
callreadsiw
moval,temp
movvar3,al
calldispcrlf
moval,var1
cmpal,var2
jnenext1
addvar,1
cmpal,var3
jneexit
addvar,1
jmpexit
next1:
cmpal,var3
jenext2
moval,var2
cmpal,var3
jenext2
jmpexit
next2:
addvar,1
exit:
movdl,var
adddl,30H
movah,2
int21H
movax,4c00H
int21H
.exit
readsiwproc
pushax
pushbx
pushcx
xorbx,bx
xorcx,cx
rsiw0:
movah,1
int21h
cmpal,'+'
jzrsiw1
cmpal,'-'
jnzrsiw2
movcx,-1
rsiw1:
movah,1
int21h
rsiw2:
cmpal,'0'
jbrsiw3
cmpal,'9'
jarsiw3
subal,30h
xorah,ah
shlbx,1
movdx,bx
shlbx,1
shlbx,1
addbx,dx
addbx,ax
jmprsiw1
rsiw3:
cmpcx,0
jzrsiw4
negbx
rsiw4:
movtemp,bl
popcx
popbx
popax
ret
readsiwendp
dispcrlfproc
pushax
pushdx
movdl,0dh
movah,2
int21h
movdl,0ah
movah,2
int21h
popdx
popax
ret
dispcrlfendp
end
该实验执行结果如下:
实验四统计学生成绩程序
一、实验目的
进一步掌握分支程序和循环程序的编写方法。
二、实验原理
设有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单元中。
这一题目的算法很简单,成绩分等部分采用分支结构,统计所有成绩则用循环结构完成。
程序框图如下图所示。
四、实验步骤
输入编写的源程序,进行调试。
参考程序如下:
datareasegment
gradedw56,69,84,82,73,88,99,63,100,80
s5dw0
s6dw0
s7dw0
s8dw0
s9dw0
s10dw0
datareaends
prognamsegment
mainprocfar
assumecs:
prognam,ds:
datarea
start:
pushds;建立栈作为返回,ds保存旧的数据
subax,ax
pushax;保护ax
movax,datarea;数据段地址给ax,ds保存临时数据
movds,ax
movs5,0;程序主要部分
movs6,0
movs7,0
movs8,0
movs9,0
movs10,0
movcx,10
movbx,offsetgrade
compare:
movax,[bx]
cmpax,60
jlfive
cmpax,70
jlsix
cmpax,80
jlseven
cmpax,90
jleight
cmpax,100
jnenine
incs10
jmpshortaddr
nine:
incs9
jmpshortaddr
eight:
incs8
jmpshortaddr
seven:
incs7
jmpshortaddr
six:
incs6
jmpshortaddr
five:
incs5
addr:
addbx,2
loopcompare
ret
mainendp
prognamends
endstart
五、实验要求
1.读懂所给的程序。
2.编写将存放于S5、S6、S7、S8、S9及S10单元中的数据在屏幕上显示出来的部分程序。
需要添加的源程序如下:
(源程序需要加到loopcompare与ret之间)
movdx,s5
adddx,30H
movah,2
int21H
movdx,20H
movah,2
int21H
movdx,s6
adddx,30H
movah,2
int21H
movdx,20H
movah,2
int21H
movdx,s7
adddx,30H
movah,2
int21H
movdx,20H
movah,2
int21H
movdx,s8
adddx,30H
movah,2
int21H
movdx,20H
movah,2
int21H
movdx,s9
adddx,30H
movah,2
int21H
movdx,20H
movah,2
int21H
movdx,s10
adddx,30H
movah,2
int21H
movdx,20H
movah,2
int21H
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 汇编 实验 告终