循环结构程序设计方案汇编语言.docx
《循环结构程序设计方案汇编语言.docx》由会员分享,可在线阅读,更多相关《循环结构程序设计方案汇编语言.docx(15页珍藏版)》请在冰豆网上搜索。
循环结构程序设计方案汇编语言
汇编语言实验报告
实验名称:
循环结构程序设计
姓名:
学号:
班级:
一、实验内容
1.用多种循环方法实现1+2+3+…+20的程序(至少二种方法);
2.编写一个程序,判别键盘上输入的字符;若是1-9字符,则显示之;若为A-Z
或a-z字符,均显示“c”;若是回车字符<CR>其ASCII码为0DH),则结束程序,若为其它字符则不显示,继续等待新的字符输入;(选做)
3、编写一个汇编语言程序,要求将BX寄存器内的小写字母用大写字母显示出来。
4、ADDRI元是存放数据的内存单元,要求将该内存单元中的字依次用十六进制数显示出来。
二、实验目的
1.掌握循环程序的结构。
2.掌握循环程序的设计、编写及调试方法。
3.掌握循环程序设计的基本方法。
主要掌握几种基本的循环程序设计技巧,如
计数法程序设计、当循环、直到循环等程序设计技术。
三、实验结果
1、将内存中的数据块中(BUFF为起始地址)奇数和偶数分别存入以ADDR和
ADDR开始的存储块中,并分别统计其中的奇、偶数,将统计结果存放在RESULT
开始的两个字存储单元中。
实验代码:
(1.ASM1.OBJ1.EXE)
datasegment
buffdw6,35,99,17,80,69,50,33
addr1dw8dup⑺
addr2dw8dup(?
)
resultdw0,0
dataends
codesegment
assumecs:
code,ds:
data
start:
movax,data
movds,ax
movcx,8d
movsi,0
movdi,0
movbx,0
movdx,0
L1:
testbuff[si],0001h
jeL2
movax,buff[si]
movaddr2[bx],ax
addsi,2
addbx,2
incdl
deccx
jmpL1
L2:
movax,buff[si]
movaddr1[di],ax
adddi,2
addsi,2
incdh
deccx
jmpL1
movsi,0
movbyteptrresult[si],dh
addsi,2
movbyteptrresult[si],dl
codeends
endstart
运行结果如下:
耐0006
DS=1427kt
醐=0师A
ES=14j.7
1EED2
CK=FFFF
SS=1427
jm
CS=142Bh0014
SP=B0B8
IP=S94Q
BF=60O0
NUUPE[
SI=S012
NGNZ
D1=0B08ACPENC
AK=8336
CX=FFFF
SP=B000
SI=0Q12
Dr^0008
DS=1427
ES-1417
SG-1427
OS-142B
IP=0014
NUUFE【
NGNZ
ACPENC
1420-001^1
kt
F78100O00100TEtTWORD
PTP(£1^0000],00^1
DC:
«012-0050
UK-FFPF
SI-MM2
IH>=MUUK
DS-142?
ES>1417
SS-1427
CG*142B
IP=001ft
NUUPEl
PLZR
NAPEHC
142E:
0O1A
I7413
JZ
Q02F
2、不利用乘法指令实现乘法的程序
代码如下:
(2.ASM2.0BJ2.EXE)datasegment
xdw30d
ydw10d
dataends
codesegment
assumecs:
code,ds:
data
start:
pushds
subax,ax
pushax
movax,data
movds,ax
movcx,x
movbx,y
movax,0
L1:
addax,bx
loopL1
movdx,ax
movah,2
int21h
codeends
endstart
运行结果如下:
DS^0B9BES^0B8B»D9C:
e014B3C3
CX=0902DX-0000SP=FFFC
SS=0B9BCS=0B9GIP=0014
ADPAK,EK
DP=0030GI=0Q@BDI-0000
NUUPElPLNZACPENG
DS-6B9BES=0B8EBB9C:
001gE2FC
削詡盹A
De-eB9DES-0BOBfeB9C;001403G3
CX=M0M2SF-FPFG
SS-0B9BCS=0B9GIP=e016LOOP001^4
CX=0001DM=0000GP=FFFCES-0B9BCE-0B9CIP-001>lADP
UF=»(J0(JDI
NUUFElPLNZACPENG
BP=0030SI-0S0BDI=0000
HUUPElPLHZACPENC
AX-01ZG
DS-=eB9D0H9C:
OBlfi
醐-&&&dES<0B8E
E2FC
CK-Q001DX—00B也SP-FFFCSS-0B9BCS=0E9CIP=001&LOOP阴1£
BP-0000
SI-00mDI
NU
UPEl
PL
NZNAPO
NC
fiK=012C
CM=0800
DX=00O0
SP=FFFC
BP=0000
SI=9B00DI
幅=fin9n
ES=EIBSE
KR=0B9R
CS=RR9C
TP=Hfl10
NU
LIPFT
PL
NZNAPO
NC
0B9C:
0018
8BD0
MOU
DX,
AK
AM-012C
BK-0000
CK-00S0
DK-B12G
SP-FFFC
BP"0000
S1»0000DI-BBO0
DS=0B9B
ES
SS=WB9B
CS=0B9C
IP=001A
NU
UPEl
PL
NZNAPO
NC
KB9C:
001AB402MOUAH,02
3、用多种循环方法实现1+2+3+…+20的程序(至少二种方法)
代码1:
(31.ASM31.0BJ31.EXE)
DATASEGMENT
XDW0D
YDW20D
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
PUSHDS
SUBAX,AX
PUSHAX
MOVAX,DATA
MOVDS,AX
MOVBX,X
MOVCX,Y
MOVAX,0
L1:
INCBX
ADDAX,BX
LOOPL1
MOVDX,AX
MOVAH,2
INT21H
CODEENDS
ENDSTART
运行结果1如下:
(结果存于DX寄存器中)
CX=0000DX=e0S6GP^FFFC
SS>=0D9BCS=0B9CIP-001^
MOUDX/X
CK=0000DX=HHD2SP=FFFC
SS=0B9ECS=0B9CIP=0B1B
nouAH,82
CH=0000DK=00D2SP=FFFC
SS=0B9BCS=0B9CIP=001D
IHT21
3P-0O3051-0600DI=0@0O
NUUPElPLHZACPENC
BP=0Q80£I=6090DI=0600
NUUPElPLNZACPEINC
BP电00081=0600DI=0000
NUUPElPLNZACPENC
SP-FFF6BP=00O0ST=0600DI=0000
IP=i07CNUUPDTPLHZACPENC
W=C2D2BH=0014S-0B9BES-SBHR0fi7:
10?
C9B
CM=0000DK=00D2
SS-9B9BGS=00ft7
NOP
实验代码2如下:
(32.ASM32.OBJ32.EXE)
DATASEGMENT
YDW20D
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
PUSHDS
SUBAX,AX
PUSHAX
MOVAX,DATA
MOVDS,AX
MOVCX,Y
MOVAX,0
MOVBX,0
L1:
INCBX
ADDAX,BX
CMPBX,20
JNZL1
MOVDX,AX
MOVAH,2
INT21H
CODEENDS
ENDSTART
运行结果2如下:
(实验结果存于DX寄存器中)
BX=00±4
CX=WU14
GP=FPFC
SI
DI=00Q0
b)S-0B9B
ES-0B6B
SS-0B9B
CS-0B9C
IP=00i&
HUUPEl
PLHZAC
PENC
93FKL4
enr
1眺
IflK=0(11)2
BK=S014
DK=0Q0O
SP=FFFC
BP=a090
ST=fiOBO
DI=0000
h)S=0B5B
ES=BBSG
SS=0E9E
CS=0B9C
IP=0fii9
MUUPEl
PLZRNA
PENC
0B9C:
001?
-t
75F8
JNZ
:
0913
仙=0OD2
BK=0914
CH-0014
DM-0088
SP-FFFC
BP-08U
si-aara
DI=0000
E£=0B8B
S8=0B9B
CS=0B9C
IP=001B
HUUPEl
PLZRNA
PENC
i8BD0
MOU
ftK
RX=0BD2
BX=B914
CX=0614
DX=BBD2
£P=FFFC
BP=9S9B
SI=B000
DI=0000
DS=0B9B
SS=0E9E
CS=0B9C
IP=B01D
NVUPEl
PLZRNA
PENC
iB4Q2
MOV
口
92
AM-02D2
BK=0014
OK=0014
DK=00D2
SP-FFFC
BP^0000
SI-0000
DI^0600
DS=BB9B
ES-0B8B
SS-0B9B
CS-0B9C
IP=001F
NUUPEl
PLZRNA
PENC
001F
'CD21
INT
21
4、编写一个程序,判别键盘上输入的字符;若是1-9字符,则显示之;若为A-Z
或a-z字符,均显示“c”;若是回车字符<CR>其ASCII码为ODH),则结束程序,若为其它字符则不显示,继续等待新的字符输入
实验代码如下:
(4.ASM4.0BJ4.EXE)
codesegment
assumecs:
code
start:
movah,1
int21h
cmpal,Odh
jeexit
cmpal,'0'
jbstart
cmpal,'9'
jbeoutput1
cmpal,'A'
jbstart
cmpal,'Z'
jbeoutput
cmpal,'a'
jbstart
cmpal,'z'
jbeoutput
output1:
movdl,al
movah,2
int21h
jmpstart
output:
movah,02h
movdl,'c'
int21h
jmpstart
:
:
XDOGUnE~lXYUEAO?
c;\nasn\4»Gxe
5、编写一个汇编语言程序,要求将BX寄存器内的小写字母用大写字母显示出来。
实验代码如下:
(5.ASM5.OBJ5.EXE)BX寄存器中的测试数据位3132HCODESEGMENT
ASSUMECS:
CODE
START:
MOVBX,6162H
SUBBX,2020H
MOVDL,BL
MOVAH,02
INT21H
MOVBL,BH
MOVDL,BL
MOVAL,02
INT21H
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
运行结果如下图:
:
\DOCUHEwl\¥UEAO>c:
5豳.exeA
^DOCUHE^IWUEAO
&addri元是存放数据的内存单元,要求将该内存单元中的字依次用十六进制数显示出来。
实验代码如下:
(6.ASM6.OBJ6.EXE)测试数据为1EH,3DH,34H,98HDATASEGMENT
ADDRDB1EH,3DH,34H,98H
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
MOVAX,DATA
a
C:
SDOCIIUEAO>C:
XnasnXt.exe
1E3D3478
C:
XDOCUUEAO>_
四、实验心得体会
本次实验主要是循环结构的程序。
通过本次实验,学习汇编语言中循环结构类型的程序的编辑、编译与连接,更好的掌握分支程序的结构。
通过本次实验,我对循环结构有了一定的理解,尤其是LOOP®环指令,对
于cmp指令和JZNJZ等指令也有了一定的了解
实验过程是一个不断探索和实践,发现错误和改正错误的一个过程。
而在实验四这个试验中,首先,要解决的问题是熟悉和了解汇编语言中分支结构的内容。
在完成实验内容的过程中,由于还是处于摸索过程中,所以刚开始的进度很慢,是对着实验过程,一步一步的执行,还要不时的进行截图。
但,熟能生巧,到后来的实验就进行的比较快。
通过本次实验,掌握了汇编语言中循环结构这一部分的内容,通过上级实验,更好的理解我们在课本上看到的循环结构的内容,让我们在实验中更深一步的理解和应用。