计算机应用教学实验报告
课程实验报告 实验地点:
第二篇:计算机系统概论实验报告 (2)
《计算机系统概论》
实验报告
实验题目:汇编语言
实验时间: 20##-5-9
实验班级: 12级双专业
实验人学号: 3112001868
实验人姓名: 张士杰
实验教师: 张伯泉
计算机 学院 实验室
广东工业大学
实验题目:
7.13、以下程序的目的是将存放在内存A、B、C中的内容相加,并将结果存入内存。但是,代码中存在两个错误。试找出错误,并分别解释误会在汇编是还是在运行时被检测出来。
Line No.
1 .ORIG X3000
2 ONE LD R0,A
3 ADD R1,R1,R0
4 TWO LD R0,B
5 ADD R1,R1,R0
6 THREE LD R0,C
7 ADD R1,R1,R0
8 ST R1,SUM
9 TRAP X25
10 A .FILL X0001
11 B .FILL X0002
12 C .FILL X0003
13 D .FILL X0004
14 .END
解答:
(1)本题存在错误如下:1.标识符SUM未进行说明,会在汇编时出错
2.R1未进行初始化,运行时可能会出错
(2)操作结果:
把D改为SUM后,汇编成功:
运行时,若R1初始值为5,则:SUM为11
开头添加语句 AND R1,R1,#0即可:
R1初始值为11,运行后为6
7.15
实验题目:
假设X4000开始的连续内存空间中存放了一个整数序列,且每个内存单元存放一个整数。该序列的结尾数值是x0000.阅读以下程序,请问该程序的目的是什么?
.ORIG X3000
LD R0,NUMBERS
LD R2,MASK
LOOP LDR R1,R0,#0
BRZ DONE
AND R5,R1,R2
BRz L1
BRnzp NEXT
L1 ADD R1,R1,R1
STR R1,R0,#0
NEXT ADD R0,R0,#1
BRnzp LOOP
DONE HALT
NUMBERS .FILL X4000
MASK .FILL X8000
.END
解答:该程序目的是:检测x4000开始的序列数,若为负数则保持不变,若为整数,则使该数增大两倍。
各语句注释如下:
.ORIG X3000
LD R0,NUMBERS;使R0=x4000
LD R2,MASK; 使R2=x8000
LOOP LDR R1,R0,#0;使R1=【x4000】(【x4000】表示x4000的内容)
BRZ DONE;如果【R1】=0,则跳转至DONE
AND R5,R1,R2;【R5】=X8000&&【R1】,判断【R1】是否为负数
BRz L1;如果【R5】=0,则【R1】为正数,跳转至L1
BRnzp NEXT;无条件跳转至NEXT
L1 ADD R1,R1,R1;【R1】翻倍
STR R1,R0,#0;把【R1】写到【R0】所表示的地址处
NEXT ADD R0,R0,#1;【R0】+1
BRnzp LOOP;循环
DONE HALT;中断
NUMBERS .FILL X4000
MASK .FILL X8000
.END
运行:设x4000起各数为x0001,x0005,x9123,xF123,x7563,运行后如下图:
运行前
运行后
由图可以看出运行后正数变为2倍,负数不发生变化