微机原理实验报告.docx
- 文档编号:4723036
- 上传时间:2022-12-07
- 格式:DOCX
- 页数:20
- 大小:29.78KB
微机原理实验报告.docx
《微机原理实验报告.docx》由会员分享,可在线阅读,更多相关《微机原理实验报告.docx(20页珍藏版)》请在冰豆网上搜索。
微机原理实验报告
实验一熟悉宏汇编程序及debug
一.实验目的
1.学习并掌握汇编语言指令寻址方式
2.熟悉在PC机上用DEBUG调试和运行汇编语言指令的过程。
二.实验内容
根据给定寄存器内容及存储单元内容,运行给定指令,观察记录运行结果。
三.给定的寄存器内容和存储单元内容及指令
1、给定的寄存器内容及存储单元内容如下:
(DS)=2000H,(SI)=0002H,(BX)=0100H
(20100H)=12H,(20101H)=34H,(20102H)=56H,(20103H)=78H,
(21200H)=2AH,(21201H)=4CH,(21202H)=0B7H,(21203H)=65H,
2、指令及其结果:
(1)MOVAX,1200H
(2)MOVAX,BX
(3)MOVAX,[1200H]
(4)MOVAX,[BX]
(5)MOVAX,1100H[BX]
(6)MOVAX,[BX][SI]
(7)MOVAX,1100H[BX][SI]
源操作数有效地址
源操作数物理地址
指令运行结果(AX)
1
1200H
2
0100H
3
1200H
21200H
4C2AH
4
0100H
20100H
3412H
5
2300H
22300H
4C2AH
6
1202H
21202H
7856H
7
0202H
20202H
65B7H
四.思考题
汇编语言的寻址方式有七种:
(1)立即寻址
(2)寄存器寻址:
用于该寻址的寄存器有:
AX、BX、CX、DX、SI、DI、SP、BP、AH、AL、BH、BL、CH、CL、DH、DL
(3)直接寻址
(4)寄存器间接寻址:
用于该寻址的寄存器有:
BX、BP、SI、DI
(5)寄存器相对寻址:
用于该寻址的寄存器有:
BX、BP、SI、DI
(6)基址变址寻址:
用于该寻址的寄存器有:
BX、BP、SI、DI
(7)相对基址变址寻址:
用于该寻址的寄存器有:
BX、BP、SI、DI
实验二寻址方式练习及多字节运算程序
一.实验目的
1.学习并掌握数据传送指令和算术运算指令
2.熟悉在PC机上编辑、汇编、连接、调试与运行汇编语言程序的过程。
二.实验内容
实现两个32位无符号数乘法。
实验程序如下:
my_datasegment
num1dw1200h,3400h
num2dw5600h,7800h
mutdw4dup(?
)
my_dataends
my_stacksegmentparastack‘stack’
db100(?
)
my_stackends
my_codesegment
assumecs:
my_codecs:
my_datacs:
my_stack
began:
pushds
movax,0
pushax
movax,my_data
movdx,ax
leabx,num1
mul32:
movax,[bx]
movsi,[bx+4]
movdi[bx+6]
mulsi
mov[bx+8],ax
movax,[bx+2]
mulsi
add[bx+0ah],ax
adc[bx+0ch],dx
movax,[bx]
muldi
add[bx+0ah],ax
adc[bx+0ch],dx
movah,4ch
int21h
my_codeends
endbegin
三,实验步骤
1.编辑源程序,建立一个以后缀名为.ASM的文件。
2.汇编源程序,检查程序是否有错误,有错时回到编辑状态,修改程序中错误行;无错误继续(3)。
3.连接目标程序,生成可执行程序。
4.DEBUG调试程序,记录如下数据:
(1)记录断点处地址,为:
0042h
(2)记录断点处DS、CS及IP的值分别为:
DS=129CH,CS=129DH,IP=0042H
(3)数据段DS:
0~DS:
0F的内容,并记录,如下:
0012003400560078-00000000e8196018
四.思考题
my_datasegment
ydw(?
)
xequ56abh
my_dataends
my_stacksegmentparastack‘stack’
db100(?
)
my_stackends
my_codesegment
assumecs:
my_codecs:
my_datacs:
my_stack
began:
pushds
movax,0
pushax
movax,my_data
movdx,ax
movax,x
mul6
addax,8h
movy,ax
movah,4ch
int21h
my_codeends
endbegin
实验三分支程序设计
一.实验目的
1.学习并掌握分支程序的设计方法
2.掌握正确分配与使用寄存器
二.实验内容
实现符号函数
三.程序清单
my_datasegment
xdw-5
ydw?
my_dataends
my_stacksegmentparastack‘stack’
db100dup(?
)
my_stackends
my_codesegment
assumeas:
my_code,ds:
my_data,ss:
my_sack
begin:
pushds
movax,0
pushax
movax,my_data
movds,ax
movax,x
andax,ax
jzzero
jnsplus
movbx,0ffffh
jmpdone
zero:
movbx,0
jmpdone
plus:
movbx,1
done:
movy,bx
movah,4ch
int21h
my_codeends
endbegin
四.实验步骤
1.汇编源程序,建立一个以后缀名为.ASM的文件
2.汇编源程序,检查程序是否有错误,有错时回到编辑状态,修改程序中错误行;无错误继续(3)。
3.连接目标程序,生成可执行程序。
4.DEBUG调试程序,记录如下数据:
(1)记录断点处地址。
(2)记录断点处DS、CS及IP的值。
(3)数据段DS:
0~DS:
0F的内容,并记录。
(4)修改X的值,观察并记录实验结果。
循环程序设计
一.实验目的
1.学习并掌握循环程序的设计方法
2.掌握正确分配与使用寄存器。
二.实验内容
用冒泡法将一个带符号字节型数组中的数据按从大到小的顺序排列。
三.程序清单
my_datasegment
buffdb11h,22h,33h,44h,55h,-30h,66h,77h
countequ$-buff
my_dataends
my_stacksegmentparastack‘stack’
db100dup(?
)
my_stackends
my_codesegment
assumecs:
my_code,ds:
my_data,ss:
my_stack
begin:
pushds
movax,0
pushax
movax,my_data
movds,ax
movcx,count-1
loop1:
movdx,cx
movsi,0
loop2:
moval,buff[si]
cmpal,buff[si+1]
jgedone
xchgal,buff[si+1]
movbuff[si],al
done:
incsi
looploop2
movcx,dx
looploop1
movah,4ch
int21h
my_codeends
endbegin
四.实验步骤
1.编辑源程序,建立一个以后缀名为.ASM的文件。
2.汇编源程序,检查程序是否有错误,有错时回到编辑状态,修改程序中错误行;无错误继续(3)。
3.连接目标程序,生成可执行程序。
4.DEBUG调试程序,记录如下数据:
(1)记录断点处地址。
(2)记录断点处DS、CS及IP的值。
(3)数据段DS:
0~DS:
0F的内容,并记录。
(4)修改源程序,把数据改为从小到大排序,观察并记录实验结果。
修改后的程序为:
my_datasegment
buffdb11h,22h,33h,44h,55h,-30h,66h,77h
countequ$-buff
my_dataends
my_stacksegmentparastack‘stack’
db100dup(?
)
my_stackends
my_codesegment
assumecs:
my_code,ds:
my_data,ss:
my_stack
begin:
pushds
movax,0
pushax
movax,my_data
movds,ax
movcx,count-1
loop1:
movdx,cx
movsi,0
loop2:
moval,buff[si]
cmpal,buff[si+1]
jledone
xchgal,buff[si+1]
movbuff[si],al
done:
incsi
looploop2
movcx,dx
looploop1
movah,4ch
int21h
my_codeends
endbegin
(5)修改源程序,把排好序的数据保存在原数据的后面存储区中。
观察并记录实验结果。
修改后的程序为:
my_datasegment
buffdb11h,22h,33h,44h,55h,-30h,66h,77h
countequ$-buff
my_dataends
my_stacksegmentparastack‘stack’
db100dup(?
)
my_stackends
my_codesegment
assumecs:
my_code,ds:
my_data,ss:
my_stack
begin:
pushds
movax,0
pushax
movax,my_data
movds,ax
movsi,0
movcx,count
loop0:
mova,buff[si]
movbuff[si+8],al
incsi
looploop0
loop1:
movdx,cx
movsi,0
loop2:
moval,buff[si]
cmpal,buff[si+1]
jgedone
xchgal,buff[si+1]
movbuff[si],al
done:
incsi
looploop2
movcx,dx
looploop1
movah,4ch
int21h
my_codeends
endbegin
(6)修改源程序,利用DOS功能调用把排好序的数据显示在屏幕上,观察并记录实验结果。
(选作)
六.思考题
1、分析源程序,利用子程序实现上述问题。
2、已知从数据段BUF单元开始存放15个字节型数据,请设计程序将其中负数和零分别送往MINUS和ZERO开始的存储器单元。
(必做)
8255并行接口实验
(一)
一.实验目的
(1)掌握8255的基本工作方式及其应用。
(2)掌握8255的典型应用电路接法。
二.实验内容
基本输入输出实验。
8255端口地址为0E460H-0E463H。
三.实验步骤
1.接ISA仿真总线。
2.接8255数据、控制、A口及B口线。
A口连8个LED,B口连8个开关K。
3.编写程序,从B口输入数据并从A口输出,执行程序,观察结果。
按动开关,观察灯的亮灭情况。
四.实验程序
MY8255_A EQU 0E460H
MY8255_B EQU 0E461H
MY8255_C EQU 0E462H
MY8255_MODE EQU 0E463H
CODE SEGMENT
ASSUMECS:
CODE
START:
MOVAL,82H
MOVDX,MY_8255_MODE
OUTDX,AL
A1:
MOVDX,MY_8255_B
INAL,DX
MOVDX,MY_8255_A
OUTDX,AL
CALL BREAK
JMP A1
BREAK PROC NEAR
MOV AH,06H
MOV DL,0FFH
INT 21H
JE RETURN
MOV AX,4C00H
INT 21H
RETURN:
RET
BREAK ENDP
CODE ENDS
END START
五.实验思考题
修改程序,要求从C口输入数据并从B口输出。
MY8255_A EQU 0E460H
MY8255_B EQU 0E461H
MY8255_C EQU 0E462H
MY8255_MODE EQU 0E463H
CODE SEGMENT
ASSUMECS:
CODE
START:
MOVAL,89H
MOVDX,MY_8255_MODE
OUTDX,AL
A1:
MOVDX,MY_8255_B
INAL,DX
MOVDX,MY_8255_A
OUTDX,AL
CALL BREAK
JMP A1
BREAK PROC NEAR
MOV AH,06H
MOV DL,0FFH
INT 21H
JE RETURN
MOV AX,4C00H
INT 21H
RETURN:
RET
BREAK ENDP
CODE ENDS
END START
8255并行接口实验
(一)
一.实验目的
(1)掌握8255的基本工作方式及其应用。
(2)掌握8255的典型应用电路接法。
二.实验内容
基本输入输出实验,8255端口地址为0E460H-0E463H。
实验程序如下:
MY8255_A EQU 0E460H
MY8255_B EQU 0E461H
MY8255_C EQU 0E462H
MY8255_MODE EQU 0E463H
CODE SEGMENT
ASSUMECS:
CODE
START:
MOVAL,82H
MOVDX,MY_8255_MODE
OUTDX,AL
A1:
MOVDX,MY_8255_B
INAL,DX
MOVDX,MY_8255_A
OUTDX,AL
CALL BREAK
JMP A1
BREAK PROC NEAR
MOV AH,06H
MOV DL,0FFH
INT 21H
JE RETURN
MOV AX,4C00H
INT 21H
RETURN:
RET
BREAK ENDP
CODE ENDS
END START
三.实验步骤
1.接ISA仿真总线。
2.接8255数据、控制、A口及B口线。
A口连8个LED,B口连8个开关K。
3.编写程序,从B口输入数据并从A口输出,执行程序,观察结果。
按动开关,观察灯的亮灭情况。
五.实验思考题
修改程序,要求从C口输入数据并从B口输出。
MY8255_A EQU 0E460H
MY8255_B EQU 0E461H
MY8255_C EQU 0E462H
MY8255_MODE EQU 0E463H
CODE SEGMENT
ASSUMECS:
CODE
START:
MOVAL,89H
MOVDX,MY_8255_MODE
OUTDX,AL
A1:
MOVDX,MY_8255_B
INAL,DX
MOVDX,MY_8255_A
OUTDX,AL
CALL BREAK
JMP A1
BREAK PROC NEAR
MOV AH,06H
MOV DL,0FFH
INT 21H
JE RETURN
MOV AX,4C00H
INT 21H
RETURN:
RET
BREAK ENDP
CODE ENDS
8255并行接口实验
(二)
一 实验目的
(1)掌握8255的各种工作方式及其应用。
(2)掌握8255的典型应用电路接法。
二.实验内容
流水灯显示实验。
8255端口地址为0E460H-0E463H。
三.实验步骤
1.在实验五的基础上,B口也连8个LED,让16个LED顺序亮灭。
修改程序,并添加延时子程序。
(提示:
首先分别向A口和B口写入7FH和FEH,然后分别将该数右移和左移一位,再送到端口上,循环下去,从而实现流水灯的显示。
)
2.利用C口,连接三个开关,实现灯亮的开始、暂停、停止、复位等功能。
MY8255_AEQU0E460H
MY8255_BEQU0E461H
MY8255_CEQU0E462H
MY8255_MODEEQU0E463H
DATASEGMENT
LADB?
LBDB?
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
MOVAX,DATA
MOVDS,AX
MovDX,MY8255_MODE
MOVAL,80H
OUTDX,,AL
MOVDX,MY8255_A
MOVAL,7FH
OUTDX,AL
MOVLA,AL
MOVDX,MY8255_B
MOVAL,0FEH
OUTDX,AL
MOVLB,AL
CALLDELAY
A1:
MOVAL,LA
RORAL,1
MOVLA,AL
MOVDX,MY8255_A
OUTDX,AL
MOVAL,LB
ROLAL,1
MOVLB,AL
MOVDX,MY8255_B
OUTDX,AL
CALLDALLY
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 微机 原理 实验 报告