logo资料库

汇编实验报告.docx

第1页 / 共18页
第2页 / 共18页
第3页 / 共18页
第4页 / 共18页
第5页 / 共18页
第6页 / 共18页
第7页 / 共18页
第8页 / 共18页
资料共18页,剩余部分请下载后查看
学生学号 实验课成绩 武汉理工大学 学 生 实 验 报 告 书 课 程 名 称 汇编语言 开 课 学 院 计算机科学与技术学院 指 导 老 师 学 生 姓 名 专 业 班 级 2017 — 2018 学年 第 二 学期
实验课程名称: 汇编语言 分支程序设计,循环程序设计,子程序结 构 专业班级 实验项目名称 实验者 同组者 实验成绩 组别 实验日期 年月日 第一部分:实验分析与设计(可加页) 一、 实验内容描述(问题域描述) 实验五: 1、熟练掌握逻辑运算和转移指令 1) 逻辑运算指令 2) 标号和无条件转移指令 3) 比较指令和条件转移指令 2、掌握分支程序设计的原理和方法,重点掌握各种分支程序中形成和判断条件而产 生的程序段的设计方法和技巧. 实验六: 1. 掌握循环程序设计的方法(两重性循环结构) 2. 掌握正确分配与使用寄存器。 3. 掌握控制循环的方法。 实验七: 1、掌握程序设计方法,合理划分层次。 2、掌握子程序的调用与返回的方法。 3、了解子程序的嵌套与递归。 二、 实验内容与设计思想 实验五 1、练习逻辑运算指令、比较指令和条件转移指令的功能、用法以及与标志位 的关系和可用的寻址方式 2、用地址表法,完成下面要求的多分支程序的设计。根据 MODE 单元中的模 式字(0-7)分别转向 L0-L7 标号处执行。L0-L7 处分别完成显示‘0’-‘7’字符。 当 MODE=0 时,转 L0 标号,完成显示‘0’ 当 MODE=1 时,转 L1 标号,完成显示‘1’ 当 MODE=2 时,转 L2 标号,完成显示‘2’ 当 MODE=3 时,转 L3 标号,完成显示‘3’ 当 MODE=4 时,转 L4 标号,完成显示‘4’ 当 MODE=5 时,转 L5 标号,完成显示‘5’ 当 MODE=6 时,转 L6 标号,完成显示‘6’ 当 MODE=7 时,转 L7 标号,完成显示‘7’ 3、编制程序实现如下操作: 设有 10 个学生成绩,分别统计低于 60 分、60~69 分、70~79 分、80~89 分、 90~99 分及 100 分的人数,并存放于 S5、S6、S7、S8、S9、S10 单元中。 实验六:
1. 请编写一程序,从附加段中一个未排序的字数组中,找出最大数和最小数 分别存放在 AX 和 BX 寄存器中。 2. 以 GRADE 为首地址的 10 个字的数组中保存有学生成绩。建立一个 10 个 字的 RNAK 数组,并根据 GRADE 中的学生成绩将学生名次填入 RANK 数组中(提示:一个学生的名次等于成绩高于等于该学生的人数加 1)。 寄存器分配情况说明如下: AX BX CX 内循环计数值 DX 存放当前被测学生的名次计数值 SI DI 外循环计数值 存放当前被测学生的成绩 存放当前被测学生的相对地址指针 内循环测试时的地址指针 3、数组 DATAX,其中的数据排列规律是:头三项是 0,0,1,以 每项的值均是前三项之和。试将项值小于等于 2000 以前的各项数据填入数组 DATAX 中。 算法: n≥ 4 时: ① an=an-1+an-2+an-3 ② an=2an-1—an-4 要求:按上述两种算法编程 4、从 DATA_BUF(1000H)开始存放 50 个字节数据,编写程序将这些数据由小到大 排序,排序后的数据仍放在该区域中。 要求原始数据在源程序中给出,排序前后的数据以每行 10 个的格式显示在屏幕 上。 5、测量一字符串长度,并用十六进制数显示之 实验七 1、 将主程序中 BX 寄存器内的二进制数用十六进制数的形式在屏幕上显示出 来。 2、编制一程序,要求键入一个班的学生成绩,并存放于 50 字的 ERADE 数组 中,然后根据 ERADE 中的成绩,把学生名次填入 50 字的 RANK 数组中,再 按学号顺序把名次从终端上显示出来。 三、实验使用环境 DOSBOX
第二部分:实验调试与结果分析(可加页) 实验五: 2. DATA SEGMENT MODE DW L0,L1,L2,L3,L4,L5,L6,L7 P0 DB' 0 ','$' P1 DB' 1 ','$' P2 DB' 2 ','$' P3 DB' 3 ','$' P4 DB' 4 ','$' P5 DB' 5 ','$' P6 DB' 6 ','$' P7 DB' 7 ','$' DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX MOV AH,01H INT 21H CMP AL,'0' JB START CMP AL,'7' JA START SUB AL,30H MOV AH,0 ADD AX,AX MOV SI,AX MOV BX,MODE[SI] JMP BX L0: LEA DX,P0 MOV AH,9 INT 21H MOV AH,4CH INT 21H L1: LEA DX,P1 MOV AH,9 INT 21H MOV AH,4CH INT 21H L2: LEA DX,P2 MOV AH,9 INT 21H MOV AH,4CH INT 21H L3: LEA DX,P3
MOV AH,9 INT 21H MOV AH,4CH INT 21H L4: LEA DX,P4 MOV AH,9 INT 21H MOV AH,4CH INT 21H L5: LEA DX,P5 MOV AH,9 INT 21H MOV AH,4CH INT 21H L6: LEA DX,P6 MOV AH,9 INT 21H MOV AH,4CH INT 21H L7: LEA DX,P7 MOV AH,9 INT 21H MOV AH,4CH INT 21H CODE ENDS END START 3.代码如下 data segment score dw 59,69,84,82,73,88,99,63,100,80 s5 dw 0 s6 dw 0 s7 dw 0 s8 dw 0 s9 dw 0 s10 dw 0 data ends code segment
main proc far assume ds:data,cs:code start: ;set stack for return push ds sub ax,ax push ax ;set ds register to current data segment mov ax,data mov ds,ax ;main part of code goes here mov si,offset score mov cx, 10 next:mov bx,[si] ;取学生的成绩存入 bx 中 mov ax,60 cmp bx,ax ;与各分数段比较并跳到相应的 jb ss5 ;统计各分数段人数的程序部分 mov ax,70 cmp bx,ax jb ss6 mov ax,80 cmp bx,ax
jb ss7 mov ax,90 cmp bx,ax jb ss8 mov ax,100 cmp bx,ax jb ss9 inc s10 jmp loop1 ss5:inc s5 ;统计各分数段人数 jmp loop1 ss6:inc s6 jmp loop1 ss7:inc s7 jmp loop1 ss8:inc s8 jmp loop1 ss9:inc s9 loop1:add si,2 ;取下一个分数的偏移地址 loop next ;循环十次,对十个分数分类 exit:ret main endp ;----------------------------
code ends ;********************************** end start N(总人数) 10 S5 1 S6 1 S7 3 S8 3 S9 2 S10 0 3.代码如下 DATA SEGMENT ORG 1000H BLOCK DB 37,-90,-32,60,-7,-120 COUNT EQU &-BLOCK ORG 2000H P_DATA DB COUNT DUP(0) ORG 3000H M_DATA DB COUNT DUP(0) DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX LEA DI,P_DATA;判断的数据 LEA BX,M_DATA;放>0 数据的区域 MOV CX,COUNT;放<0 数据的区域 NEXT: MOV AL,[SI] CMP AL,00H JGE L1;F=1,为于小 0,转 L1 MOV [BX],AL;ZF=0,存大于 0 的数 INC BX JMP LOOP1 LI:MOV [DI],AL;存<0 的数到 M_DATA INC DI LOOP1:INC SI;判断下一个数据 LOOP NEXT;CS-1=CS 不等于 0 继续处理 MOV AH,4CH INT 21H CODE ENDS END START
分享到:
收藏