汇编语言循环程序实验报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
东北大学
计算机硬件技术基础实验报告
一、实验目的
(1) 加深对循环结构的理解;
(2) 掌握循环程序的设计方法;
(3) 熟练掌握DEBUG的常用命令,学会用DEBUG调试程序。
二、实验内容
1.已知以BUF为首地址的字存储区中存放着8个有符号二进制数,是编写程序将其中大于等于0的数依次送BUF1为首地址的字存储区中,小于0的数依次送以BUF2为首地址的字存储区中。同时将大于等于0的数的个数送A字变量,将小于0数的个数送B字变量。
2.设STR字符串是以0结尾。试编写一个把字符串中的所有大写字母改为小写字母的程序并将转换后的字符串显示输出。
3.试编程从自然数1开始累加,直到累加和大于5050为止,统计被累加的自然数的个数,并把统计的个数送入COUNT单元,累加和送入TOTAL单元。
三、算法描述流程图
实验内容1、2、3的流程图分别为图1、图2、图3。
图2 图1
图3
四、实验步骤
1.已知以BUF为首地址的字存储区中存放着8个有符号二进制数,是编写程序将其中大于等于0的数依次送BUF1为首地址的字存储区中,小于0的数依次送以BUF2为首地址的字存储区中。同时将大于等于0的数的个数送A字变量,将小于0数的个数送B字变量。
1)输入源程序:
DATA SEGMENT
BUF DW 23,123,-12,-210,45,0,90,-453
BUF1 DW 8 DUP(0)
BUF2 DW 8 DUP(0)
A DW ?
B DW ?
DATA ENDS
CODE SEGMENT
ASSUME CS: CODE, DS: DATA
START: MOV AX, DATA
MOV DS, AX
LEA BX, BUF
LEA SI, BUF1
LEA DI, BUF2
MOV A,0
MOV B,0
MOV CX,8
L0: MOV AX,[BX]
CMP AX,0
JGE L1
MOV [DI],AX
ADD DI,2
INC B
JMP NEXT
L1: MOV [SI],AX
ADD SI,2
INC A
NEXT: ADD BX,2
LOOP L0
MOV AH, 4CH
INT 21H
CODE ENDS
END START
2)运行程序。
3)检查结果无错误后将结果记录下来。
2.设STR字符串是以0结尾。试编写一个把字符串中的所有大写字母改为小写字母的程序并将转换后的字符串显示输出。
1)输入源程序:
DATA SEGMENT
STR DB 'HOW arE YoU!',0
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START:MOV AX,DATA
MOV DS,AX
MOV SI,OFFSET STR
AGAIN:MOV DL,[SI]
OR DL,DL
JZ OK
CMP DL,'A'
JB NEXT
CMP DL,'Z'
JA NEXT
ADD DL,20H
MOV [SI],DL
NEXT: MOV AH,2
INT 21H
INC SI
JMP AGAIN
OK: MOV AH,4CH
INT 21H
CODE ENDS
END START
2)运行程序。
3)检查结果无错误后将结果记录下来。
3.试编程从自然数1开始累加,直到累加和大于5050为止,统计被累加的自然数的个数,并把统计的个数送入COUNT单元,累加和送入TOTAL单元。1)输入源程序:
DATA SEGMENT
COUNT DW ?
TOTAL DW ?
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START: MOV AX,DATA
MOV DS,AX
MOV CX,0
MOV AX,0
MOV BX,0
LOOP1: INC BX
ADD AX,BX
INC CX
CMP AX,5050
JLE LOOP1
MOV COUNT,CX
MOV TOTAL,AX
CODE ENDS
END START
2)运行程序。
3)检查结果无错误后将结果记录下来。
五、实验结果
1.已知以BUF为首地址的字存储区中存放着8个有符号二进制数,是编写程序将其中大于等于0的数依次送BUF1为首地址的字存储区中,小于0的数依次送以BUF2为首地址的字存储区中。同时将大于等于0的数的个数送A字变量,将小于0数的个数送B字变量。程序运行结果如下界面所示:
2.设STR字符串是以0结尾。试编写一个把字符串中的所有大写字母改为小
写字母的程序并将转换后的字符串显示输出。程序运行结果如下界面所示:
3.试编程从自然数1开始累加,直到累加和大于5050为止,统计被累加的自然数的个数,并把统计的个数送入COUNT单元,累加和送入TOTAL单元。程序运行结果如下界面所示:
六、思考题
1.本程序属于循环次数已知的程序,使用CX寄存器存放计数值,使用LOOP 指令完成循环。但是在有些情况下,是不可以用LOOP指令的,比如循环中要用到移位指令时需要占用CL寄存器。我们仍可以两条指令完成相同的功能,请问是哪两条指令?
答:ROL和RCL
2.如果程序要求把小写字母都改为大写字母,程序段该如何修改?
答:将原程序中“CMP DL,'A'”、“CMP DL,'Z'”、“ADD DL,20H”语句依次改为“CMP AL,'a'”、“CMP AL,'z'”、“ADD AL,20H”语句。
3.本程序的循环较为简单,请画出本程序的流程图。
答:见图3.
七、扩展题
1.统计以BUF为首地址开始的字节数据块中的正数的个数,将统计结果放
至RLT单元。
答:
DATA SEGMENT
BUF DW 23,123,-12,-210,45,0,90,-453
RLT DW ?
DATA ENDS