北京联合大学微机原理实验报告.docx
《北京联合大学微机原理实验报告.docx》由会员分享,可在线阅读,更多相关《北京联合大学微机原理实验报告.docx(31页珍藏版)》请在冰豆网上搜索。
北京联合大学微机原理实验报告
北京联合大学信息学院
微机原理与嵌入式系统原理
实验报告
专业:
计算机科学与技术
班级:
姓名:
学号:
实验一
一、实验要求
利用EMU8086模拟器环境,完成创建源程序文件,运行调试,实验结果的查看
二、实验目的:
熟悉EMU8086实验环境
三、实验结果与截图
单步调试:
重载后,延时改为400ms:
0700:
0100开始的连续10个单元的内容:
将“存储器”中的地址改为0700:
2030:
将“存储器”中地址改为1000:
0100,并将从其开始的连续10个单元的内容改为55H:
修改helloworld程序:
(1)helloword!
(2)姓名学号:
修改comparenumber程序:
(1)comparenumber:
(2)将比较对象改为7:
实验二:
一、实验要求
编写程序代码指令,注释
二、实验目的
熟练掌握数据传送类指令的格式、功能和应用
三、调试过程及结果分析:
程序一代码:
org100h
;addyourcodehere
movax,0abch
decax
andax,00ffh
movcl,4
salal,1
movcl,al
addcl,78h
pushax
popbx
hlt
ret
运行结果:
程序二代码:
org100h
;addyourcodehere
movsp,2000h
movax,3000h
movbx,5000h
pushax
pushbx
popax
hlt
ret
运行结果
程序三代码:
org100h
;addyourcodehere
movax,1234h
movbx,5678h
movcx,9abch
pushax
pushbx
pushcx
popdi
popsi
popdx
hlt
ret
运行结果:
运行程序并记录ax寄存器的内容,逐条注释指令:
代码
注释
AX寄存器的内容
Mov[1000h],5566h
把5566h放到地址[1000h]中
0000
Movax,[1000h]
把地址放到寄存器ax中
0000
Leaax,[1000h]
取地址[1000h]中的值给ax
5566
hlt
处理器停止
1000
实验三:
一、实验要求
编程实现多位十六进制数的加法运算。
二、实验目的
1、熟悉实验系统的编程和使用。
2、掌握使用加法类运算指令编程及调试方法。
3、掌握加法类指令对状态标志位的影响。
4、实验代码:
DATASEGMENT
NUM1DW1111H;N1
NUM2DW2222H;N2
NUM3DW3333H;N3
NUM4DW0000H;N4
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
BEG:
MOVAX,DATA
MOVDS,AX
MOVSI,OFFSETNUM1
MOVAX,0
ADDAX,[SI+0]
ADDAX,[SI+2]
ADDAX,[SI+4]
MOV[SI+6],AX
JMP$
CODEENDS
ENDBEG
5、运行结果:
实验四:
一、实验要求
编程实现:
的十六进制数据转BCD码。
二、实验目的
1、熟悉实验系统的编程和使用。
2、掌握简单的数值转换算法。
3、基本了解数值各种表达方法。
4、实验代码:
;multi-segmentexecutablefiletemplate.
DATASEGMENT
RESULTDb5DUP('?
')
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
MOVAX,DATA
MOVDS,AX
MOVDX,0000H
MOVAX,65535
MOVCX,10000
DIVCX
MOVRESULT,AL;除以10000,得WAN位数
MOVAX,DX
MOVDX,0000H
MOVCX,1000
DIvCX
MOVRESULT+1,AL;除以1000,得QIAN位数
MOVAX,DX
MOVDX,0000H
MOVCX,100
DIVCX
MOVRESULT+2,AL;除以100,得BAI位数
MOVAX,DX
MOVDX,0000H
MOVCX,10
DIVCX
MOVRESULT+3,AL;除以10,得SHI位数
MOVRESULT+4,DL;得GE位数
JMP$
CODEENDS
ENDSTART
5、运行结果:
实验五:
一、实验要求
练习编程建立8086的循环程序。
二、实验目的
1、熟悉实验系统的编程和使用。
2、掌握使用LOOP判断转移指令实验循环的方法。
3、掌握使用LOOP与CX的组合。
4、实验代码:
;multi-segmentexecutablefiletemplate.
datasegment
;addyourdatahere!
pkeydb"pressanykey...$"
ends
stacksegment
dw128dup(0)
ends
CODESEGMENT
ASSUMECS:
CODE
CON_AEQU25
CON_BEQU12
START:
MOVAX,0
MOVCX,5
INC_AX:
NOP
INCAX
LOOPINC_AX
JMP$
CODEENDS
ENDSTART
5、运行结果:
实验六:
一、实验要求
编程实现1到100求和运算。
二、实验目的
1、熟悉实验系统的编程和使用。
2、掌握使用加法类运算指令编程及调试方法。
3、掌握使用循环类指令编程及调试方法。
4、实验代码:
DATASEGMENT
totalDW0000H;
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
BEG:
MOVAX,DATA
MOVDS,AX
MOVSI,OFFSETtotal
MOVCX,100
MOVAX,0
MOVBX,1
add_100:
ADDAX,BX
INCBX
LOOPadd_100
MOV[SI],AX
JMP$
CODEENDS
ENDBEG
5、运行结果:
实验七:
一、实验要求
程序中定义数组,编程实现统计数组中正数、负数与0的个数。
二、实验目的
1、熟悉实验系统的编程和使用。
2、掌握查表方法。
三、实验说明
由于本实验是先在表中存放数据,其它有正数、负数和0,通过程序对表的查询,统计表中
包含正数、负数和0的个数。
4、实验代码:
;multi-segmentexecutablefiletemplate.
DATASEGMENT
DBUFDB1,2,-3,-4,-5,1,2,3,4,5,'#';7正3负,#为结束标志
PLUSDB1;正数个数
MINSDB1;负数个数
DATAENDS
STACKSEGMENTSTACK
DB200DUP(0)
STACKENDS
CODESEGMENT
ASSUMEDS:
DATA,SS:
STACK,CS:
CODE
START:
MOVAX,DATA
MOVDS,AX
MOVPLUS,0;初始化
MOVMINS,0
MOVDI,0
BG:
CMPDBUF[DI],'#'
JEEN;遇到#结束
INCDI
CMPDBUF[DI],0;和0比较
JGL1;大于
JLL2;小于
L1:
INCPLUS;正数个数加1
JMPBG;继续循环
L2:
INCMINS;负数个数加1
JMPBG
EN:
MOVAH,4CH
INT21H
5、运行结果:
实验八:
一、实验要求
1利用PROTEUS平台,编程实现8086的由小到大的数据排列。
2利用系统功能调用实现需要排序数据的输入和排序结果显示。
二、实验目的
1、熟悉实验系统的编程和使用。
2、了解排列的简单算法。
3、了解“冒泡排序”法。
4、实验代码:
A:
降序:
;multi-segmentexecutablefiletemplate.
;addyourdatahere!
DATASEGMENT
ARRAYDB25,46,3,75,5,30
COUNTEQU$-ARRAY
DATAENDS
STACKSEGMENTPARASTACK'STACK'
DB60DUP('?
')
STACKENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA,SS:
STACK
START:
MOVAX,DATA
MOVDS,AX
MOVDX,COUNT-1
MOVBL,0FFH
AGAINO:
CMPBL,0
JEDONE
XORBL,BL
MOVCX,DX
MOVSI,COUNT-1
AGAIN1:
MOVAL,ARRAY[SI-1]
CMPAL,ARRAY[SI]
JAEUNCH
EXCH:
XCHGARRAY[SI],AL
MOVARRAY[SI-1],AL
MOVBL,0FFH
UNCH:
DECSI
LOOPAGAIN1
DECDX
JNZAGAINO
DONE:
JMP$
CODEENDS
ENDSTART
B:
升序:
;multi-segmentexecutablefiletemplate.
;addyourdatahere!
DATASEGMENT
ARRAYDB25,46,3,75,5,30
COUNTEQU$-ARRAY
DATAENDS
STACKSEGMENTPARASTACK'STACK'
DB60DUP('?
')
STACKENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA,SS:
STACK
START:
MOVAX,DATA
MOVDS,AX
MOVDX,COUNT-1
MOVBL,0FFH
AGAINO:
CMPBL,0
JEDONE
XORBL,BL
MOVCX,DX
MOVSI,COUNT-1
AGAIN1:
MOVAL,ARRAY[SI]
CMPAL,ARRAY[SI-1]
JAEUNCH
EXCH:
XCHGARRAY[SI-1],AL
MOVARRAY[SI],AL
MOVBL,0FFH
UNCH:
DECSI
LOOPAGAIN1
DECDX
JNZAGAINO
DONE:
JMP$
CODEENDS
ENDSTART
5、运行结果:
试验九:
一实验目的:
1、掌握DOS调用的输入输出功能
2、掌握分支程序设计的方法
二实验内容:
1、每次从屏幕输入一个大写字母,并将其转换为相应的小写字母输出显示到屏幕上,然后继续输入下一个字母;
2、此转换一直进行到输入“#”号为止;
3、若输入过程中输入了除大写字母和“#”以外的其他字符,则在屏幕上给出错误提示信息:
“ERROR!
”,并继续进行下一个大写字母的输入.
4、实验代码:
DATASEGMENT
ERRDB'ERROR',0DH,0AH,'$'
DATAENDS
STACKSEGMENTSTACK
DB200DUP(0)
STACKENDS
CODESEGMENT
ASSUMEDS:
DATA,SS:
STACK,CS:
CODE
START:
MOVAX,DATA
MOVDS,AX
IPT:
MOVAH,1;键盘输入大写字母
INT21H
CMPAL,'#'
JEEN
JNEOPT
OPT:
CMPAL,'A';转换为小写字母并输出
JBERROR
CMPAL,'Z'
JAERROR
ADDAL,20H
MOVAH,2
MOVDL,AL
INT21H
JMPIPT
ERROR:
MOVDX,OFFSETERR;输出ERROR并换行
MOVAH,9
INT21H
JMPIPT
EN:
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
5、运行结果:
试验十:
一、实验目的:
设计型实验的完成过程。
二、实验要求:
1、利用汇编编写阶乘的算法。
2、键盘输入数据,屏幕显示结果。
3、程序最小可算到6的阶乘。
4、实验代码:
STACKSEGMENTPARASTACK'STACK'
DW64DUP(?
)
STACKENDS
DATASEGMENT
NDB6
FUNCNDW?
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,SS:
STACK,DS:
DATA
MAINPROCFAR
START:
PUSHDS
MOVAX,0
PUSHAX
MOVAX,DATA
MOVDS,AX
PUSHCX
MOVAH,0
MOVAL,N
CALLFACTOR
MOVFUNCN,AX
POPCX
RET
MAINENDP
FACTORPROCNEAR
PUSHAX
SUBAX,1
JNEAGAIN
POPAX
JMPFIN
AGAIN:
CALLFACTOR
POPCX
MULCL
FIN:
RET
FACTORENDP
CODEENDS
ENDSTART
5、运行结果: