当前位置:文档之家› 微机原理及接口技术实验报告

微机原理及接口技术实验报告

实验一 DEBUG命令及其基本操作
一.实验目的:
1.熟练掌握DEBUG的常用命令,学会用DEBUG来调试程序。

2.深入了解数据在存储器中的存取方法,了解堆栈中数据的压入与弹出方法。

3.掌握各种寻址方法,了解简单指令的执行过程。

二、实验容:
1.打开计算机,在WINXP操作系统下,点击“开始”,选择“运行”,在“打开”一栏中输入“debug”,运行DEBUG应用程序,将出现DEBUG的提示符“-”。

2.在DEBUG提示符后键入字母“-a100”,回车后,屏幕上就会出现下面类似的容:
(具体到每个计算机所产生的段地址和偏移地址可能有所不同)
这表示在地址1383:0100处,DEBUG等待用户键入程序助记符,下面键入程序:
3.在DEBUG的提示符后键入G,这是执行程序的命令,然后回车,就可以看到结果了。

4.现在让我们用“d”命令来看一下存储器
在100H~107H这8个单元,程序覆盖了原来的容,右边的字符是组成程序的ASCII码等价字符,圆点表示不可显示字符。

5.下面我们用反汇编命令来查看一下所键入的程序。

“U”命令的格式是“U起始地址,终止地址”,即把起始地址到终止地址之间的十六进制码反汇编成汇编语言助记符语句。

键入:
大家在屏幕上不仅可以看到地址和助记符,而且还可以看到与汇编语言等价的机器语言。

6.现在我们修改存储单元的容,看看显示情况和变化。

我们看到显示的结果发生了变化,这是因为DOS的2号功能调用是显示输入数据的ASCII 码字符。

7.下面我们给程序命名并存盘。

在键入“n”后紧跟程序名及扩展名
因为文件的字节数必须事先放在BX和CX中,其中BX保存高16位,CX保存低16位,整个32位的数保存文件的字节数,一般来说,BX设置为0,因为CX可存放的字节数为64K,对于一般的程序已足够了。

8.结束后可用Q命令退出DEBUG程序。

三、实验习题
1.写出完成下列功能的指令序列
(1)传送20H到AL寄存器
(2)将(AL)*2
(3)传送25H到BL寄存器
(4)(AL)*(BL)
问最后的结果(AX)=?
单步执行结果:
2.分别写出完成下列指令要求的指令:
(1)将BX的低4位清零;
(2)将AX的高4位置1;
(3)将DX的低4位取反;
(4)将CX的中间八位清零;
(5)将AX中与BX中的对应位不相同的位均置1.
解答:(1)and bx,fff0。

设bx=c4b5,则
运行结果
(2)or ax,f000。

设ax=c4b5,则
运行结果
(3)xor dx,000f。

设dx=c4b5,则
运行结果
(4)and cx,f00f。

设cx=c4b5,则
运行结果
(5)xor ax,bx。

设ax=c4b5,bx=5229,则
3.上机运行下面指令序列,分析运行后(AX)=?
MOV AX,4312
MOV CL,8
SAR AL,CL
DEC AX
MOV CX,8
MUL CX
运行结果
4.设DS=当前段地址,BX=0300H,SI=0002H,请用DEBUG的命令将存储器偏移地址300H~305H 连续单元装入0AH,0BH,0CH,0DH,0EH,0FH。

在DEBUG状态下送入下面的程序,并用单步执行的方法,分析每条指令源地址的形成过程?当数据传送完毕时,AX中的容是什么?程序清单如下:
MOV AX,0304H
MOV AX,[0304H] MOV AX,[BX]
MOV AX,0001[BX] MOV AX,[BX][SI] MOV AX,0001[BX][SI]
实验二简单程序设计
一、实验目的:
1.进一步熟悉DEBUG常用命令及使用
2.掌握编写汇编语言源程序的基本方法和基本框架
3.学习设计顺序结构程序,学会使用DEBUG命令调试程序和查看结果。

二、实验容:
1.开机后,解压clab文件,打开clab.exe,然后进入MASM子目录。

2.在MASM子目录下进入EDIT编辑环境,编写汇编语言源程序。

3.源程序编写完后,保存源程序
4.在NASM子目录中利用MASM.EXE汇编程序对源程序进行汇编和编译。

当源程序中无语法错误时,则在当前工作目录下自动生成一个.OBJ文件,即目标代码文件。

5.若源程序有语法错误时,会出现错误提示信息。

例如:
×× Warning errors(警告错误)
×× Severe errors(严重错误)
若存在严重错误时,则无法生成.OBJ文件,需回到编辑状态下修改源程序,直到错误数为零为止。

6.当源程序编译通过后,在MASM目录下,我们利用连接程序LINK.EXE对一个或多个目标文件进行编译连接,生成可执行文件(*.EXE)
7.最后利用DEBUG命令对汇编程序进行调试并查看结果。

8.编程:求两个数的平均值。

这两个数分别方程在X单元和Y单元中,而平均值放在Z 单元中。

即Z=(X+Y)/2
参考程序如下:
DATA SEGMENT
X DB 2
Y DB 6
Z DB ?
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START:
MOV AX,DATA
MOV DS,AX
MOV AL,X
MOV AH,0
ADD AL,Y
ADC AH,0
MOV BL,2
DIV BL
MOV Z,AL
MOV AH,4CH
INT 21H
CODE ENDS
END START
9.输入下面源程序,并对程序进行汇编、连接、调试并说明程序的功能。

DATA SEGMENT
NUMBER DW 0168H
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
ORG 0100H
START:
MOV AX,DATA
MOV DS,AX
MOV DX,0
MOV BX,0001H
MOV DI,8000H
MOV SI,0
MOV AX,NUMBER
MOV CX,16
NEXT:
TEST AX,BX
JZ CONTINUE
OR DX,DI
INC SI
CONTINUE:
ROL BX,1
ROR DI,1
LOOP NEXT
MOV AH,4CH
INT 21H
CODE ENDS
END START
三、实验习题
1.编写程序:求1+2+3+……+100的和
DATA SEGMENT
RESULT DW ?;存放和
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START: MOV AX,DATA
MOV DS,AX
MOV AX,1;从1开始加
MOV RESULT,0;和的初值赋0
MOV CX,100;循环100次
NEXT:ADD RESULT,AX;每次向和中累加AX
INC AX;然后AX加1
LOOP NEXT
MOV BX,RESULT
MOV AX,4C00H;结束程序
INT 21H
CODE ENDS
END START
2.在存中以tab为首的地方存有1—9的立方值,从键盘输入某一数字(1—9),将该
数存入X单元,立方值送入XXX单元中。

data segment
input db 'please input x(0~9):$'
tab dw 0,1,8,27,64,125,216,343,512,729
x db ?
xxx dw ?
data ends
code segment
assume cs:code,ds:data
start:
mov ax,data
mov ds,ax
mov dx,offset input
mov ah,9
int 21h
mov ah,1
int 21h
and al,0fh
mov x,al
add al,al
mov bl,al
mov bh,0
mov ax,tab[bx]
mov xxx,ax
mov ah,4ch int 21h code ends end start。

相关主题