汇编语言循环程序实验报告

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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

相关文档
最新文档