微机原理实验讲义程曙艳编厦门大学自动化系2016年10月汇编语言的上机过程1、建立汇编语言的工作环境至少有以下程序文件:编辑程序,文件名,使用编辑程序代码生成*.asm。
汇编程序,文件名MASM.EXE,使用masm.exe对*.asm文件进行汇编,生成*.obj 文件连接程序,文件名LINK.EXE,使用link.exe对目标文件*.obj进行连接生成*.exe 文件调试程序,文件名DEBUG.EXE,使用debug.exe对可执行文件*.exe进行调试运行(1)编辑可以用记事本或DOS下的EDIT编辑器来编写源程序。
但程序保存时文件必须取名为*.asm 。
或EDIT 文件名.asm 打开已经存在的文件。
(2)汇编在DOS状态执行masm 文件名,则屏幕显示与操作如下:(3)连接汇编后产生的目标文件必须经过连接,才能成为可执行文件.exe。
在DOS 状态执行link 文件名,则屏幕显示与操作如下:(4)运行、调试>DEBUG 文件名.exeDebug运行后,出现状态提示符短划线-常用debug命令:D,显示内存单元内容R,显示与修改寄存器内容T、P,单步执行命令G,连续执行指令U,反汇编Q,退出DEBUG程序2. 汇编语言程序格式汇编语言由若干个段组成:堆栈段(保存数据、断点等信息)代码段(存放指令)必需数据段(定义数据,分配存储单元)附加段(定义数据,分配存储单元)每段必须有且仅有一个名字,以SEGMENT定义段的起始,以ENDS定义段的结束,整个程序结束后需以END收尾STACK SEGMENT......STACK ENDSDATA SEGMENT......DATA ENDSESEG SEGMENT......ESEG ENDSCODE SEGMENTASSUME CS:CODE ,DS:DATA,SS:STACK,ES:ESEGSTART:mov ax, datamov ds, axmov ax, esegmov es, axmov ax, stackmov ss, ax……….CODE ENDSEND START3. 程序例题:STACKS SEGMENT STACK ;堆栈段DW 128 DUP(?)STACKS ENDSDATAS SEGMENT ;数据段;请在这里定义您的数据STRING DB 13,10,'Hello World!',13,10,'$'DATAS ENDSCODES SEGMENT ;代码段ASSUME CS: CODES, DS: DATAS START: MOV AX,DATAS ;初始化MOV DS, AX;请在这里添加您的代码LEA DX, STRING ;显示字符串MOV AH, 9INT 21HMOV AH,01 ;等待键盘输入INT 21HMOV AX,4C00H ;退出程序INT 21HCODES ENDSEND START软件实验部分实验一二进制加、减法编程实验一、实验要求和目的1.熟悉汇编语言二进制多字节加法基本指令的使用方法;2.熟悉汇编语言二进制多字节减法基本指令的使用方法;3.掌握汇编语言编程的一般结构。
二、实验内容(1)编写程序,实现长度为2字的两个数相加。
(2)编写程序,实现一个长度为2字的数和一个长度为1字的数相减。
实验二十进制数的BCD加、减法编程实验一、实验要求和目的1.熟悉BCD码的基本知识2.熟悉汇编语言BCD码多字节加减法基本指令的使用方法;3.掌握BCD码调整指令的使用方法。
二﹑实验内容(1)编写程序,从键盘输入任意2个数,实现两数相加和相减,结果显示在屏幕上实验三二进制乘、除法编程实验一、实验要求和目的1.熟悉数据的补码表示。
2.熟悉无符号数和有符号数乘法和除法指令的使用;3.掌握符号位扩展指令的使用。
二﹑实验内容1)被除数是一个2字长的有符号数,除数是一个1字长的有符号数,求两个数相除的商和余数。
(2)求两个2字长的无符号数相乘的结果,并将结果保存在存储空间中。
实验四ASCII码表示的十进制数、二进制数和BCD的互换编程实验一、实验要求和目的1.了解汇编语言中的十进制、二进制、BCD码的表示形式;2.了解BCD值和ASCII值的区别3.了解如何查表进行数值转换及快速计算。
4.掌握利用汇编语言进行进制转换的方法。
二、实验内容(1)将一个用ASCII码表示的多位十进制转换为二进制,要求十进制不大于65535,且输入数码为无符号数。
(2)将用ASCII码表示的数字串,转化为压缩的BCD码。
三、实验提示(1)十进制数字串转二进制从最高位开始,重复进行“高位*10+低位”的操作,用公式表示为ΣDi×10i=((…(Dn×10+Dn-1)×10)+Dn-2)×10+…+D1)×10+D0 (2)将ASCII码转换为压缩BCD码,将ASCII码的高4位置0,再将十位ASCII 码的低4位左移至高4位,再与个位ASCII码相或。
采用约定寄存器法传递参数。
实验五字符串操作编程实验一、实验要求和目的1.了解汇编语言字符串处理基本流程;2.熟悉汇编语言字符串处理基本指令的使用方法;3.掌握利用汇编语言实现字符串处理的程序设计方法。
二、实验内容(1)编写程序,实现两个字符串比较,如相同,则显示“match”,否则,显示“NO MATCH”(2)编写程序,统计一串字符串中某字符出现的次数。
实验六排序实验一、实验要求和目的1.;掌握用汇编语言编写排序程序的思路和方法2.熟悉汇编语言分支程序基本指令的使用方法;3.掌握利用汇编语言实现单分支、双分支、多分支的程序设计方法。
二、实验内容(1)从键盘任意输入10个数,要求把这些数从小到大排序,并将结果输出在屏幕上。
实验七清屏和设置光标的实验一、实验要求和目的1.掌握用INT 10H的02H功能设置光标的方法2. 掌握用INT 10H 的07H 功能清窗口和设置窗口属性的方法二、实验内容编制一个程序,先清屏,再设置光标,起始位置为第5行第6列,结束行位置为第8行第9列。
实验八大小写字母的转换实验一、实验要求和目的1.了解汇编语言字符串处理基本流程;2.熟悉汇编语言字符串处理基本指令的使用方法;3.掌握小写字母和大写字母在计算机内的表示方法二、实验内容(1)编写程序,接收键盘输入字符(以^-C为结束,即ASCII码的ETX),并将其中的小写字母转换为大写字母并显示实验九响铃及接收日期程序一、实验要求和目的1.掌握响铃的方法2. 掌握年月日输入方法二、实验内容先显示“WHAT IS THE DATA(MM/DD/YY)?”并响铃一次,然后从键盘接收输入的年月日,并显示在屏幕上。
实验十计算N!的实验一、实验目的1.了解数学函数是怎样在汇编语言上实现的2.掌握汇编程序的分支及循环程序的设计方法二、实验内容编写计算N!的程序,数值N由键盘输入,结果在屏幕上输出。
N的范围为0~10。
硬件实验部分实验一I/O地址译码一、实验目的掌握I/O地址译码电路的工作原理。
二、实验原理和内容实验电路如下图所示,其中74LS74为D触发器,可直接使用实验台上数字电路实验区的D触发器,74LS138为地址译码器。
译码输出端Y0~Y7在实验台上“I/O地址“输出端引出,每个输出端包含8个地址,Y0:280H~287H,Y1:288H~28FH,……当CPU执行I/ O指令且地址在280H~2BFH范围内,译码器选中,必有一根译码线输出负脉冲。
例如:执行下面两条指令MOV DX,2A0HOUT DX,AL(或IN AL,DX)Y4输出一个负脉冲,执行下面两条指令MOV DX,2A8HOUT DX,AL(或IN AL,DX)Y5输出一个负脉冲。
利用这个负脉冲控制L7闪烁发光(亮、灭、亮、灭、……),时间间隔通过软件延时实现。
实验二简单并行输出接口一、实验目的掌握简单并行接口的工作原理及使用方法。
二、实验内容1、按下面图简单并行输出接口电路图连接线路(74LS273插通用插座,74LS32用实验台上的“或门”)。
74LS273为八D触发器,8个D输入端分别接数据总线D0~D7,8个Q输出端接LED显示电路L0~L7。
2、编程从键盘输入一个字符或数字,将其ASCⅡ码通过这个输出接口输出,根据8个发光二极管发光情况验证正确性。
三、编程提示上述并行输出接口的地址为2A8H,并行输入接口的地址为2A0H,通过上述并行接口电路输出数据需要3条指令:MOV AL,数据MOV DX,2A8HOUT DX,AL通过上述并行接口输入数据需要2条指令:MOV DX,2ADHIN AL,DX实验三简单并行输入接口一、实验目的掌握简单并行接口的工作原理及使用方法。
二、实验内容1、按下面图简单并行输入接口电路图连接电路(74LS244插通用插座,74LS32用实验台上的“或门”)。
74LS244为八缓冲器,8个数据输入端分别接逻辑电平开关输出K0~K7,8个数据输出端分别接数据总线D0~D7。
2、用逻辑电平开关预置某个字母的ASCⅡ码,编程输入这个ASCⅡ码,并将其对应字母在屏幕上显示出来。
三、编程提示1、上述并行输出接口的地址为2A8H,并行输入接口的地址为2A0H,通过上述并行接口电路输出数据需要3条指令:MOV AL,数据MOV DX,2A8HOUT DX,AL通过上述并行接口输入数据需要2条指令:MOV DX,2ADHIN AL,DX实验四中断控制器8259一、实验目的1、了解Windows下中断处理过程2、了解中断控制器工作原理及扩展中断控制器二、实验内容用查询和中断方式分别实现控制指示灯,要求直接用手动产生的单脉冲作为中断请求信号,每按一次单脉冲产生一次中断,PC机显示中断请求信息:中断0(IN0):mess1 db 'Hello! This is interrupt * 0 *!',0dh,0ah,'$'中断1(IN1):mess2 db 'Hello! This is interrupt * 1 *!',0dh,0ah,'$'中断2(IN2):mess3 db 'Hello! This is interrupt * 2 *!',0dh,0ah,'$'中断3(IN3):mess4 db 'Hello! This is interrupt * 3 *!',0dh,0ah,'$'中断4(IN4):mess5 db 'Hello! This is interrupt * 4 *!',0dh,0ah,'$'中断5(IN5):mess6 db 'Hello! This is interrupt * 5 *!',0dh,0ah,'$'中断6(IN6):mess7 db 'Hello! This is interrupt * 6 *!',0dh,0ah,'$'中断7(IN7):mess8 db 'Hello! This is interrupt * 7 *!',0dh,0ah,'$'接线:8259片选接IO地址译码Y68259的INTA接VCC8259的请求(IN0~IN7)分别接单脉冲信号实验五可编程定时器/计数器8254(1)一、实验目的掌握8253的基本工作原理和编程方法。