550 likes | 710 Vues
32位微机原理实验教程 青岛大学电工电子实验教学中心 2005年4月. 微机原理实验的内容及方法. 32位微机原理实验的内容 汇编语言程序的上机过程 教学实验的主要设备 32位微机原理教学实验环境. 一、微机原理实验教学的内容. 实验内容: 熟悉汇编语言的使用和汇编语言程序的设计 实验要求: 掌握32位微机的指令系统 掌握汇编语言程序设计方法 了解实模式工作原理及保护模式的部分概念 实验安排 共8次,16个课时. 二、汇编语言程序的上机过程. 计算机上运行汇编语言程序的步骤: (1)用编辑程序建立 ASM 源程序文件
E N D
32位微机原理实验教程青岛大学电工电子实验教学中心2005年4月32位微机原理实验教程青岛大学电工电子实验教学中心2005年4月
微机原理实验的内容及方法 • 32位微机原理实验的内容 • 汇编语言程序的上机过程 • 教学实验的主要设备 • 32位微机原理教学实验环境
一、微机原理实验教学的内容 • 实验内容: • 熟悉汇编语言的使用和汇编语言程序的设计 • 实验要求: • 掌握32位微机的指令系统 • 掌握汇编语言程序设计方法 • 了解实模式工作原理及保护模式的部分概念 • 实验安排 • 共8次,16个课时
二、汇编语言程序的上机过程 • 计算机上运行汇编语言程序的步骤: • (1)用编辑程序建立ASM源程序文件 • (2)用汇编程序将ASM 文件汇编成OBJ文件 • (3)用连接程序将OBJ文件转换成EXE文件 • (4)在DOS命令状态下直接键入文件名执行该文件。 • 上机过程示意图:
二、汇编语言程序的上机过程 • ASM文件:用汇编语言编写的程序。 • OBJ程序:用机器码(二进制代码)表示的目标程序文件。 • EXE文件:经过连接程序将目标文件与库文件或其他目标文件连接在一起形成的可执行文件。 • LINK程序:用于将组成程序的若干个模块连接在一起。以产生可执行文件。
二、汇编语言程序的上机过程 • 返回DOS的方法 • 1、标准方法:INT 20H • 入口参数=CS指向程序段前缀 • 要求:定义主程序为一个FAR过程,最后一条指令为RET,主程序开始部分使用如下指令保存INT 20H指令的段基址和偏移地址: • PUSH DS • MOV AX,0 • PUSH AX • 2、非标准方法 • MOV AH, 4CH • INT 21H • 或:MOV AX, 4C00H • INT 21H
三、实验教学的主要设备 • TD-PIT实验及开发系统 • 由西安唐都科教仪器公司研制 • 由一组支持在80386及其上PC微机上的编程、调试软件构成。 • 可以实现32位微机实模式和保护模式下的实验程序的编制、运行及调试。 • 系统功能及特点 • 提供了基于80386及其以上微机的集成操作软件。
四、32位微机原理教学实验环境 • Tddebug调试软件简介: • 集成了编辑、汇编、连接及调试等多个功能,构建了保护模式的运行环境。 • 软件启动 • 注意:要求将调试软件拷贝到自己的目录中
Tddebug集成操作软件使用说明 • 1.主菜单说明 • Edit 编辑源文件 • Compile • Compile:编译源文件 • Link:连接目标文件 • Build All:编译和连接 • Pmrun: 进入保护模式调试状态 • Rmrun: • Run:运行实模式程序 • Debug:进入实模式调试状态 • Quit:退出Tddebug
Tddebug集成操作软件使用说明 • 2.菜单使用说明 • 1、选择主菜单Alt+Key(E,C,P,R,H,Q) • 2、菜单切换 • 可以通过小键盘上的左右键或直接使用快捷键在主菜单之间进行切换。使用小键盘上的上下键可以选择子菜单中的菜单项。 • 3、执行菜单项 • 选中要执行的菜单项,键入Enter键即可。 • 4、说明 • 在执行编辑、编译、连接、运行、调试前,系统会弹出对话框,要求用户键入操作的文件名称。结束键入则以Enter键作为结尾,取消操作可以按Esc。
Tddebug集成操作软件使用说明 • 3.实模式调试窗口说明 • TD:Tddebug集成调试软件下集成了Turbo Debugger作为实模式实验程序的调试器,该调试器简称。 • Turbo Debugger调试器窗口划分为Data、Code、Command和Register,分别指示数据区、代码区、命令区、寄存器显示区, • 通过Tab键可以在四个窗口间进行切换。
Tddebug集成操作软件使用说明 • 用TD调试实模式汇编程序的方法 • 进入TD环境只需要在Tddebug中运行Rmrun菜单中的Debug菜单子项即可 • 在进入时软件会要求用户输入调试程序的名称。 • 注意:在进入TD后,可能会叠加一个报告无符号表的对话框,按Esc键就能关闭该对话框。 • 使用热键选择相应的菜单
热键对应的菜单 • F1:显示帮助窗口 • F2:设置/清除断点 • F4:执行到光标处 • F7:单步执行 • F8:单句执行 • F9:运行程序 • F10:激活主菜单 • Alt+X:退出 • Tab:切换焦点区域 • Ctrl+Break:终止程序执行
Tddebug集成操作软件使用说明 • 当焦点区域在寄存器显示区: • Ctrl+R:切换16位/32位通用寄存器并显示 • Ctrl+Z:使光条指示寄存器的内容清零 • Ctrl+C:手动修改光条指示寄存器的内容 • 当焦点区域在数据显示区: • Ctrl+D: 修改数据句显示格式 • Ctrl+G: 指定需要显示的内存区域首地址 • Ctrl+S: 查找指定的字节值表 • Ctrl+C: 修改光标当前存储单元的内容
Tddebug集成操作软件使用说明 • 调试举例:32位无符号数带借位运算。 • 程序: DATA SEGMENT SUB1 DW 4275H,3412H ;被减数为34124275H SUB2 DW 12A5H,2F65H ;减数为2F6512A5H DSUB DW 0,0 DATA ENDS CODE SEGMENT AUSSME CS:CODE,DS:DATA START:MOV AX,DATA MOV DS,DATA MOV AX,SUB1 SUB AX,SUB2 MOV DSUB,AX ;两低位字相减,结果送DSUB MOV AX,SUB1+2 SBB AX,SUB2+2 ;两高位字相减,并减去低位的借位CF MOV DSUB+2,AX CODE ENDS END START
实验报告 • 实验目的 • 实验内容 • 实验程序框图 • 实验程序源代码 • 实验中出现的问题及解决过程 • 实验的收获与心得 • 注意: • (1)实验前应预习实验指导书,编写实验程序。 • (2)实验报告使用统一的青岛大学实验报告纸书写。 • (3)实验报告于第二周的周四之前交。 • (4)成绩由出勤和实验报告构成。
实验一:显示程序实验 • 一、 实验目的 • (1)熟悉Tddebug调试环境和Turbo Debugger的使用。 • (2)掌握在PC机上以十六进制数形式显示数据的方法。 • (3)掌握部分DOS功能调用的使用方法。 • 实验中可使用DOS功能调用(INT 21H)
实验一:显示程序实验 • DOS功能调用(INT 21H) • 1、显示单个字符 • 入口:AH=02H • 调用参数:DL=输出字符 • 2、显示字符串 • 入口:AH=09H • 调用参数:DS:DX=串地址,’$’为结束字符 • 3、键盘输入并回显 • 入口:AH=01H • 返回参数:AL=输出字符 • 4、返回DOS系统 • 入口:AH=4CH • 调用参数:AL=返回码
实验一:显示程序实验 • 实验流程图:
实验一:显示程序实验 • 实验报告要求: • 1、整理经过运行的正确的源程序,加上注释。 • 2、总结在PC机上以十六进制数形式显示数据的方法,及部分DOS功能调用的使用方法。
实验二、数据传送实验 • 实验目的: • 1、熟悉Tddebug调试环境和Turbo Debugger的使用。 • 2、掌握与数据有关的不同寻址方式。 • 实验内容: • 本实验要求将数据段中的一个字符串传送到附加段中,并输出附加段中的目标字符串到屏幕上。
实验二、数据传送实验 • 程序流程图:
实验二、数据传送实验 • 系统功能调用方法 • 对于所有的功能调用,使用时一般需要经过三个步骤: • (1)子程序的入口参数送相应的寄存器; • (2)子程序编号送AH; • (3)发出中断请求:INT 21H • 例如:显示一个字符串:“Good morning!” MSG DB ‘Good morning!$’ … MOV DX,OFFSET MSG MOV AH,9 INT 21H 有的子程序不需要入口参数,(1)可以省略 例如: MOV AH,4CH INT 21H
实验二、数据传送实验 • 编程提示: • 设置附加段存放目的串。 • 使用INT 21的09号功能调用进行字符串显示,利用堆栈,进行调用参数的传递。 • 程序主体部分的寻址方式可以使用寄存器间接寻址或相对寻址。 • 实验报告要求: • 1、整理经过运行的正确的源程序,加上注释。 • 2、总结与数据有关的不同寻址方式方法。
实验三、分支程序设计实验 • 一、实验目的: • 掌握分支程序的设计方法。 • 三、实验内容 • 求无符号字节序列中的最大值和最小值。 • 程序流程图:
实验四、循环程序设计实验 • 一、实验目的: • 掌握循环程序的设计方法。 • 二、实验内容 • 求某数据区内负数的个数。 • 编程提示:根据符号位判断是否为负数。事先应在数据区内预置十个数值。 • 程序流程图:
实验五、数码转换实验 • 一、实验目的: • 掌握不同进制数及编码相互转换的程序设计方法。 • 二、实验内容: • 1.将ASCII码表示的十进制数转换为二进制数 • 本实验要求将缓冲区中的一个5位十进制数00012的ASCII码转换成二进制数,并将转换结果按位显示在屏幕上。 • 转换方法: • 十进制数可以表示为:Dn×10n+Dn-1×10n-1+…+D0×100=Di×10i ,即: • 从十进制数的最高位Dn开始做乘10加次位的操作,依次类推
实验五、数码转换实验 • 实验3-1程序流程图:
实验五、数码转换实验 • 2.将十进制数的ASCII码转换为BCD码 • 本实验要求将键盘输入的一个5位十进制数54321的ASCII码存放在数据区中,转换为BCD码后,将转换结果按位分别显示于屏幕上。若输入的不是十进制数的ASCII码,则输出“FF” • 转换方法:0~9 的BCD码=0~9的ASCII码-30H • 程序流程图:
实验五、数码转换实验 • 程序流程图:
实验五、数码转换实验 • 3 .将十六进制数的ASCII码转换为十进制数 • 本实验要求将缓冲区中存放的000CH的ASCII码转换成十进制数,并将转换结果显示在屏幕上。 • 转换方法:被转换数除10取其商直至其余数为0 • 程序流程图:
实验五、数码转换实验 • 程序流程图:
实验五、数码转换实验 • 4.BCD码转换为二进制码 • 本实验要求将4个二位十进制数的BCD码存放在某一内存单元中,转换出的二进制数码存入其后的内存单元中,转换结束,送屏幕显示。 • 转换方法:从十进制数的BCD码的最高位Dn开始做乘10加次位的操作,依次类推 • 程序流程图:
实验五、数码转换实验 • 程序流程图:
实验六、运算类程序实验 • 一、实验目的: • (1)掌握运算类指令编程及调试方法。 • (2)掌握运算类指令对各状态标志位的影响及测试方法。 • 二、实验内容: • 1.二进制双精度加法运算 • 本实验要求计算 X+Y=Z,并将结果Z输出到屏幕,其中X=001565A0H,Y=0021B79EH。 • 编程提示:低16位与高16位分别进行加法运算,高16位需要使用带进位加法。
实验六、运算类程序实验 • 程序流程图:
实验六、运算类程序实验 • 2.十进制数的BCD码减法运算 • 本实验要求计算X-Y=Z,其中,X、Y、Z为BCD码,X=0400H,Y=0102H。 • 编程提示: 按高8位低8位分别进行计算,进行减法运算需进行非压缩BCD码调整。进行标志寄存器的保存。 • 程序流程图:
实验六、运算类程序实验 • 程序流程图:
实验六、运算类程序实验 • 3.乘法运算 • 本实验要求实现十进制数的乘法,被乘数和乘数均以非压缩BCD码形式存放于内存中,被乘数为54320H,乘数为3H,运算结束后将乘积显示在屏幕上。 • 编程提示:需要判断被乘数是否为BCD码,需要进行BCD码调整,并进行BCD码与ASCII码的转换。 • 程序流程图:
实验六、运算类程序实验 • 程序流程图:
实验六、运算类程序实验 • 4.用减奇数开平方运算 • 本实验要求利用减奇法计算0040H的开平方值,并将运算结果显示在屏幕上。 • 编程提示:要做S的开方运算,就从S中逐次减去自然数中的奇数1,3,5,7…,一直到被减数为0或被减数不够减下一个奇数为止,然后统计减去自然数的奇数个数,就是S的近似平方根。 • 程序流程图:
实验六、运算类程序实验 • 程序流程图:
实验七、子程序设计实验 • 一、实验目的: • 1、掌握子程序的定义调用方法。 • 2、掌握系统功能调用程序的使用和编写方法。 • 二、实验内容 • 1.数据移动实验 • 本实验要求将指定数据区的数据搬移到另一个数据区,并通过子程序调用的方法将搬移的数据显示在屏幕上。 • 编程提示:需要判断目标区与源数据区是否重叠,以决定数据传递的方向 。
实验七、子程序设计实验 • 程序流程图:
实验七、子程序设计实验 • 2.数码转换及显示实验 • 实验要求利用47H号中断将一组字符转换成16进制数码,并在屏幕上显示出来。 • 编程提示:常用中断矢量码修改方法 • 一、绝对地址置入法:使用AT和ORG指令设置 如:int-tbl segment at 0 org n*4 dd int-vce int-tbl ends … main segment … ;主程序 int-vce proc far ;中断服务程序 … iret …
实验七、子程序设计实验 • 二、直接装入法: • 根据该给定的中断地址算出其在中断矢量表中的单元地址,使用传送指令直接置入。47H*4=011CH • 如: … xor ax,ax mov ds,ax mov ax,2000h mov word ptr[011ch],ax mov ax,1000h mov word ptr[012ch+2],ax …
实验七、子程序设计实验 • 三、使用串传送指令装入法 • 利用STOSW指令将AX/AL内容写入ES段由DI指向的目标偏移地址单元中,(ES)=0,(DI)=N*4 • 例如: … cli mov ax,0 mov es,0 mov di,n*4 mov ax,offset int-vce cld stosw mov ax,seg int-vce stosw sti …
实验七、子程序设计实验 • 四、使用DOS调用 • 利用DOS中断35H以及专门为更新中断服务程序入口地址的25H来设置中断地址。 • 使用21H的35号功能调用进行原中断服务程序的入口地址的获得与保存。 • 如: mov ah,35h mov al,0 int 21h mov intoseg, es mov intoff, bx … • 用INT 21H的25H完成中断服务程序的入口地址的重新装入,其中AL=中断类型号,DS:DX=中断服务程序入口地址的段,偏移量地址。 • 如: push ds mov al,40h mov dx,seg intx mov ah,25h mov ds,dx int 21h mov dwx,offset intx pop ds