《微机原理和应用》实验报告
cmp al,'$'
je exit
cmp al,'S'
jne goback
inc si
mov al,ENG[si]
cmp al,'U'
中国石油大学(华东)现代远程教育
实验报告
课程名称:微机原理及应用
实验名称:循环程序设计
实验形式:在线模拟+现场实践
提交形式:在线提交实验报告
学生:褚东学 号:02
年级专业层次:17电气自动化技术高起专
学习中心:枣庄函授站(新)
提交时间:2018年7月10日
一、实验目的
1.掌握单重循环及多重循环的程序设计方法;
incsi
loopagain
jmpoutput2
output1:
cmpdi,0
jnzbegin
jmpaa
output2:
leadx,str1
movah,09
int21h
jmpexit
aa:
leadx,str4
movah,09
int21h
movax,9999h
data segment
arraydw12,78,55,4,125,96
maxdw?
dataends
codesegment
assumecs:code,ds:data
start:
movax,data
movds,ax
movsi,0
movax,array[si]
movcx,5
again:
addsi,2
deccx
2.学会针对不同的问题,选用不同的组织循环的方法;
3.进一步熟悉利用DEBUG程序、CODEVIEW调试程序的方法,并检查和验证结果的正确性。
二、实验容
1. 已知字数组定义如下:ARRAY DW 12,78,55,4,125,96
MAX DW ?
编制程序求出该ARRAY数组中的最大数放入MAX单元。
a:
movcx,9999h
b:
loopb
decax
jnza
exit:
movah,4ch
int21h
codeends
endstart
3.有一个首地址为NUM的N字无序无符号整数数组,编制程序采用选择排序法使该数组中的数按照从小到大的次序排序输出。
data segment
arraydw22,31,10,5,1,66,136,99
data ends
codesegment
mainprocfar
assumecs:code,ds:data
start:movax,data
movds,ax
movdi,0
again:
movsi,di
next:
movax,array[di]
addsi,2
cmpsi,16
jaexit
cmpax,array[si]
str4db0dh,0ah,'wrong 3 times,program will be over$'
data ends
codesegment
assumecs:code,ds:data
start:movax,data
movds,ax
movdi,3
begin:
decdi
leadx,str3
movah,09h
dw 40h dup(?)
top label word
sta ends
datarea segment
ENG db 'I ALWAYS WATCH THE NBA GAMES .ESPECIALLY I SUPPORT FOR THE SUN TEAM$'
total dw ?
num db 'SUN:$'
jbes0
popdx
popcx
popbx
popax
ret
outputendp
codeends
endstart
4.设有一段英文,其字符变量名为ENG,并以$字符结束。试编写一程序,统计其中单词的个数,并查出单词SUN在该文中的出现次数,并以格式“SUN:××××”显示出次数。
sta segment stack
datarea ends
code segment
assume ds:datarea,ss:sta,cs:code
main proc far
mov ax,sta
mov ss,ax
lea sp,top
mov ax,datarea
mov ds,ax
xor bx,bx
xor ax,ax
mov si,0
l0: mov al,ENG[si]
int21h
leadx,input
movah,0ah
int21h
movsi,0
moval,input[si+1]
cmpal,count
jnzoutput1
movsi,0
movcx,count
again:
moval,password[si]
movbl,input[si+2]
cmpal,bl
jnzoutput1
jcxzexit
cmpax,array[si]
jaagain
movax,array[si]
jmpagain
exit:
movmax,ax
movah,02h
int21h
movah,4ch
int21h
codeends
endstart
2. 预留字符串口令,输入口令串与预留密码串比较。若匹配则显示“MATCH!CONGRATULATION”,否则显示“NOMATCH!”,并让用户重新输入,程序能对口令进行测试,但测试次数最多3次,若3次输入密码皆错,给出相应的提示信息,程序退出。
jbenext
xchgax,array[si]
movarray[di],ax
jmpnext
exit:
adddi,2
cmpdi,16
jbagain
calloutput
movah,4ch
int21h
mainendp
outputprocnear
pushax
pushbx
pushcx
pushdx
movdi,0
s0:
movax,array[bx]
movcx,sp
s1:
movdx,0
movdi,10
divdi
pushdx
cmpax,0
jas1
s2:
popax
addax,30h
movdl,al
movah,02h
int21h
cmpsp,cx
jbs2
addbx,2
movdx,','
movah,02h
int21h
cmpbx,15
data segment
passworddb'123456'
inputdb20,?,20 dup(?)
countequ6
str1db0dh,0ah,'match!congratulation$'
str2db0dh,0ah,'no match!please input again:$'
str3db0dh,0ah,'please intout you password:$'