微机实验
- 格式:doc
- 大小:47.00 KB
- 文档页数:5
实验1 汇编程序的编写与调试实验
一、实验目的
1. 熟练掌握EMU8086的编写程序,学会用EMU8086调试程序。
2. 深入了解数据在存储器中的存取办法,及堆栈中数据的压入和弹出。
3. 掌握各种寻址办法以及简单指令的执行过程。
二、实验内容
1. 设堆栈指针SP=2000H,AX=300H,BX=5000H
1)编写程序段完成源程序,实现用堆栈操作指令,将AX的内容和BX的内容进行交换
2)编译源程序
3)用单步执行来调试可程序,并记录以下内容。
(1)记录SP变化
(2)SP所指向堆栈单元内容变化
(3)AX,BX的变化
CODE SEGMENT
ASSUME CS:CODE,SS:STACK
START: MOV SP,2000H
MOV AX,300H
MOV BX,5000H
PUSH AX ;AX=_______H, SP=_______ H ,WORD
PTR[0710:_____]=________H
PUSH BX ;AX=_______H, SP=_______ H ,WORD
PTR[0710:______]=________H
POP AX ;AX=_______H, SP=_______ H
POP BX ;AX=_______H, SP=_______ H
MOV AH,4CH
INT 21H
CODE ENDS
END START
2. 设DS=当前段地址,BX=0000H,SI=0002H,存储器偏移地址000H—005H连续单元顺序装入0AH,0BH,0CH,0DH,0EH,0FH。
1)完成源程序
2)编译源程序
3)用单步执行来调试程序,并记录以下内容。
(1) 记录DA1的逻辑地址
(2) 分析每条指令源地址的形成过程,即源操作数有效地址,并前往存储单元查看源操作数的值。
(3) 当条数据传送完毕时,AX中的内容是什么?
程序清单如下:
DATA SEGMENT
DB 0AH,0BH,0CH,0DH,0EH,0FH
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START: MOV AX,DATA
MOV DS,AX
MOV SI,0002
MOV BX,0000H
MOV AX,BX
MOV AX,0004H 源操作数是________
MOV AX,[0004H] 源操作数是________,有效地址为________,AX=______
MOV AX,[BX] 源操作数是________,有效地址为_________,AX=______
MOV AX,0001[BX] 源操作数是________,有效地址为________,AX=______
MOV AX,[BX][SI] 源操作数是________,有效地址为_________,AX=______
MOV AX,0001[BX][SI] 源操作数是______,有效地址为_______,AX=______
HLT
CODE ENDS
END START
3.利用EMU8086编辑下列程序的源程序文件。该程序经过汇编后会产生语法错误,请先排除错误,再连接运行。在调试过程中解决逻辑错误,直到程序能正确运行。
本程序用于输入三个字符,并且依次存入内存中。理解程序分析执行INC AL后,AL的值为多少。试找出输入字符卫浴内存什么地方。即支出BUF内存逻辑地址以及物理地址是多少。
DATA SEGMENT
BUF DB 256 DUP(?)
DATA END
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START: MOV AX,DATA
MOV DS,AX
MOV BX,BUF
MOV CX,3
L1 MOV AH,9
INT 21H
INC AL; 问每次运行完此语句,AL=?
MOV BX,AL
INC BX
LOOP L1
MOV AH,4CH
INT 21H
CODE END
END START
4. 设AX=0002H,编一个程序段将AX的内容乘以10,要求用移位的方法完成。
程序框图如下:
开始
AX,BX装入操作数2
AX左移两位→AX
AX+BX→AX
AX左移一位→AX
结束
实验2 两个多位十进制数相加的实验
一、实验目的
1. 学习数据传送和算术运算指令的用法。
2. 熟悉在PC机上建立、汇编、连接、调试和运行8088汇编语言程序的过程。
二、实验内容
将两个多位十进制数相加,要求被加数均以ASCII码形式各自顺序存放在以DATA1和DATA2为首的5个内存单元中(低位在前),结果送回DATA1处。附加题要求将加法过程显示与屏幕。
同学可以自己设计程序也可对代码段进行填空以及问答来完成程序。(附加题范例在第二页)
;该程序完成54321+54321=108642的多位十进制加法运算,和存放与DAT3 DATA SEGMENT DAT1 DB '12345' ;问一个多位十进制数各位是以何种顺序存放于内存的。 DAT2 DB '12345';个位存放于高地址或者为低地址。 DAT3 DB 6 DUP(0) DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START:MOV AX,DATA MOV DS,AX LEA BX,DAT1 LEA SI,DAT2 LEA DI,DAT3 MOV CX,5 CLC ;为什么要加入这条指令 L1: MOV AL[BX] ADC AL,[SI] ;BYTE PTR[BX]+[SI]+CFAL 例‘1’+‘1’+0= 62HAL __________;填空________________; AL=02H PUSHF ;为什么要加入pushf popf这两条指令 OR AL,30H;为什么要加入这条指令 POPF MOV [DI],AL __________;填空________ __________;填空________ __________ ;填空________ LOOP L1 JNC L2 MOV [DI],31H INC DI hlt CODE ENDS END START
三、程序框图(见下页)
显示被加数和加数
被加数和加数以ASCII码表示的数字串形式转化为由十六进制表示的数字串形式
计数值5送CX
清除最低位进位
执行ADC带进位相加
AAA调整
结果送被加数区
调整偏移量
N
CX-1=0?
Y
十六进制的结果转化为ASCII码表示的数字串
显示结果
结束
附加题
;该程序完成54321+54321=108642的多位十进制加法运算,和存放与DAT3并显示于屏幕