实验一系统认识实验.docx
《实验一系统认识实验.docx》由会员分享,可在线阅读,更多相关《实验一系统认识实验.docx(15页珍藏版)》请在冰豆网上搜索。
实验一系统认识实验
实验一系统认识实验
1.实验设备
硬件:
PC计算机一台;软件,汇编软件
2.实验目的
1.熟悉汇编语言程序设计方法;
2.熟悉汇编程序调试过程;
3.掌握使用数据传送、运算类、转移等指令编程及调试方法。
4..掌握顺序结构、分支结构、循环结构和子程序调用的编程方法。
3.实验及实验报告要求
①.编程、调试、运行、检查结果,并记录,
要求:
对程序反复输入几组数据,并运行程序,观察记录结果。
②实验报告要求
实验报告中应包含实验内容、源程序、实验步骤、运行结果、分析结果是否正确及存在的问题。
4.实验过程及结果
1-1.从3500H内存单元开始建立0~15共16个数据(建立的数据为00H,01H~09H.0AH~0FH)。
并运行之,检查记录结果。
(1)实验源程序
DATASENDS
CODESSEGMENT
ASSUMECS:
CODES,DS:
DATAS
START:
MOVAX,DATAS
MOVDS,AX
MOVDI,3500H
MOVCX,16
MOVAH,00H
SAHF;此处输入代码段代码
MOVAL,00H
A1:
MOV[DI],AL
INCDI
INCAL
LOOPA1
CODESENDS
ENDSTART
(2)实验结果与分析
反汇编后,显示内存装入的机器指令用汇编指令表示如下:
程序结束后,使用D13E7:
3500↙查看13E7:
3500H单元开始的内存中的数据如下图所示:
图中直线所标部分为从3500H内存单元开始建立的0~15共16个数据,与程序一致。
1-2.如果建立的数据为BCD码表示的十进制数据(建立的数据应为00H,01H~09H,10H~15H),应如何修改上述程序.并运行之,检查记录结果。
(1)实验源程序如下:
DATASSEGMENT
ORG3500
MEM1DB16DUP(?
);此处输入数据段代码
DATASENDS
CODESSEGMENT
ASSUMECS:
CODES,DS:
DATAS
START:
MOVAX,DATAS
MOVDS,AX
MOVDI,3500H
MOVCX,16
MOVAH,00H
SAHF;此处输入代码段代码
MOVAL,00H
A1:
ADDAL,00H
DAA
MOV[DI],AL
INCDI
INCAL
LOOPA1
CODESENDS
ENDSTART
(2)实验结果与分析
反汇编后,显示内存装入的机器指令用汇编指令表示如下:
程序结束后,使用D13E7:
3500↙查看13E7:
3500H单元开始的内存中的数据如下图所示:
图中方框内部分为从3500H内存单元开始建立的BCD码表示的十进制数据,与程序一致。
1-3.编程完成1+2+3+4+5+6+7+8+9运算。
(1)实验源程序如下:
DATASSEGMENT
ORG3500H
MEM1DB2DUP(?
);此处输入数据段代码
DATASENDS
CODESSEGMENT
ASSUMECS:
CODES,DS:
DATAS
START:
MOVAX,DATAS
MOVDS,AX
MOVDI,3500H
MOVAL,0
MOVBL,1
MOVCX,9
A1:
ADDAL,BL
INCBL
LOOPA1
MOV[DI],AL
MOVAH,4CH
INT21H
CODESENDS
ENDSTART
(2)实验结果与分析
反汇编后,显示内存装入的机器指令用汇编指令表示如下:
运行程序00000017的结果为下图方框中AX=132D,相加结果为:
2D
在内存中显示结果为:
1-4.编程完成1+2+3+4+5+6+7+8+~+100运算。
(1)实验源程序如下:
DATASSEGMENT
ORG3500H
MEM1DB10DUP(?
);此处输入数据段代码
DATASENDS
CODESSEGMENT
ASSUMECS:
CODES,DS:
DATAS
START:
MOVAX,DATAS
MOVDS,AX
MOVDI,3500H
MOVAX,0
MOVBX,1
MOVCX,100
A1:
ADDAX,BX
INCBX
LOOPA1
MOV[DI],AX
MOVAH,4CH
INT21H
CODESENDS
ENDSTART
(2)实验结果与分析
反汇编后,显示内存装入的机器指令用汇编指令表示如下:
运行程序00000018的结果为下图方框中AX=13BA
在内存中显示结果为:
1+2+3+4+5+6+7+8+~+100=5050=13BAH与实际结果一致。
1-5.将内存3500H单元开始存放的0~9共10个字节数传递到3600H单元开始的数据区中(同一段内传送)。
(1)实验源程序如下:
DATASSEGMENT
ORG3500H
MEM1DB0,1,2,3,4,5,6,7,8,9
ORG3600H
MEM2DB10DUP(?
);此处输入数据段代码
DATASENDS
STACKSSEGMENT
;此处输入堆栈段代码
STACKSENDS
CODESSEGMENT
ASSUMECS:
CODES,DS:
DATAS,SS:
STACKS
START:
MOVAX,DATAS
MOVDS,AX
MOVSI,3500H
MOVDI,3600H
MOVCX,10
CLD
NEXT:
MOVAL,[SI]
MOV[DI],AL
INCSI
INCDI
DECCX
JNZNEXT;此处输入代码段代码
MOVAH,4CH
INT21H
CODESENDS
ENDSTART
(2)实验结果与分析
反汇编后,显示内存装入的机器指令用汇编指令表示如下:
运行该程序00000018,并在内存中显示3500H单元内容及3600H单元内容,传送结果如下图所示:
1-6.在1-5题中,如果采用字数据传送,应该如何修改程序?
并运行之,检查记录结果。
(1)实验源程序如下:
DATASSEGMENT
ORG3500H
MEM1DB0,1,2,3,4,5,6,7,8,9
ORG3600H
MEM2DB10DUP(?
);此处输入数据段代码
DATASENDS
STACKSSEGMENT;此处输入堆栈段代码
STACKSENDS
CODESSEGMENT
ASSUMECS:
CODES,DS:
DATAS,SS:
STACKS
START:
MOVAX,DATAS
MOVDS,AX
MOVSI,3500H
MOVDI,3600H
MOVCX,10
CLD
NEXT:
MOVAx,[SI]
MOV[DI],Ax
INCSI
INCDI
DECCX
JNZNEXT;此处输入代码段代码
MOVAH,4CH
INT21H
CODESENDS
ENDSTART
(2)实验结果与分析
程序运行后与1-5结果一样,如图所示:
1-7.在1-5题中,如果采用串传送指令(MOVSB,MOVSW指令)如何修改程序?
并运行之,检查记录结果。
(1)实验源程序如下:
DATASSEGMENT
ORG3500H
MEM1DB0,1,2,3,4,5,6,7,8,9
ORG3600H
MEM2DB10DUP(?
);此处输入数据段代码
DATASENDS
STACKSSEGMENT;此处输入堆栈段代码
STACKSENDS
CODESSEGMENT
ASSUMECS:
CODES,DS:
DATAS,SS:
STACKS
START:
MOVAX,DATAS
MOVDS,AX
MOVES,AX
MOVSI,3500H
MOVDI,3600H
MOVCX,10
CLD
NEXT:
MOVSB
DECCX
JNZNEXT;此处输入代码段代码
MOVAH,4CH
INT21H
CODESENDS
ENDSTART
(2)实验结果与分析
反汇编后,显示内存装入的机器指令用汇编指令表示如下:
运行该程序00000015,在内存中显示3500H单元内容及串传送后3600H单元内容,传送结果如下图所示:
结果与以上两个实验结果一致。
1-8.教材160页例题3.38
(1)实验源程序如下:
DATASSEGMENT
VARXDW6
VARYDW7
RESULTDW?
;此处输入数据段代码
DATASENDS
STACK1SEGMENTPARASTACK
DW50DUP(?
);此处输入堆栈段代码
STACK1ENDS
CODESSEGMENT
ASSUMECS:
CODES,DS:
DATAS,SS:
STACK1
START:
MOVAX,DATAS
MOVDS,AX
MOVAX,STACK1
MOVSS,AX
MOVDX,VARX
ADDDX,VARY
MOVCL,3
SALDX,CL
SUBDX,VARX
SARDX,1
MOVRESULT,DX;此处输入代码段代码
MOVAH,4CH
INT21H
CODESENDS
ENDSTART
(2)实验结果与分析
反汇编后,显示内存装入的机器指令用汇编指令表示如下:
运行该程序,并将结果在内存中显示,如图所示:
其运算结果如图中方框内所示Z=0031H=49,与实际运算结果一致。