微机原理及应用实验报告(DOC)

  • 格式:doc
  • 大小:187.00 KB
  • 文档页数:15

0 实 验 报 告 课 程 名 称 实 验 名 称 实 验 日 期 学 生 专 业 学 生 学 号 学 生 姓 名 教 师 姓 名 成 绩

南京理工大学机械工程学院

微机原理及应用 实验1 DEBUG操作实验 实验2 汇编程序设计实验 实验3 8253定时/计数器实验 实验4 8255 并行接口实验

年 月 日 至 年 月 日 1

实验一 DEBUG命令及其操作 一、实验目的 1. 熟练掌握debug的常用命令,学会用debug来调试程序。 2. 深入了解数据在存储器中的存取方法及堆栈中数据的压入与弹出。 3. 掌握各种寻址方法以及简单指令的执行过程。

二、实验要求 1. 实验前要作好充分准备,包括汇编程序清单、调试步骤、调试方法以及对程序结果的分析等。 2. 本实验要求在PC机上进行。 3. 本实验只要求在DEBUG调试状态下进行,包括汇编程序,调试程序,执行程序。

三、实验内容  实验内容1:学习用DEBUG调试工具进行源程序的输入、汇编、调试和执行。 实验报告要求: 1. 写出运行结果; 2. 小结debug常用命令及使用体会 答:1.原文已给出(略) 2.a 汇编 d显示内存单元内容 e修改单元内存内容 g执行命令 t单步(或多步)调试 n指定文件路径文件名(含扩展名) u反汇编 r查看寄存器值及修改 l加载程序 w写盘命令 体会:提升学习热情和动手能力 有助于理解代码执行过程  实验内容2 设AX=3000H,BX=5000H,请编一程序段将AX的内容和BX的内容进行交换。请用堆栈作为两寄存器交换内容的中间存储单元,用DEBUG调试程序进行汇编与调试。 实验报告要求: 1. 写出完成上述功能的程序段; 2. 单步执行,并记录寄存器AX, BX及堆栈指针SP的值 答: A100 Mov ax,3000 ; ax:3000 bx:0000 sp:ffee Mov bx,5000 ;ax:3000 bx:5000 sp:ffee Push ax ;ax:3000 bx:5000 sp:ffec 2

Mov ax,bx ;ax:5000 bx:5000 sp:ffec Pop bx ;ax:5000 bx:3000 sp:ffee Int 20  实验内容3 设DS=当前段地址,BX=0300H,SI=0002H,请用DEBUG的命令将存储器偏移地址300H~304H连续单元装入0AH,0BH,0CH,0DH,0EH。在DEBUG状态下送入下面的程序,并用单步执行的方法,分析每条指令源地址的形成过程?当数据传送完毕时,AX中的内容是什么? 实验报告要求: 1. 写出源操作数的寻址方式; 2. 单步执行,并记录相关寄存器及存储单元的值 A100 ;给各内存单元赋值 Mov di,0300 Mov dx,0a Mov cx,5 1oop1:mov[di],dx Inc di Inc dx 1oop loop1 程序清单如下: 寻址方式和AX的内容 MOV BX,0300 立即寻址 MOV SI, 0002 立即寻址 MOV AX,BX 寄存器寻址 AX: 0300 MOV AX,0304H 立即寻址 AX:0304 MOV AX,[0304H] 存储器直接寻址 AX:ds:0304 内存单元的内容0EH MOV AX,[BX] 寄存器间接寻址 AX:ds:0300 内存单元的内容0AH MOV AX,0001[BX] 基址相对寻址 AX:ds:0301 内存单元的内容0BH MOV AX,[BX][SI] 基址变址寻址 AX:ds:0302 内存单元的内容0CH MOV AX,0001[BX][SI] 基址变址寻址 AX:ds:0303内存单元的内容0DH  实验内容4 设AX=0002H,编写程序将AX的内容乘10,要求用移位的方法完成。

写出实现上实验报告要求: 1. 述功能的程序段; 2. 单步执行程序,记录每条指令的机器码及相关寄存器的内容 注意:左移指令用SHL,而不能使用SAL A100 Mov ax,2 机器码:b80200 ax:0002 dx:0000 cl:00 Mov dx,0 机器码:ba0000 ax:0002 dx:0000 cl:00 Shl ax,1 机器码:d1e0 ax:0004 dx:0000 cl:00 Mov dx,ax 机器码: 01d0 ax:0004 dx:0004 cl:00 Mov cl,2 机器码:b102 ax:0004 dx:0004 cl:02 Shl ax,cl 机器码:d3e0 ax:0010 dx:0004 cl:02 Add ax,dx 机器码:01d0 ax:0014 dx:0004 cl:02 3

Int 20 机器码:cd20 ax:0014 dx:0004 cl:02 实验二 简单程序的编写及汇编连接 一、 实验目的 1. 熟练掌握编写汇编语言源程序的基本方法和基本框架。 2. 学会编写顺序结构、分支结构和循环结构的汇编程序,掌握宏定义与宏调用的方法。 3. 掌握程序中数据的产生与数输出的方法。 4. 熟悉建立源文件,进行汇编和连接的全过程,并对程序进行调试。

二、 实验要求 1. 实验前准备 ① 分析题目,将程序中的原始数据、中间结果和最终结果的存取方式确定好。 ② 写出算法或画出流程图。 ③ 写出源程序。 ④ 对程序中的结果进行分析,并准备好上机调试的过程。 2. 本实验要求在PC机上进行。 3. 汇编过程中出现问题,可用DEBUG进行调试。

三、 实验内容 1.实验内容1 ① 编辑源程序(参考程序见下),建立 .ASM文件; ② 用MASM程序汇编,生成 .OBJ文件;查看 .LST文件的内容 ③ 用LINK程序链接,生成 .EXE文件; ④ 使用DEBUG命令将 .EXE文件调进内存,执行后查看程序运行结果; ⑤ 使用DEBUG命令,检查各段在内存当中分配情况。 参考程序: ; exercize21 data segment org 0200h buffer dw 0, 1, -5, 10, 256, -128, -100, 45, 6, 3, dw -15,-67, 39, 4, 20, -1668, -32766, 32765, -525, dw 300 count equ ($-buffer)/2 max dw ? data ends

stack segment stack 'stack' db 100 dup ('s') stack ends

code segment para 'code' 4

assume cs:code, ds:data, ss:stack sta proc far push ds xor ax, ax push ax mov ax, data mov ds, ax lea si, buffer mov cx, count dec cx mov ax, [si] chkmax: add si, 2 cmp [si], ax jle next mov ax, [si] next: loop chkmax mov max, ax ret sta endp code ends end sta 实验报告要求: 1. 小结汇编语言源程序的编译及连接过程; 2. 记录数据段在程序执行前后的内容 3. 写出程序调试中出现的问题及解决方法;

答: 1. 把待汇编的程序放在存放汇编、链接程序的文件夹里打开汇编程序输入待汇编的程序名字 ,以默认配置生成obj文件,再打开链接程序输入待链接的程序名字以默认配置生成exe文件 2. 执行前后buff数据数据块不变 max执行前数据为0000H执行后为7ffdH 3. 很顺利

作业:编程并且在计算机上调试。 ①用汇编语言编写一个加法程序: 1234+5678 请用ASCII码的形式将加数与被加数存放在数据区DATA1和DATA2中,并将相加的结果显示输出。 ②假设有一组数据:5,-4,0,3,100,-51,……,请编一程序,判断每个数是否大于0,等于0,还是小于0,并输出判断结果。即: 1 当x>0 y = 0 当x=0 -1 当x<0 5

①sstack segment dw 32 dup(?) sstack ends data segment data1 db ‘1234' data2 db ‘5678’ data3 db 4 dup(?) data ends code segment assume cs:code,ss:sstack,ds:data sta:push ds xor ax,ax push ax mov ax,data mov ds,ax lea si,data1 lea di,data2 lea bx,data3 mov al,[si+3] mov ah,[di+3] and al,0fh and ah,0fh add al,ah or al,30h mov [bx+3],al mov al,[si+2] mov ah,[di+2] and al,0fh and ah,0fh adc al,ah or al,30h mov [bx+2],al mov al,[si+1] mov ah,[di+1] and al,0fh and ah,0fh adc al,ah or al,30h mov [bx+1],al mov al,[si] mov ah,[di] and al,0fh and ah,0fh adc al,ah