实验3分支和循环程序设计报告.docx
《实验3分支和循环程序设计报告.docx》由会员分享,可在线阅读,更多相关《实验3分支和循环程序设计报告.docx(13页珍藏版)》请在冰豆网上搜索。
实验3分支和循环程序设计报告
实验3分支和循环程序设计
实验目的:
熟练掌握分支和循环结构的设计方法,熟悉跳转和循环指令的使用方法。
实验要求:
按照要求编写程序,调试运行。
实验内容:
1、编写程序实现下面的算法:
if
then
lowerCount+1;
else
if(ch≥’A’)and(ch≤’Z’)
then
upperCount+1
else
otherCount+1;
endif
endif
其中ch调用ReadChar输入,lowerCount,upperCount和otherCount的值用WriteUDecByte显示。
源代码
.386
.modelflat,stdcall
include\masm32\include\io32.inc
.stack4096
.data
lowercountByte?
uppercountByte?
othercountByte?
prompt1byte"Inputastring(if(#)end)",0dh,0ah,0
prompt2byte"outputthenumber",0dh,0ah,0
prompt3byte"thelowercountnumber:
",0dh,0ah,0
prompt4byte"theuppercountnumber:
",0dh,0ah,0
prompt5byte"theothercountnumber:
",0dh,0ah,0
bufbyte80dup(?
)
.code
start:
writestringprompt1
readstringbuf
leaedi,buf
again:
moval,[edi]
cmpal,'#'
jzdone
cmpal,'A'
jbother
cmpal,'Z'
jbeupper
cmpal,'a'
jbother
cmpal,'z'
jbelower
jmpother
lower:
inclowercount
incedi
jmpagain
upper:
incuppercount
incedi
jmpagain
other:
incothercount
incedi
jmpagain
done:
writestringprompt2
writecrlf
writestringprompt3
writeUDecBytelowercount
writecrlf
writestringprompt4
writeUDecByteuppercount
writecrlf
writestringprompt5
writeUDecByteothercount
ret
endstart
实验结果
结果1
结果2
2、编写程序从键盘输入一系列有符号数,找出其中的最大数和最小数,显示运行结果。
建议算法如下:
显示“Firstnumber?
”;
调用ReadSDecDword输入双字有符号数;
minimum:
=number;
maximum:
=number;
while(显示“Anothernumber?
(YorN)”)loop
if(输入Y)then
调用ReadSDecDword输入双字有符号数;
if(numberthen
minimum:
=number;
endif
if(number>maximum)
then
maximum:
=number;
endif
endwhile
源代码:
.386
.modelflat,stdcall
include\masm32\include\io32.inc
.stack4096
.data
Adword?
Bdword?
;maxdword?
ybyte?
prompt1byte"Firstnumber?
",0
prompt2byte"Anothernumber?
(YorN)",0
prompt3byte"Inputnumber:
",0
prompt4byte"MAXnumberis:
",0
prompt5byte"MINnumberis:
",0
.code
start:
WriteStringprompt1
ReadSDecDwordA
movedx,A;edx存储最大数
movebx,edx;ebx存储最小数
again:
WriteStringprompt2
ReadChary;判断是否结束
cmpy,59h
jneL
WriteStringprompt3
ReadSDecDwordB
cmpB,ebx;ebx>B,movebx,Bebx<=B,jlL1
jlL1
cmpB,edx;eax>=B,继续执行eax
jgenext1
jmpagain;当都不符合时候,跳转到开始
L1:
movebx,B
next:
loopagain;循环
next1:
movedx,B
;movmax,edx
jmpnext
L:
WriteStringprompt4
WriteSDecDwordedx
Writecrlf
WriteStringprompt5
WriteSDecDwordebx
ret
endstart
实验结果
结果1
结果2
结果3
3、编写程序将EAX的内容转换为二进制字符串
实验代码
.386
.modelflat,stdcall
include\masm32\include\io32.inc
.stack4096
.data
BinStrbyte32dup(50),0
.code
start:
movecx,32
movebx,offsetBinStr
again:
shleax,1
jcnext1
movbyteptr[ebx],'0'
jmpnext
next1:
movbyteptr[ebx],'1'
next:
incebx
dececx
jnzagain
writeBinbyteBinStr
ret
endstart
实验结果
4、编写程序将二进制字符串表示的数据存入EAX寄存器
实验代码
.386
.modelflat,stdcall
include\masm32\include\io32.inc
.stack4096
.data
adword?
stringbyte"10101100100101010101010101010101"
.code
start:
movecx,32
movebx,offsetstring
xoreax,eax
again:
xoredx,edx
movdl,[ebx]
shledx,31
shldeax,edx,1
incebx
mova,eax
writecrlf
writeHexDworda
loopagain
ret
endstart
实验结果
1、使用二进制输出eax每一步的内容
writeBinDworda
2、使用十进制输出eax每一步的内容
writeUDecDworda
3、使用十六进制输出eax每一步的内容
writeHexDworda