《微机原理及应用》实验教程
实验二 循环结构程序设计
一、实验目的
1、掌握宏汇编程序的基本格式及加深对程序循环结构的理解。 2、掌握循环结构程序设计和调试的方法。
二、实验仪器、设备
计算机或EPC-1000型嵌入式微机实验仪。
三、实验内容
编写程序:
1、使 S=1+2*3+3*4+…+N*(N+1),直到N*(N+1)项大于200为止。 2、求某段数据区内负数的个数。
设数据区的第一个单元存放数据的个数,从第二个单元开始存放数据,在最后一个单元存放结果。 参考程序一:
STACK SEGMENT STACK
DB 32 DUP (?) STACK ENDS
CODE SEGMENT
ASSUME CS:CODE,SS:STACK START: MOV DX, 0001H
MOV BL, 02H L1 : MOV AL, BL
INC BL
MUL BL ;al*bl=ax
ADD DX, AX
CMP AX, 00C8H ;200 JNA L1 INT 03H CODE ENDS
END START 参考程序二:(数据段内的数据可根据需要改变)
STACK SEGMENT STACK
DB 64 DUP(?) STACK ENDS
DATA SEGMENT
DB 06H,12H,88H,82H,90H,22H,33H DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,SS:STACK,DS:DATA START:MOV AX,DATA MOV DS,AX MOV DI,0000H MOV CL,[DI] XOR CH,CH
11
《微机原理及应用》实验教程
MOV BL,CH INC DI
A1: MOV AL,[DI]
TEST AL,80H ;数据首位是否为1
JE A2 INC BL A2: INC DI LOOP A1 MOV [DI],BL MOV AX,4C00H INT 21H CODE ENDS
END START
四、实验步骤
1、编辑程序。用编辑软件如:EDIT,输入源程序,并保存,后缀名为 . ASM。
2、编译程序。在DOS 状态下,用MASM.EXE编译源程序。编译无错误后,会生成相应的OBJ目标文件和交叉文件。我们需要的是OBJ文件。操作系统为WIN2K,XP等的机器要求用MASM6.0以上版本。
格式:MASM EXAM1.ASM 或 MASM EXAM1.ASM ;
如果结尾不加分号,那么回车后会有一个提示,提示将要生成的OBJ文件名和相应的其他一些文件名是什么?可以一路回车取默认值,即与源文件同文件名。如果加上分号后,即可避免这些提示。直接生成同文件名的OBJ文件。
3、连接程序。用LINK. EXE 连接OBJ文件,生成可执行的EXE文件。
格式:LINK EXAM1.OBJ 或 LINK EXAM1.OBJ; (区别同上)
如果源程序中无堆栈段,则在连接完后,有一个警告提示,提示程序无堆栈段,此处警告可忽略。 4、运行程序。根据需要,可选择直接通过文件名的方式运行程序,或者是用DEBUG将生成的可执行EXE文件装入内存后,用G命令运行。
例:C:\\> DEBUG 文件名. EXE
-U ;先用反汇编来查看源程序装入的地址和数据段的地址 :
-G=xxxx:xxxx ;从程序装入的地址处,开始运行程序 5、查看程序运行结果。
6、也可使用EMU8086软件进行调试和运行。(使用方法此处省略)
五、实验报告要求
参考前言内相关部分内容。
六、实验注意事项
程序的输入要正确,养成良好的程序格式编辑习惯。
七、思考题
1、编写程序把存储区F000H:1000-10FFH单元的内容传送到地址为6000H:0000的存储区中。 2、修改程序2,使其能分别求出数据区中正数、零和负数的个数。
12
《微机原理及应用》实验教程
实验三 排序结构程序设计
一、实验目的
1、掌握分支、循环、子程序调用等基本程序结构。 2、学习综合程序的设计、编制及调试。
二、实验仪器、设备
计算机或EPC-1000型嵌入式微机实验仪。
三、实验内容
在数据区中存放着一组数,数据的个数就是数据缓冲区的长度,要求用大数沉底法(或冒泡法)对该数据区中数据按递增关系排序。
设计思想:
A、从最后一个数(或者第一个数)开始,依次把相邻的两个数进行比较,即第N个数与第N-1个数比较,第N-1个数与第N-2个数比较等等;若第N-1个数大于第N个数,则两者交换,否则不交换,直到N个数的相邻两个数都比较完为止。此时,N个数中的最小数将被排在N个数的最前列。
B、对剩下的N-1个数重复上步,找到N-1个数中的最小数。
C、重复第二步,直到N个数全部排序好为止。 编程:将DATA数据区内的10个16位有符号二进制数,由小到大排序,结果放在原数据区。 这10个数是:6666H, 7777H, 8888H, 9999H, 0AAAAH, 0BBBBH, 0CCCCH, 0DDDDH, 0EEEEH,
0FFFFH
参考程序:
DATA SEGMENT
DW 6666H, 7777H, 8888H, 9999H, 0AAAAH, 0BBBBH, 0CCCCH, 0DDDDH, 0EEEEH, 0FFFFH DATA ENDS
CODE SEGMENT
ASSUME CS: CODE, DS: DATA START: MOV AX, DATA
MOV DS, AX MOV CX, 9 L1: MOV DX, CX
MOV BX, 0 L2: MOV AX, [BX]
INC BX INC BX
CMP AX,[BX]
JLE DONE ;有符号数的小于或等于转移 XCHG [BX], AX DEC BX DEC BX
MOV [BX], AX INC BX
INC BX
DONE: DEC DX
JNE L2
13
《微机原理及应用》实验教程
LOOP L1
MOV AX, 4C00H
INT 21H
CODE ENDS
END START
四、实验步骤:
(1)用编辑软件如:EDIT,输入源程序,并保存,后缀名为 . ASM。 (2)用MASM.EXE编译源程序,编译无错后,生成相应的OBJ目标文件。 (3)用LINK. EXE 连接OBJ文件,生成可执行的EXE文件。
(4)运行程序:根据需要,可选择直接通过文件名的方式运行程序,或者是用DEBUG将可执行的EXE文件跳入内存后,用G命令运行。
例:C:\\> DEBUG 文件名. EXE
-U ;先用反汇编来查看源程序装入的地址 :
-G=xxxx:xxxx ;从程序装入的地址处,开始运行程序 (5)查看实验结果。
五、实验报告要求
参考前言内相关部分内容。
六、思考题
如何用冒泡法来改写此程序。
14