微机原理实验
班级: 09
姓名:
学号:200913503
实验一 熟悉宏汇编程序及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)MOV AX,1200H
(2)MOV AX,BX
(3)MOV AX,[1200H]
(4)MOV AX,[BX]
(5)MOV AX,1100H[BX]
(6)MOV AX,[BX][SI]
(7)MOV AX,1100H[ BX][SI]
四.调试
步骤
新产品开发流程的步骤课题研究的五个步骤成本核算步骤微型课题研究步骤数控铣床操作步骤
1.运行DEBUG。
2.用A命令汇编指令(1)
3.按给定寄存器和存储单元内容修改寄存器和存储单元内容。
4.单步运行指令,查看结果
5.重复上述步骤,调试指令(2)——(7)
指令寻址方式
源操作数有效地址
源操作数物理地址
指令运行结果(AX)
1
立即数寻址
1200H
2
寄存器寻址
0100H
3
直接寻址
1200H
21200H
4C2AH
4
寄存器间接寻址
0100H
20100H
3412H
5
基址变址寻址
1200H
21200H
4C2AH
6
寄存器相对殉寻址
0102H
20102H
7856H
7
基址变址相对寻址
1203H
21203H
65B7H
六.思考题
1、汇编语言指令有哪些寻址方式?用于寻址的寄存器有哪些?
立即数寻址、直接寻址,寄存器寻址,寄存器间接寻址,寄存器相对寻址,基址变址寻址,基址变址相对寻址。对于16位数据,寄存器可以是AX,BX,CX,DX,SI,DI,SP,BP; 对于8位数据,寄存器可以是AH,AL,BH,BL,CH,CL,DH,DL
实验二 寻址方式练习及多字节运算程序
一.实验目的
1.学习并掌握数据传送指令和算术运算指令
2.熟悉在PC机上编辑、汇编、连接、调试与运行汇编语言程序的过程。
二.实验内容
实现两个32位无符号数乘法。
三.程序清单
见教材第74页,例4_34。
四.画出程序
流程
快递问题件怎么处理流程河南自建厂房流程下载关于规范招聘需求审批流程制作流程表下载邮件下载流程设计
图
五.实验步骤
1.编辑源程序,建立一个以后缀名为.ASM的文件。
2.汇编源程序,检查程序是否有错误,有错时回到编辑状态,修改程序中错误行;无错误继续(3)。
3.连接目标程序,生成可执行程序。
4.DEBUG调试程序,记录如下数据:
(1)记录断点处地址。
(2)记录断点处DS、CS及IP的值。
(3)数据段DS:0~DS:0F的内容,并记录。
六、已知从数据段DATA单元开始存放字节型的带符号数X和Y,请设计计算Y=6X+8的程序。
mydata segment
num1 DW 1200h,3400h
num2 DW 5600h,7800h
mut DW 4 dup(?)
mydata ends
mystack segment para stack 'stacak'
DB 100 dup(?)
mystack ends
mycode segment
assume CS: mycode, DS: mydata, SS: mystack
start: PUSH DS
MOV AX , 0
PUSH AX
MOV AX , mydata
MOV DS , AX
LEA BX , num1
mul32: MOV AX , [BX]
MOV SI , [BX+4]
MOV DI, [BX+6]
MUL SI
MOV [BX+8], AX
MOV [BX+0ah], DX
MOV AX,[BX+2]
MUL SI
ADD [BX+0ah], AX
ADC [BX+0ch], DX
MOV AX,[BX]
MUL DI
ADD [BX+0ah], AX
ADC [BX+0ch], DX
ADC word ptr[BX+0eh],0
MOV AX , [BX+2]
MUL DI
ADD [BX+0ch] , AX
ADC [BX+0eh], DX
MOV AH , 4ch
INT 21h
mycode ends
end start
实验三 分支程序设计
一.实验目的
1.学习并掌握分支程序的设计方法
2.掌握正确分配与使用寄存器。
二.实验内容
实现符号函数。
三.程序清单
见教材第77页,例4_35。
四.程序流程图
五.实验步骤
1.编辑源程序,建立一个以后缀名为.ASM的文件。
2.汇编源程序,检查程序是否有错误,有错时回到编辑状态,修改程序中错误行;无错误继续(3)。
3.连接目标程序,生成可执行程序。
4.DEBUG调试程序,记录如下数据:
(1)记录断点处地址。
(2)记录断点处DS、CS及IP的值。
(3)数据段DS:0~DS:0F的内容,并记录。
(4)修改X的值,观察并记录实验结果。
六.思考题
观察实验数据,分析负数在内存中的表示方法。
从截图可以看出 –5 在计算机中存为 0FFFB
实验四 循环程序设计
一.实验目的
1.学习并掌握循环程序的设计方法
2.掌握正确分配与使用寄存器。
二.实验内容 实现冒泡法排序。
三.程序清单 见教材第80页,例4_37。
四.画出程序流程图
五.实验步骤
1.编辑源程序,建立一个以后缀名为.ASM的文件。
2.汇编源程序,检查程序是否有错误,有错时回到编辑状态,修改程序中错误行;无错误继续(3)。
3.连接目标程序,生成可执行程序。
MY_DATA
segment
buff
db
33h,22h,11h,44h,55h,-30h,66h,88h
count
equ
$-buff
MY_DATA
ends
MY_STACK
segment
para
stack
'stack'
DB
100 DUP(?)
MY_STACK
ENDS
MY_CODE
SEGMENT
ASSUME
CS:MY_CODE,DS:MY_DATA,SS:MY_STACK
BEGIN:
PUSH
DS
MOV
AX,0
PUSH AX
MOV
AX,MY_DATA
MOV
DS,AX
MOV
CX,COUNT-1
LOOP1:
MOV DX,CX
MOV
SI,0
LOOP2:
MOV AL,BUFF[SI]
CMP AL , buff[SI+
JNGE DONE
XCHG AL, buff[SI+ 1]
mov buff[SIl
DONE:
INC
SI
LOOP
LOOP2
MOV CX,DX
LOOP
LOOP1
mov al,buff[si]
mov buff[SI+8 ],L
MOV AH ,CH
INT
21H
MY_CODE ENDS
END BEGIN
4.DEBUG调试程序,记录如下数据:
(1)记录断点处地址。9D:0033
(2)记录断点处DS、CS及IP的值。129C 129D 0033
(3)数据段DS:0~DS:0F的内容,并记录。
(4)修改源程序,把数据改为从小到大排序,观察并记录实验结果。
将JNGE改为JNE
(5)修改源程序,把排好序的数据保存在原数据的后面存储区中。观察并记录实验结果。
六.思考题
1、分析源程序,利用子程序实现上述问题。
2、已知从数据段BUF单元开始存放15个字节型数据,请设计程序将其中负数和零分别送往MINUS和ZERO开始的存储器单元。
BUF
EQU address1
MINUS
EQU address2
ZERO
EQU address3
CODE
SEGMENT
ASSUME CS:CODE
MOV
CX,15
START:MOV AL , BUF
SUB
AL, 00H
JZ
ZERO
MOV
AL , BUF
TEST
AL , 0FFH
JZ
MINUS
LOOP
START
ZERO:
MOV
ZERO ,
AL
INC
ZERO
INC BUF
LOOP
START
MINUS:
MOV
MINUS
,
AL
INC
MINUS
INC
BUF
LOOP
SYTART
CODE ENDS
END START
实验五 8255并行接口实验(一)
一.实验目的
(1)掌握8255的基本工作方式及其应用。
(2)掌握8255的典型应用电路接法。
二.实验内容基本输入输出实验。
8255端口地址为0E460H-0E463H。
三.实验步骤
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
ASSUME CS:CODE
START:
MOV DX,MY8255_MODE
MOV AL,80H
////1,00,0 : 0,0,0,0B 方式0,均为输出
OUT DX,AL
A1: MOV DX , MY8255_B
IN AL,DX
MOV DX,MY8255_A
OUT DX,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。
三.实验步骤
1.在实验五的基础上,B口也连8个LED,让16个LED顺序亮灭。修改程序,并添加延时子程序。(提示:首先分别向A口和B口写入7FH和FEH,然后分别将该数右移和左移一位,再送到端口上,循环下去,从而实现流水灯的显示。)
2.利用C口,连接三个开关,实现灯亮的开始、暂停、停止、复位等功能。
MY8255_A
EQU 0E460H
MY8255_B
EQU 0E461H
MY8255_C
EQU 0E462H
MY8255_MODE
EQU 0E463H
DATA
SEGMENT
LA DB ?
LB DB ?
DATA
ENDS
CODE
SEGMENT
ASSUME CS:CODE,DS:DATA
START:
MOV AX,DATA
MOV DS,AX
MOV DX,MY8255_MODE
MOV AL,80H
/////1,00,0 : 0,0,0,0B 方式0,均为输出
OUT DX,AL
MOV DX,MY8255_A
MOV AL,7FH
OUT DX,AL
MOV LA,AL
MOV DX,MY8255_B
MOV AL,0FEH
OUT DX,AL
MOV LB,AL
CALL DALLY
A1:
MOV AL,LA
ROR AL,1
// 7fh , 循环右移
MOV LA,AL
MOV DX,MY8255_A
OUT DX,AL
MOV AL,LB
ROL AL,1
// 0feh , 循环左移
MOV LB,AL
MOV DX , MY8255_B
OUT DX,AL
CALL DALLY
CALL BREAK
JMP A1
DALLY: MOV CX,3FFH
D1:
MOV AX,0FFFFH
D2:
DEC AX
JNZ D2
LOOP D1
RET
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
8253定时/计数实验
一.实验目的(2)掌握8253的典型应用技术。
二.实验内容
用信号源1MHZ作为扬声器发声基准时钟,计数器0设置为工作方式3,由表格查出每个音符对应的时间常数送给计数器0,以确定音调,驱动扬声器产生音乐,其连线图如下(发声频率已经固定,但是发声时间是通过软件延时控制的,因此发声时间随不同档次PC机而变化,可以通过调节延时子程序参数来调节发声时间
三、实验连线
(1)实验板上的芯片为8254,功能结构与8253一样,其最高计数频率可达10MHz。
(2)连接ISA仿真总线;
(3)按下图连接线路:
四.实验步骤
(1)编写程序,用OUT0驱动SPK单元的扬声器发声
(2)设计实验线路图,将PCI总线扩展卡的ADD-ON总线与仿真ISA总线进行连接,完成线路连接。
(1) 运行程序,观察扬声器是否发声
(2) 可以根据音乐节拍发生时间较长或较短修改延时子程序的计数值。
五.实验思考题
在计数值赋给8254后马上可以启动并且进行定时或者计数吗?
本实验参考程序
STACK1 SEGMENT STACK
DW 64 DUP(?)
STACK1 ENDS
DATA SEGMENT
MY8254CT0 EQU 0E440H
MY8254CT1 EQU 0E441H
MY8254CT2 EQU 0E442H
MY8254MD EQU 0E443H
DTABLE
DB 33H, 33H, 3DH, 33H, 26H, 26H, 26H, 26H, 2DH, 2DH, 26H, 2DH, 33H
DB 33H, 33H, 33H, 33H, 33H, 4DH, 45H, 3DH, 3DH, 3DH, 45H, 4DH, 45H
DB 45H, 45H, 45H, 45H, 45H, 45H, 45H, 33H, 33H, 3DH, 33H, 26H, 26H
DB 26H, 28H, 2DH, 2DH, 26H, 26H, 33H, 33H, 33H, 33H, 45H, 3DH, 39H
DB 39H, 39H, 52H, 4DH, 4DH, 4DH, 4DH, 4DH, 4DH, 4DH, 4DH, 2DH
DB 26H, 26H, 26H, 26H, 26H, 26H, 28H, 28H, 2DH, 28H, 26H, 26H, 26H
DB 26H, 2DH, 28H, 26H, 2DH, 2DH, 33H, 3DH, 4DH, 45H, 45H, 45H, 45H
DB 45H, 45H, 45H, 45H, 33H, 33H, 3DH, 33H, 26H, 26H, 26H, 28H, 2DH
DB 2DH, 26H, 2DH, 33H, 33H, 33H, 33H, 33H, 33H, 45H, 3DH, 39H, 39H
DB 39H, 52H, 4DH, 4DH, 4DH, 4DH, 4DH, 4DH, 4DH, 4DH, 00H
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,SS:STACK1
START: MOV AX,DATA
MOV DS,AX //数据段初始化
MOV BX , OFFSET DTABLE //偏移地址给BX
MOV AL,[BX] //数组的首地址给AL
MOV AH,00H //数组的偏移地址初始为0
A1: MOV DL,0AH ;CLK=1MHz
MUL DL
PUSH AX //保存AX 的当前值
MOV DX,MY8254MD //设置8254的控制端口地址
MOV AL,36H //控制字
OUT DX,AL //向控制端口写入控制字
POP AX //AX的数据出栈
MOV DX , MY8254CT0 //T0计数器的地址给DX
OUT DX , AL //写入初值的低字节
MOV AL , AH
OUT DX , AL //写入初值的高字节
INC BX
MOV AH,00H
MOV AL,[BX]
TEST AL,0FFH
JZ A2
PUSH AX
CALL DALLY
CALL BREAK
POP AX
JMP A1
A2: MOV BX,OFFSET DTABLE
MOV AL,[BX]
MOV AH,00H
JMP A1
DALLY: MOV CX,77FFH //延时函数
D1: MOV AX,4C00H
D2: DEC AX
JNZ D2
LOOP D1
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
16