微机接口技术实验指导书.doc
微机接口技术实验指导书 主编 李建波主审 黄忠宇、苏显广东机电职业技术学院计算机与信息工程系前 言本实验指导书适用于机电一体化专业,实验时间10学时,5次上机时间。主要学习内容为80X86语言实验环境配置、汇编源语言格式、输出字符、循环结构、子程序调用,以及加减乘除等指令操作。学习结束后,要求学生能够独立编写出综合加减乘除等指令,以及循环结构、子程序调用等程序控制程序。目 录实验项目一 熟悉微机实验环境 4实验项目二 掌握中断方式显示数字或字符 6实验项目三 掌握汇编语言的寻址方式 8实验项目四 掌握循环指令的用法 10实验项目五 掌握子程序的用法 12实验报告一 熟悉微机实验环境1、 实验目的1、 熟悉微机实验环境安装2、 熟悉微机实验环境配置3、 通过练习加法,熟悉程序格式4、 单步运行程序,通过观察窗口观察指令对寄存器中数据的影响2、 实验步骤1) 软件安装 (拷贝三个文件夹)复制:桌面| 网上邻居 Techer c盘 wave、comp86和in8088三个文件夹拷贝:将三个文件夹到自己计算机上C:盘根目录下在资源管理器下可以看到:C:wave,C:comp86,C:in8088三个文件夹2) 通过资源管理器,进入汇编环境 C:waveBinwave.exe ,双击wave.exe3) 打开文件 我的电脑 c: wave bin wave.exe环境配置(如下图)选中菜单栏中“仿真器”“仿真器设置”选项(如下图)a、 选中“语言”一栏,编译器路径中填写: C:COMP86(如下图)b、 选中“仿真器”一栏,选择仿真器G6W(如下图)选择仿真头8088/8086实验(如下图)选择CPU 8088/8086(如下图) 使用软件模拟器:打表示软件实验,硬件实验则无4) 新建文件a、 选中菜单栏文件新建文件,建立空白文件b、 编辑文件,输入以下代码data segment ;ds 数据段data endsstack segment ;ss 堆栈段stack endscode segment ;cs 代码段 assume cs:code, ds:data,ss:stackmain: mov ax, data mov ds, ax mov ah,4ch ;程序结束,返回DOS int 21hcode ends end main5) 保存源程序a、 注意:保存源程序的文件名不能太长(包括路径)不得超过8个,不用汉字;b、 注意:保存源程序的文件名的后缀为 .asm6) 编译和运行选择菜单栏项目全部编译 进行编译工作,出现全部正确为止,否则检查。7) 选择菜单栏执行单步 或F8快捷键或图标,观察窗口观察数据变化a、 选择菜单栏窗口CPU窗口b、 观察单步执行时CPU内部有名称的寄存器如AX、BX、CX、DX的变化3、 完成思考题,调试成功后,请老师进行实验验收、打分4、 本次实验出现问题、解决方法,以及对实验的意见实验报告二 显示数字或字符1、 实验目的1) 复习微机实验环境安装和环境配置2) 练习寻址方式、重点内存寻址方式3) 单步运行程序,通过观察窗口观察指令对寄存器中数据的影响2、 实验步骤1) 完成微机实验环境配置2) 新建文件a、 选中菜单栏文件新建文件,建立空白文件b、 编辑文件,输入以下代码data segment ;ds 数据段 x db 3data endsstack segment ;ss 堆栈段stack endscode segment ;cs 代码段 assume cs:code, ds:data,ss:stackmain: mov ax, data mov ds, ax mov dl,l add dl,30h ;09的数字与相应的ASCII码相差30H,P17页 mov ah,2 int 21h mov ah,4ch ;程序结束,返回DOS int 21hcode ends end main3) 保存源程序a、 注意:保存源程序的文件名不能太长(包括路径);b、 注意:保存源程序的文件名的后缀为 .asm4) 编译和运行选择菜单栏项目全部编译 进行编译工作选择菜单栏执行单步 或F8快捷键 或 图标 5) 观察窗口观察数据变化a、 选择菜单栏窗口CPU窗口b、 观察单步执行时CPU内部有名称的寄存器如AX、BX、CX、DX的变化3、 完成思考题,调试成功后,请老师进行实验验收、打分a、 程序功能_b、 如何显示一个字符_c、 为什么在Wave下进行编辑、编译、连接、调试d、 为什么要在DOS下执行程序4、 本次实验出现问题、解决方法,以及对实验的意见实验报告三 寻址方式1、 实验目的1、 复习微机实验环境安装和环境配置2、 练习寻址方式、重点内存寻址方式3、 单步运行程序,通过观察窗口观察指令对寄存器中数据的影响2、 实验方向程序是指令的集合。指令就是计算机可以识别的命令程序=数据结构+算法。数据不能凭空产生和凭空存在,必须有其存在的硬件环境。计算机硬件系统包括CPU、内存、系统总线、接口。所以数据(操作数)只能存放在CPU、内存、接口中,产生几种寻址方式。寻址方式是指寻找指令操作数所在地址的方式(为确定数据的来源和去处)。四种寻址方式a、 立即数寻址:操作数代码中 例如: mov bx,1234H b、 寄存器寻址:操作数在CPU中的某个寄存器 例如: mov ax, bx c、 外设 寻址:操作数在外设中(即接口电路中) 例如: IN ax,23Hd、 内存 寻址:操作数在内存中。 例如: mov ax,bx 根据偏移地址求法内存寻址划分为5种:l 直接寻址:偏移地址在指令 中可以看到。l 寄存器间接寻址:偏移地址在CPU寄存器中。l 寄存器相对寻址:偏移地址由CPU寄存器中数值和另外数值的叠加得到。l 基址变址寻址:偏移地址由CPU中基址寄存器(BX、BP)中的数值和变址寄存器(SI、DI)中数值得到。l 相对基址变址寻址:偏移地址由CPU中基址寄存器BX、BP)中的数值和变址寄存器(SI、DI)中数值得到。举例说明 mov ax,1234h ;内存寻址方式中的直接寻址 (偏移地址在指令 中可以看到) mov ax,bx ;内存寻址方式中的寄存器间接寻址(偏移地址在CPU寄存器中) mov ax,bx+12H ;内存寻址方式中的寄存器相对寻址 mov ax,bx+si ;内存寻址方式中的基址变址寻址 mov ax,bx+si+12H;内存寻址方式中的相对基址变址寻址3、 实验步骤1) 完成微机实验环境配置2) 新建文件a、 选中菜单栏文件新建文件,建立空白文件b、 编辑文件,输入以下代码data segment ;数据段开始block1 dw 1234h,5678h,9abch,0def0hdata ends ;数据段结束end segmentcode segment ;代码段开始 assume cs:code,ds:data ; 建立代码段寄存器和代码段段名的关系main: ; 主程序的开始 mov ax,data mov ds,ax ;初始化数据段段寄存器 mov bx,offset block1 mov si,2 mov ax,bx mov ax,ds:bxmov ax,ds:bx+2 mov ax,ds:bx+si mov ax,ds:bx+si+2 mov ah,4ch ;程序结束,返回DOS int 21hcode ends ;代码段结束 end of segment end main ;主程序结束3) 保存源程序a、 注意:保存源程序的文件名不能太长(包括路径);b、 注意:保存源程序的文件名的后缀为 .asm4) 编译和运行选择菜单栏项目全部编译 进行编译工作选择菜单栏执行单步 或F8快捷键 或 图标 5) 观察窗口观察数据变化a、 选择菜单栏窗口CPU窗口b、 观察单步执行时CPU内部有名称的寄存器如AX、BX、CX、DX的变化4、 完成思考题,调试成功后,请老师进行实验验收、打分a、 程序功能_b、 练习其他寻址方式c、 写出每个寻址方式5、 本次实验出现问题、解决方法,以及对实验的意见实验报告四 循环指令1、 实验目的1) 完成微机实验环境配置2) 练习循环指令loop和cmp、jnz使用3) 单步运行程序,通过观察窗口观察指令对寄存器中数据的影响2、 实验步骤1) 完成微机实验环境配置a、 新建文件:输入以下代码DATA SEGMENT BUF db 23H,16h,08h,20h,64H,8AH,91H,35H,2BH,0ffH CN EQU $-BUF z dw 1234hDATA ENDSSTACK SEGMENT STA DB 10 DUP(?) TOP EQU $-STASTACK ENDSCODE SEGMENT ASSUME CS:CODE ,DS:DATA,SS:STACKmain: MOV AX,DATA MOV DS,AX mov ax,0 mov bx,offset buf mov cx,cn LP: add Al,bx adc ah,0 add bx,1 sub cx,1 JNZ LP mov z,ax mov ah,4ch ;主程序结束 int 21hCODE ENDS END main2) 保存源程序a、 注意:保存源程序的文件名不能太长(包括路径);b、 注意:保存源程序的文件名的后缀为 .asm3) 编译和运行选择菜单栏项目全部编译 进行编译工作选择菜单栏执行单步 或F8快捷键 或 图标 4) 观察窗口观察数据变化a、 选择菜单栏窗口CPU窗口b、 观察单步执行时CPU内部、存储Memory 窗口数据0400h单元3、 完成思考题,调试成功后,请老师进行实验验收、打分a、 此程序功能_,写出指令作用。b、 如果求最小数,如何修改的指令。c、 如果求最大数,如何修改的指令。4、 本次实验出现问题、解决方法,以及对实验的意见*重点*指令mov ds:si, bl ;将bl中的数据传递到内存物理地址中 ;物理地址=段地址*16+偏移地址 ; =ds*16+si ; =0040H*16+si ; =0400H+0000h=0400h实验报告四 子程序调用1、 实验目的1、 完成微机实验环境配置2、 练习子程序调用call和ret使用3、 单步运行程序,通过观察窗口观察指令对寄存器中数据的影响2、 实验步骤1) 完成微机实验环境配置a、 新建文件:输入以下代码data segment ;ds 数据段 x db 09hdata endsstack segment ;ss 堆栈段stack endscode segment ;cs 代码段 assume cs:code, ds:data,ss:stackmain: mov ax, data mov ds, ax mov al,x call disp mov ah,4ch ;程序结束,返回DOS int 21h disp proc ;输出1个十六进制数的子程序 cmp al,9 ja loop2loop1: mov dl,al add dl,30h ;09的数字与相应的ASCII码相差30H,P17页 mov ah,2 int 21h jmp loop3loop2: mov dl,al add dl,37h ;AF的数字与相应的ASCII码相差37H,P17页 mov ah,2 int 21hloop3: retdisp endp code ends end main2) 保存源程序c、 注意:保存源程序的文件名不能太长(包括路径);d、 注意:保存源程序的文件名的后缀为 .asm3) 编译和运行选择菜单栏项目全部编译 进行编译工作选择菜单栏执行单步 或F8快捷键 或 图标 4) 观察窗口观察数据变化c、 选择菜单栏窗口CPU窗口d、 观察单步执行时CPU内部、存储Memory 窗口数据0400h单元3、 完成思考题,调试成功后,请老师进行实验验收、打分a、 输出1个十六进制数的子程序中为什么用“cmp al,9”指令,不用会怎样。b、 编写程序,求10个数的和,并输出。4、 本次实验出现问题、解决方法,以及对实验的意见13