2022年2022年汇编语言循环程序实验报告 .pdf
东 北 大 学计算机硬件技术基础实验报告一、实验目的(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。专业班级:姓名:学号:实验题目:循环程序设计日期:2011 年 11 月 30 日名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 8 页 - - - - - - - - - 图 1 图 2 图 3 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 8 页 - - - - - - - - - 四、实验步骤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 页,共 8 页 - - - - - - - - - 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 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 8 页 - - - - - - - - - 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 结尾。 试编写一个把字符串中的所有大写字母改为小名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 8 页 - - - - - - - - - 写字母的程序并将转换后的字符串显示输出。程序运行结果如下界面所示: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 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 8 页 - - - - - - - - - CODE SEGMENT ASSUME CS: CODE, DS: DATA START: MOV AX, DATA MOV DS, AX LEA BX, BUF MOV RLT,0 MOV CX,8 L0: MOV AX,BX CMP AX,0 JL L1 INC RLT ADD BX,2 LOOP L0 L1: ADD BX,2 LOOP L0 MOV AH, 4CH INT 21H CODE ENDS END START 2.有一系列以 $为结束符的字符串,对其中的非数字字符计数,保存计数结果。答:DATA SEGMENT STR DB hjds67g5s5yii$ COUNT DB 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 CMP DL,$ JZ OK CMP DL,0 JB NEXT CMP DL,9 JA NEXT INC SI JMP AGAIN NEXT: INC COUNT INC SI JMP AGAIN 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 8 页 - - - - - - - - - OK: MOV AH,4CH INT 21H CODE ENDS END START 3.从 STRN 地址开始有一字符串,以¥作为结束标志,要求统计字符串长度并存入 LENG 单元。答:DATA SEGMENT STRN DB HOWAREYOU$ LENG DW ? DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START:MOV AX,DATA MOV DS,AX MOV LENG,0 MOV SI,OFFSET STRN AGAIN:MOV DL,SI CMP DL,$ JZ OK INC LENG INC SI JMP AGAIN OK: MOV AH,4CH INT 21H CODE ENDS END START 八、实验心得通过运行分析源程序,让我更加了解了循环程序的基本要求和步骤。通过思考题深入学习了四种循环指令同时对ASCII码表进一步熟悉,为以后更加熟练操作编程提供方便。今后我会进一步学习汇编语言为以后学习单片机做准备。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 8 页,共 8 页 - - - - - - - - -