东北大学 计算机硬件技术基础实验报告
专业班级: 姓名: 学号: 实验题目:循环程序设计 日期:
实验目的:
(1)加深对循环设计的理解;
(2)掌握循环程序的设计方法;
(3)熟练掌握DEBUG的常用命令,学会DEBUG调试程序。
实验内容:
已知以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 0
B DW 0
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)保存源文件,执行masm汇编语言程序,生成.obj目标文件,结果无错误。
(3)执行link连接程序,生成.exe可执行文件,结果无错误。
(4)执行debug调试程序,执行T参数单步执行程序,在以BUF1为首地址的存储单元中得到结果17H,7BH,2DH,00H,5AH.在以BUF2为首地址的存储单元中得到结果0FFF4H,0FF2EH,0FE3BH. 在以A为首地址的存储单元中得到结果5h,在以B为首地址的存储单元中得到结果3H.
思考题:
本程序属于循环次数已知的程序,使用CX存储器存放计数器,使用LOOP指令完成循环。但是在有些程序下,是不可以使用LOOP指令的,比如循环中要用到移位指令时需要占用CL寄存器。我们仍可以两条指令完成完全相同的功能,请问是那两条指令?
答:先 MOV DX,8
然后 DEC DX
JNE L0
扩展题:统计以BUF为首地址开始的字节数据块中的正数的个数,将统计结果放至RLT单元。
程序如下:
DATA SEGMENT
BUF DW 23,123,-12,-210,45,0,90,-453
RLT DW 8 DUP(0)
A DW 0
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START:MOV AX,DATA
MOV DS,AX
LEA BX,BUF
LEA SI,RLT
MOV A,0
MOV CX,8
L0: MOV AX,[BX]
CMP AX,0
JG L1
JNG 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
执行debug执行程序,执行D参数命令,在以RLT为首地址的存储单元中得到结果17h,7Bh,2Dh,5Ah,结果正确。
第二篇:东北大学计算机硬件实验二
东 北 大 学
计算机硬件技术基础实验报告
专业班级: 姓名: 学号:
实验题目: 分支程序设计 日期: 2013.10.21
实验内容:
输入数据为x、y,结果数据为Z。若x、y都大于0,z赋值1;若x、y都小于0,z赋值-1;若x、y异号,z赋值0。(x、y的值均在-128~+127之间)
实验步骤:
1、输入源程序如下:
DATA SEGMENT
X DB 23
Y DB -10
Z DB 0
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START: MOV AX,DATA
MOV DS,AX
CMP X,0 ;x与0进行比较
JS L1 ;x〈0转L1
CMP Y,0
JL L2 ;y〈0转L2
MOV Z,1 ;x〉=0,y〉=0则1—〉Z,无条件转EXIT
JMP EXIT
L1: CMP Y,0 ;y〉=0转L2
JGE L2
MOV Z,-1 ;x〈0,y〈0则-1—〉Z,无条件转EXIT
JMP EXIT
L2: MOV Z,0 ;x、y异号时则0—〉Z
EXIT: MOV AH,0
INT 16H
CODE ENDS
END START
RET
2. 保存源文件,执行emu8086汇编源程序,点击compile生成.obj目标文件,结果无错误。
3. 执行run连接程序,生成exe可执行文件,结果无错误。
4. 点击vars,得到结果。
实验结果
1. 输入程序,得到如下界面:
2.点击compile,保存程序:
3.点击保存,点击run:
4.运行程序:
5.点击vars,生成结果:
思考题
本程序中判定符号用的是CMP指令,而用逻辑操作指令也可以。比如,可以用AND指令,使其进行自身与操作,反应到SF标志位。还可以用TEST指令直接测试最高位,并将结果反应到ZF标志位,然后根据ZF标志判断。试用TEST指令编之。
答:
DATA SEGMENT
X DB 23
Y DB -10
Z DB 0
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START: MOV AX,DATA
MOV DS,AX
MOV AL,X
AND AL,AL ;x与0进行比较
JS L1 ;x〈0转L1
MOV AH,Y
AND AH,AH
JS L2 ;y〈0转L2
MOV Z,1 ;x〉=0,y〉=0则1—〉Z,无条件转EXIT
JMP EXIT
L1: AND AH,AH ;y〉=0转L2
JNS L2
MOV Z,-1 ;x〈0,y〈0则-1—〉Z,无条件转EXIT
JMP EXIT
L2: MOV Z,0 ;x、y异号时则0—〉Z
MOV BL,Z
EXIT: MOV AH,0
INT 16H
CODE ENDS
END START
RET
执行emu8086调试程序,在Z对应的存储单元中得到计算结果00H,结果正确。