安工大汇编实验Word格式.docx
- 文档编号:3822484
- 上传时间:2023-05-02
- 格式:DOCX
- 页数:37
- 大小:313.59KB
安工大汇编实验Word格式.docx
《安工大汇编实验Word格式.docx》由会员分享,可在线阅读,更多相关《安工大汇编实验Word格式.docx(37页珍藏版)》请在冰点文库上搜索。
start:
movax,datas
movds,ax
movax,3000H
movbx,5000H
pushax
movax,bx
popbx
movah,4ch
int21h
codesends
endstart
2、设DS=当前段地址,BX=0300H,SI=0002H;
请用DEBUG的命令将存储器偏移地址300H~304H连续单元顺序装入0AH,0BH,0CH,0DH,0EH。
在DEBUG状态下送入下面程序,并用单步执行的方法,分析每条指令源地址的形成过程,当数据传送完毕时,AX中的内容是什么。
程序清单如下:
MOVAX,BXMOVAX,0304HMOVAX,[0304H]
MOVAX,[BX]MOVAX,0001[BX]MOVAX,[BX][SI]
MOVAX,0001[BX][SI]
HLT
三、实验要求:
1、实验前要做好充分准备,包括汇编程序清单、调试步骤、调试方法,以及对程序结果的分析等。
2、本实验只要求在DEBUG调试程序状态下进行,包括汇编程序、调试程序和执行程序。
1、任务1的指令序列
2、整理本次试验中用到的debug命令的使用方法及效果截图
1、建立完整程序,用debug装入后,用-r输入初值
2、-t单步执行结束之后显示运行结果
任务2:
1、初始化BX=0300H,SI=0002H并将0AH,0BH,0CH,0DH,0EH装入
2、-a输入操作指令
3、-t查看最好结果
实验三:
存储器块清零和内存块移动
1、使用串处理指令写出完成实验任务1、2的完整程序(注意:
要求从高地址开始,用地址减一的方式操作;
不要使用过程写法;
任务完成后要能返回操作系统)
1、存储器快清零
datasegment
blockdb256dup(55h)
dataends
codesegment
code,ds:
data
startprocnear
movax,data
movbx,offsetblock
movcx,256
again:
mov[bx],byteptr0
incbx
Loopagain
jmp$
codeends
多次-t执行后
2、内存块移动
DATASSEGMENT
sourcedb256dup(055h)
targetdb256dup(0aah)
DATASENDS
STACKSSEGMENT
STACKSENDS
CODESSEGMENT
ASSUMECS:
CODES,DS:
DATAS,ES:
DATAS,SS:
STACKS
START:
MOVAX,DATAS
MOVDS,AX
MOVES,AX
movsi,offsetsource
addsi,255
movdi,offsettarget
movcx,256
next:
moval,[si]
mov[di],al
decsi
incdi
loopnext
movah,0
MOVAH,4CH
INT21H
CODESENDS
ENDSTART
3、调试中遇到的问题及解决方法
调试时各寄存器地址总是认识不清,经常弄错。
多用-u显示指令地址就可以了
实验四将键盘输入的小写字母用大写字母显示出来
1、掌握接受键盘数据的方法,并了解将键盘数据显示时,须转为ASCII码的原理。
2、掌握DOS功能调用的编程方法。
试编写一个汇编语言程序,要求对键盘输入的小写字母用大写字母显示出来。
三、编程提示:
利用DOS功能调用INT21H的1号功能从键盘输入字符和2号功能在显示器上显示一个字符。
四、实验要求:
实验前要做好充分准备,包括汇编程序清单、调试步骤、调试方法,以及对程序结果的分析等。
五、实验报告:
1、写出源程序清单。
DATASSEGMENT
string1db'
inputa-z'
0ah,0dh,'
$'
string2db'
DATASENDS
CODESSEGMENT
DATAS
MOVAX,DATAS
MOVDS,AX
L0:
movah,1
cmpal,0dh
jzexit
cmpal,'
a'
jaeL1
jbL3
L1:
cmpal,'
z'
jnaL2
jaL3
L2:
subal,20h
movcl,al
leadx,string2
movah,9
int21h
movdl,0
movdl,cl
movah,2
movdl,0ah
movdl,0dh
movah,2
jmpL0
L3:
leadx,string1
exit:
MOVAH,4CH
INT21H
CODESENDS
2、调试中遇到的问题及解决方法
问题:
无法显示字符串
解决方法:
字符串必须有‘$’的字符串结束符才能正常显示。
实验六分支程序实验
1、显示AL寄存器中的两位十六进位制数
源程序:
codesegment
assumecs:
code
moval,3Eh
pushax
movdl,al
movcl,4
shrdl,cl
cmpdl,9
jbecase1
adddl,07h
case1:
adddl,30h
movah,02h
int21h
popax
anddl,0fh
jbecase2
case2:
adddl,30h
movah,4ch
codeends
endstart
2、判别键盘上输入的字符,若是1-9字符,则显示之;
若为A-Z或a-z
字符,均显示“c”;
若是回车字符<
CR>
(其ASCII码为0DH),则结束程序。
若为其他字符则不显示,继续等待新的字符输入
movah,01h
cmpal,0dh
jere
cmpal,30h
jbnext
cmpal,39h
jabigchar
jmpstart
bigchar:
cmpal,41h
cmpal,5ah
jasmallchar
outer:
movdl,63h
jmpstart
smallchar:
cmpal,61h
cmpal,7ah
janext
jmpouter
re:
movah,4ch
实验七统计不同成绩段学生的人数
1、掌握分支、循环、子程序调用、DOS功能调用等基本的程序结构。
2、掌握综合程序的编制及调试方法。
设有十个学生成绩分别是76,69,84,90,73,88,99,63,100和80分。
试编制一个子程序,统计低于60分,60~69分,70~79分,80~89分,90~99分和100分的人数,并输出显示统计结果。
1、成绩分等部分采用分支结构,统计所有成绩则用循环结构完成,显示统计结果采用DOS功能调用。
2、统计学生成绩和显示统计结果两部分内容用子程序结构来完成。
四、实验报告:
1、画出程序框图。
2、写出源程序清单。
arraydb67,69,84,90,73,88,99,63,100,80
Thenumberof100:
Thenumberof90-99:
string3db'
Thenumberof80-89:
string4db'
Thenumberof70-79:
string5db'
Thenumberof60-69:
string6db'
thenumberoflow60:
moval,0;
用于计数
movbx,0
movcx,0
movdh,0
movdl,10;
循环次数
callcount
calloutput
countprocnear;
子程序一,用来统计各分数段的人数
movsi,0
cmparray[si],100;
将分数与100比较
jzL1
jlnext1
next1:
cmparray[si],90;
与90比较
jaeL2
jlnext2
next2:
cmparray[si],80;
与80比较
jaeL3
jlnext3
next3:
cmparray[si],70;
与70比较
jaeL4
jlnext4
next4:
cmparray[si],60;
与60比较
jaeL5
incdh
incsi
decdl;
循环次数减1
jnznext;
若dl尚未减少到零则回到next处执行
jmpexit;
若为零就转到exit处执行,退出
incal;
对分数为100的学生的人进行计数
decdl
jnznext
jmpexit
incbh;
对分数在90-99的学生的人进行计数
incbl;
对分数在80-89的学生的人进行计数
L4:
incch;
对分数在70-79的学生的人进行计数
L5:
inccl;
对分数在60-69的学生的人进行计数
ret
countendp
outputprocnear;
子程序二,用来输出相关内容
movah,0
pushdx
pushcx
pushbx
leadx,string1;
输出100分的人数
int21H
movdl,bl
callenter
leadx,string2;
输出90至99分的人数
movdl,bh
callenter
leadx,string3;
输出80至89分的人数
movah,9
leadx,string4;
输出70至79分的人数
leadx,string5;
输出60至69分的人数
leadx,string6;
输出低于60分的人数
outputendp
enterprocnear;
子程序三,用来在每行输出后回车换行
movdl,0ah
movah,02h
movdl,0dh
enterendp
codesends
4、调试中遇到的问题及解决方法。
附加:
第五章习题3~5的源程序清单(其中第3题的要求从“4个压缩BCD码”简化为“1个压缩BCD码”)
习题3:
data_numdb37h
ndw?
numdb10
assumeds:
data,cs:
movax,data
movds,ax
moval,data_num
andal,0fh
movbl,al
moval,data_num
andal,0f0h
moval,4
mulnum
addbx,ax
movn,bx
movax,4c00h
int21h
习题4:
tabdb30h,31h,32h,33h,34h,35h,36h,37h
db38h,39h,41h,42h,43h,44h,45h,46h
hexdb6
ascdb?
movds,ax
movbx,offsettab
xorah,ah
moval,hex
moval,[bx]
movah,4ch
习题5:
xdw600
ydw25
zdw-2000
sdw?
5
movax,data
movax,x
muly
addax,z
movbx,23000d
subbx,ax
idivz
movs,ax
习题7_1:
编译一个程序,要求从键盘接受一个4位的16进制数,并在屏幕上输出与他等值的二进制数
pleaseinput:
;
提示输入
string2db16dup(?
),'
mainprocfar
leadi,string2
xorbx,bx
movch,4
leadx,string1
l1:
movah,1
0'
小于0的ascii跳到l1
jbl1
9'
不小于9的ascii跳到l3
jbel3
A'
小于A的ascii跳到l1
F'
不小于F的ascii跳到l2
jbel2
小于a的ascii跳到l1
f'
大于f的ascii跳到l1
jal1
subal,20h;
字母转换为表示的十进制数
l2:
subal,37h
jmpl4
l3:
16进制数转换为2进制数
l4:
转换得到的2进制数存入寄存器bx中
movcl,4
shlbx,cl
addbl,al
decch
jnzl1
movcx,16
l5:
输出得到的2进制数
xordl,dl
rolbx,1
rcldl,1
mov[di],dl
incdi
loopl5
movdl,0dh;
回车换行
mainendp
习题7_6:
从键盘输入一系列字符串(以回车符结束),按字母、数字和其他字符分类计数,最后显示计数结果
dsegsegment
adb0ah,0dh,'
zimugeshu:
'
'
bdb0ah,0dh,'
shuzigeshu:
cdb0ah,0dh,'
qitazifugeshu:
dsegends
csegsegment
cseg,ds:
dseg
pushds
subax,ax
movax,dseg
subcx,cx
subbl,bl
lab0:
jzlab4
jblab3
jalab1
incch
jmplab0
lab1:
Z'
jalab2
inccl
lab2:
jalab3
lab3:
incbl
lab4:
leadx,a
ordl,30h
leadx,b
movdl,ch
movdl,0dh
movah,2
int21h
movdl,0ah
leadx,c
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 安工大 汇编 实验