微机实验

  • 格式: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]+CFAL 例‘1’+‘1’+0= 62HAL __________;填空________________; 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并显示于屏幕