循环结构程序设计汇编语言.docx
《循环结构程序设计汇编语言.docx》由会员分享,可在线阅读,更多相关《循环结构程序设计汇编语言.docx(9页珍藏版)》请在冰豆网上搜索。
循环结构程序设计汇编语言
汇编语言实验报告
实验名称:
循环结构程序设计
姓名:
学号:
班级:
一、实验内容
1.用多种循环方法实现1+2+3+…+20的程序(至少二种方法);
2.编写一个程序,判别键盘上输入的字符;若是1-9字符,则显示之;若为A-Z或a-z字符,均显示“c”;若是回车字符(其ASCII码为0DH),则结束程序,若为其它字符则不显示,继续等待新的字符输入;(选做)
3、编写一个汇编语言程序,要求将BX寄存器内的小写字母用大写字母显示出来。
4、ADDR单元是存放数据的内存单元,要求将该内存单元中的字依次用十六进制数显示出来。
二、实验目的
1.掌握循环程序的结构。
2.掌握循环程序的设计、编写及调试方法。
3.掌握循环程序设计的基本方法。
主要掌握几种基本的循环程序设计技巧,如计数法程序设计、当循环、直到循环等程序设计技术。
3、实验结果
1、将内存中的数据块中(BUFF为起始地址)奇数和偶数分别存入以ADDR1和ADDR2开始的存储块中,并分别统计其中的奇、偶数,将统计结果存放在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
运行结果如下:
2、不利用乘法指令实现乘法的程序
代码如下:
(2.ASM2.OBJ2.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
运行结果如下:
3、用多种循环方法实现1+2+3+…+20的程序(至少二种方法)
代码1:
(31.ASM31.OBJ31.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寄存器中)
实验代码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寄存器中)
4、编写一个程序,判别键盘上输入的字符;若是1-9字符,则显示之;若为A-Z或a-z字符,均显示“c”;若是回车字符(其ASCII码为0DH),则结束程序,若为其它字符则不显示,继续等待新的字符输入
实验代码如下:
(4.ASM4.OBJ4.EXE)
codesegment
assumecs:
code
start:
movah,1
int21h
cmpal,0dh
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
exit:
movah,4ch
int21h
codeends
endstart
运行结果如下:
5、编写一个汇编语言程序,要求将BX寄存器内的小写字母用大写字母显示出来。
实验代码如下:
(5.ASM5.OBJ5.EXE)BX寄存器中的测试数据位3132H
CODESEGMENT
ASSUMECS:
CODE
START:
MOVBX,6162H
SUBBX,2020H
MOVDL,BL
MOVAH,02
INT21H
MOVBL,BH
MOVDL,BL
MOVAL,02
INT21H
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
运行结果如下图:
6、ADDR单元是存放数据的内存单元,要求将该内存单元中的字依次用十六进制数显示出来。
实验代码如下:
(6.ASM6.OBJ6.EXE)测试数据为1EH,3DH,34H,98H
DATASEGMENT
ADDRDB1EH,3DH,34H,98H
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
MOVAX,DATA
MOVDS,AX
MOVSI,0
MOVDI,OFFSETADDR
STEP:
MOVAL,[DI]
ADDDI,1
MOVBL,AL
MOVDL,AL
MOVCL,4
SHRDL,CL
CMPDL,9
JBENEXT1
ADDDL,7
NEXT1:
ADDDL,30H
MOVAH,2
INT21H;显示高位ASCII码
MOVDL,BL
ANDDL,0FH
CMPDL,9
JBENEXT2
ADDDL,7
NEXT2:
ADDDL,30H
MOVAH,2
INT21H;显示低位ASCII码