8086微机原理实验之子程序及中断实验

合集下载

8086 汇编语言中断程序设计

8086 汇编语言中断程序设计

汇编语言程序设计实验报告学院:计算机科学与技术专业:计算机科学与技术班级:计科131LEA DX,FNAMEMOV CX,0 ;语句1INT 21HJC EXITMOV FNUM,AXMOV BX,AX ;语句2MOV CX,100MOV AH,40HLEA DX ,BUFINT 21HMOV BX,FNUMMOV AH,3EHINT 21HEXIT:MOV AH,4CHINT 21HCODE ENDSEND START使用相应的文本编辑器建立文件LAB7.asm,内容如上所示。

2.汇编并运行此程序后,在当前目录建立的文件名是什么?其内容是什么?1>汇编:C:\masm> masm lab7;2>连接:C:\masm> link lab7;3>运行:C:\masm> lab73.若将语句1 改为mov cx,1,则运行情况与前面会有什么区别?4.若将语句1 改为mov cx,2,则运行结果同上会有什么不同?并简要说明此语句的作用.5.若将语句2 改为mov bx,1,则运行结果会有什么不同?简要说明则语句的作用.实验二:编写0 号中断的处理程序,使得在除法溢出发生时,在屏幕中间显示字符串“divide error!”,然后返回到DOS。

源程序下:assume cs:codecode segmentstart:mov ax,csmov ds,axmov si,offset domov ax,0mov es,axmov di,200hmov cx,offset doend-offset do ;安装中断例程cldrep movsbmov word ptr es:[0],200hmov word ptr es:[2],0 ;设置中断向量表mov dx,0ffffhmov bx,1 ;测试一下div bxmov ax,4c00hint 21hdo:jmp short dostartdb 'divide error!'dostart:mov ax,0mov ds,axmov si,202hmov ax,0b800hmov es,axmov di,160*12+60mov cx,13s:mov al,ds:[si]mov ah,15mov es:[di],axinc siinc diinc diloop smov ax,4c00hint 21hdoend:nopcode endsend start3.若将语句1 改为mov cx,1,文件为只读。

微机原理实验---Emu8086仿真软件的使用实验

微机原理实验---Emu8086仿真软件的使用实验
新建文件(四种模板): COM模板:适合简单程序段,从代 码段的偏移地址为100H处开始存放 指令(即:源代码之前应有ORG 100H)。
EXE模板:适合完整程序的编写。 BIN模板:一般不用,因为不能 正确解释伪指令。
BOOT模板:编写程序,数据段 的段地址为07C0H。
选择COM模板, 软件出现源代码编辑器的界面, 如图所示:
(2)
存器的内容:
MOV AX,1000H ; AX=?
MOV BX,2000H ;BX=?
MOV CX,3000H ;CX=?
MOV DX, AX ;AX=? , DX=?
MOV AX, CX ;CX=?, AX =?
MOV CX, BX ;BX =?, CX =?
MOV BX, DX ;DX=?, BX=?
HLT
思考:该程序段实现什么功能?(3) 记录每条指来自执行后相关寄存器、存储器的内容:
MOV AX, 0B800H MOV DS, AX ; DS AX MOV CX, 5F41H MOV BX, 15EH MOV [BX], CX ; 将 CX的值传送到 BX 指出的内存
单元B800H:015EH中 HLT
(3)编辑源程序并保存,汇编源程序的文件扩展名 必须是ASM 。 在源代码编辑器的空白区域,编写程序。
程序编写结束,点击菜单【文件】【另存为……】, 将源程序保存,文件扩展名为.asm。
(4)编译程序 点击工具栏的【编译】按钮,对程序编译,检查语法 是否有错。如果程序有错误,编译不通过,并给出错 误提示的信息。
EMU8086集源代码编辑器,汇编/反汇编工 具以及可以运行debug的模拟器(虚拟机器) 于一身。它能够编译源代码,并在模拟器上一 步一步的执行。

8086微机原理实验报告

8086微机原理实验报告

8086微机原理实验报告实验名称:8086微机原理实验实验目的:1.深入了解8086微处理器的内部结构和指令系统。

2.掌握汇编语言的编程方法和技巧。

3.熟悉微机系统的输入输出操作原理。

4.掌握8086微机系统的调试方法和程序调试技巧。

实验器材:1.8086微处理器芯片2.Intel 8086学习板3.编程器4.示波器5.实验箱实验步骤:1.熟悉8086微处理器的内部结构和指令系统在开始实验前,首先需要熟悉8086微处理器的内部结构和指令系统。

通过阅读教材和讲义,了解到8086微处理器采用16位结构,具有4个寄存器组,支持16种不同寻址方式的指令。

熟练掌握常用的指令系统和汇编语言的编程方法。

2.设计并编制简单的汇编程序在熟悉8086微处理器的内部结构和指令系统后,我们开始设计并编制简单的汇编程序。

本实验中,我们编写了一个简单的汇编程序,用于实现两个数的加法操作,并将结果存储在内存中。

程序中使用了mov指令将操作数送入寄存器,add指令将它们相加,再用mov指令将结果存储到内存中。

程序流程图如下所示:a. 将第一个数送入累加器A中。

b. 将第二个数送入寄存器B中。

c. 执行add指令,将A和B相加,结果保存在A中。

d. 将结果存储到内存中。

e. 程序结束。

3.调试程序并进行测试在完成汇编程序的编写后,我们需要使用调试器对程序进行调试,并进行测试。

首先,将程序加载到学习板上进行调试。

在调试过程中,我们使用示波器观察各个信号的波形,以确定程序的正确性。

通过逐步单步执行程序并观察寄存器和标志位的变化,我们验证了程序的正确性。

接下来,我们使用输入设备输入两个数,并观察输出结果是否正确。

测试结果表明程序正确实现了两个数的加法操作。

4.总结体会和改进建议通过本次实验,我们深入了解了8086微处理器的内部结构和指令系统,掌握了汇编语言的编程方法和技巧,熟悉了微机系统的输入输出操作原理,以及掌握了8086微机系统的调试方法和程序调试技巧。

微机原理8086实验指导书

微机原理8086实验指导书

实验一循环程序、分支程序与运算程序的设计一. 实验内容1.在ABC地址处有20个字节数据,今要求传送到CBA地址处,并在屏幕上显示目的串的内容。

试用两种方法实现。

(字节串传送,字节传送循环)2.以BLOCK1和BLOCK2开头的2个字符串,其长度均为LEN,试编程实现:(1)将BLOCK1开头的字符串送到BLOCK2开始的内存空间。

(2)将BLOCK1开始的内存空间全部清零。

3.试编一程序,要求比较两个字符串STRING1和STRING2所含字符是否完全相同,若相同则屏幕显示“MATCH”,若不相同则屏幕显示“NO MATCH”4.在ABC和BCD两地址起,各有两个字节的无符号数,试编程实现这两个无符号数的加法以及减法运算,并将结果分别存放到CBA和DCB开始的存储单元中去。

二. 实验目的:1.使学生掌握MASM汇编环境下程序的编辑、编译、连接、调试过程及方法。

2.掌握程序框图的设计方法;3.掌握分支程序的设计方法;4.掌握循环程序的设计方法;三. 实验说明1.实验之前,一定写好预习报告(包括画出程序框图;写出程序),否则不准做实验;2.调试程序程序,改正语法错误和其他错误。

四. 实验报告要求:1.画出程序框图;2.写出预习过程中所写的两个程序;3.写出调试之后的程序和两个程序;实验二主程序与子程序的设计一. 实验内容1.试用子程序结构编写一程序:从键盘输入一个2位十进制的月份数(01~12),然后显示出相应的英文缩写名。

提示:根据题目要求实现的功能,可编写用一个主程序MAIN分别调用几个子程序。

(1)INPUT从键盘接收一个2位数,并把它转换为对应的二进制数。

(2)LOCATE 把输入的月份数与其英文缩写名(如JAN,FEB,MAR,APP,MAY,JUN等)对应起来,制成一个字符表以便查找。

DISPLAY 将找到的缩写字母在屏幕上显示出来,显示可用DOS所提供的显示功能(INT 21H的09号功能)。

8086汇编语言程序设计 微机实验报告

8086汇编语言程序设计 微机实验报告

微机实验报告第一部分:8086汇编语言程序设计一、实验目的通过上机练习,初步掌握8086的指令系统,熟悉8086汇编语言程序的编写格式,学会编写简单的汇编语言应用程序,初步学会使用DEBUG调试工具。

二、实验题目(一)编程实现从字符串中查找特定的字符,记录特定字符的个数,并将结果在屏幕上显示,同时退出并返回DOS。

(要求字符串从键盘上输入)1、流程图2、实验程序及注释DATA SEGMENTBUFSIZE DB 20 ;数据段ACTCHAR DB ? ;定义字符串CHARTEXT DB 20 DUP(?) ;给输入字符分配内存DB '$'CNT DB 0 ;给计数器分配内存STRING1 DB 'PLEASE INPUT THE STRING:','$'STRING2 DB 0AH,0DH,'INPUT THE WORD YOU WANT TO CHECK:','$' STRING3 DB 0AH,0DH,'THE NUMBER OF THE WORD IS:','$'DATA ENDS ;数据段结束COSEG SEGMENT ;代码段ASSUME CS:COSEG,DS:DATASTART: MOV AX,DATAMOV DS,AXMOV DX,OFFSET STRING1 ;显示提示语:请输入字符串MOV AH,09H ;输出字符串STRING1INT 21HMOV DX,OFFSET BUFSIZE ;从键盘输入字符串存入BUFSIZEMOV AH,0AH ;并送显INT 21HMOV DX,OFFSET STRING2 ;显示提示语:想查询的字符是MOV AH,09H ;输出字符串STRING2INT 21HMOV AH,01H ;从键盘上输入字符到AL中并送显INT 21HMOV BX,OFFSET CHARTEXT ;将字符串首地址存入BXMOV CL,ACTCHAR ;置循环次数CX=字符串长度XOR CH,CHLP1: CMP AL, [BX] ;字符串从头开始与键入字符AL比较JZ LP2 ;相等则转入LP2INC BX ;指针指向字符串下一个字符DEC CX ;循环次数减一JNZ LP1 ;若还有未比较的字符,继续循环LP1JMP FINI ;若全部比较完毕,跳转FINILP2: INC CNT ;计数器增一INC BX ;指针指向字符串下一个字符DEC CX ;循环次数减一JNZ LP1 ;若还有未比较的字符,跳至LP1 FINI: MOV DX,OFFSET STRING3 ;显示提示语:所查询的字符个数:MOV AH,09HINT 21HMOV AL,CNT ;将计数器的值送ALAAM ;将此值转换成非压缩BCD码ADD AH,30H ;将BCD码转换为ASCⅡ码MOV DL,AH ;高位送显MOV AH,02HINT 21HMOV AL,CNT ;再将计数器的值送ALAAMADD AL,30H ;将BCD码转换为ASCⅡ码MOV DL,AL ;低位送显MOV AH,02HINT 21HMOV AH,4CH ;结束INT 21HCOSEG ENDS ;代码段结束END START ;程序结束3、运行结果PLEASE INPUT THE STRING(先输入字符串):ASDFAAD↙INPUT THE WORD YOU WANT TO CHECK(输入待查找字符): A↙THE NUMBER OF THE WORD IS(数量为):3↙PLEASE INPUT THE STRING(先输入字符串):ASDFAAD↙INPUT THE WORD YOU WANT TO CHECK(输入待查找字符):9↙THE NUMBER OF THE WORD IS(数量为):0↙PLEASE INPUT THE STRING(先输入字符串):ASDFAAD↙INPUT THE WORD YOU WANT TO CHECK(输入待查找字符): S↙THE NUMBER OF THE WORD IS(数量为):1↙4、程序改进○1循环次数的改进原来的程序:MOV CX,19改进原因:此程序表明无论输入的字符串多长,即使没有达到限定的最大字符串的长度,也要循环19次。

汇编语言程序设计实验四:8086标志寄存器及中断

汇编语言程序设计实验四:8086标志寄存器及中断

汇编语⾔程序设计实验四:8086标志寄存器及中断实验任务1task1.asm源码:assume cs:code, ds:datadata segmentx dw 1020h, 2240h, 9522h, 5060h, 3359h, 6652h, 2530h, 7031hy dw 3210h, 5510h, 6066h, 5121h, 8801h, 6210h, 7119h, 3912hdata endscode segmentstart:mov ax, datamov ds, axmov si, offset xmov di, offset ycall add128mov ah, 4chint 21hadd128:push axpush cxpush sipush disub ax, axmov cx, 8s: mov ax, [si]adc ax, [di]mov [si], axinc siinc siinc diinc diloop spop dipop sipop cxpop axretcode endsend start关于add指令的调试过程截图如下:由图可知add指令使得ZF标志位由NZ变为ZR,CF标志位由NC变为CY,可知运算结果为0且在运算中由最⾼位向更⾼位产⽣了进位。

关于inc指令的调试过程截图如下:由图可知inc指令使得ZF标志位由NZ变为ZR,可知运算结果为0,⽽CF未曾改变。

line31~line34的4条inc指令,不能替换成如下代码,原因是:该题⽤adc指令进⾏⼤整数加法,期间需要⽤到CF标志位的数值,⽽上⾯已经验证过add指令会对CF标志位产⽣影响,故不能替换。

add si, 2add di, 2128位加之前数值截图:完成128位加之后数值截图(有变化):实验任务2task2.asm源码:assume cs:code, ds:datadata segmentstr db 80 dup(?)data endscode segmentmov ds, axmov si, 0s1:mov ah, 1int 21hmov [si], alcmp al, '#'je nextinc sijmp s1next:mov ah, 2mov dl, 0ahint 21hmov cx, simov si, 0s2: mov ah, 2mov dl, [si]int 21hinc siloop s2mov ah, 4chint 21hcode endsend start运⾏结果截图:line11-18:获取键盘输⼊的值并赋值给ds:[si] ,若为“#”,则跳转到next处,否则si++后再次重新进⼊本循环。

微机原理上机实验(八+十二)实验报告 8086中断实验 步进电机实验

微机原理上机实验(八+十二)实验报告 8086中断实验 步进电机实验

微机原理上机实验报告实验八:8086中断实验实验十二:步进电机实验微机原理上机实验(八)实验报告实验八:8086中断实验一、实验目的1、了解8086内部响应中断的机制;掌握中断向量的作用。

2、利用实验仪上单脉冲、74HC244电路,不使用8259,实现一个中断实例。

3、复习本节实验内容,可尝试自行编写程序,做好实验准备工作,填写实验报告。

二、实验内容1、编制程序:拨动单脉冲开关,“”送给8086的INTR,触发中断;8086通过INTA信号,读取中断向量;8086计数中断次数,显示于F5区的数码管上注意:给INTR高电平信号,8086就会相应中断,所以实验开始前,保证单脉冲开关给8086低电平;中断程序中,加一个较长的延时程序,在中断结束前,有时间拨动单脉冲开关,恢复给8086低电平。

三、实验原理图本实验,通过F4区的8个拨动开关,给74HC244设定中断向量;本实验的中断向量是08H,即IN7-IN0位数据是00001000。

同学可以自定义中断向量,实验程序中处理中断向量部分程序作相应调整四、实验步骤1、连线说明:B4区:CS244、BLE ——C1区:GNDB4区:RD(IO区)——A3区:INTAA3区:INTR ——B2区:单脉冲B4区:JP57(D0..D7) ——A3区:JP41B4区:JP52(IN0..7) ——F4区:JP27(1..8)D3区:CS、A0、A1 ——A3区:CS1、A0、A1D3区:PC0、PC1 ——F5区:KL1、KL2D3区:JP20、B、C ——F5区:A、B、C2、运行程序3、实验开始前,保证单脉冲开关给8086低电平;运行程序;向下拨动开关(触发中断),立即向上拨动开关,产生一个“”,观察结果,数码管上显示的次数与拨动开关次数是否对应。

五、实验代码EXTRN InitKeyDisplay:NEAR, Display8:NEAR_STACK SEGMENT STACKDW 100 DUP(?)_STACK ENDS_DATA SEGMENT WORD PUBLIC 'DATA'BUFFER DB 8 DUP(?)Counter DB ?ReDisplayFlag DB 0_DATA ENDSCODE SEGMENTSTART PROC NEARASSUME CS:CODE, DS:_DATA, SS:_STACKMOV AX,_DATAMOV DS,AXMOV ES,AXNOPCALL InitKeyDisplay ;对键盘、数码管控制器8255初始化CALL WriIntverMOV Counter,0 ;中断次数MOV ReDisplayFlag,1 ;需要显示STI ;开中断START1: LEA SI,BufferCALL Display8CMP ReDisplayFlag,0JZ START1CALL LedDisplayMOV ReDisplayFlag,0JMP START1WriIntver PROC NEARPUSH ESMOV AX,0MOV ES,AXMOV DI,20HLEA AX,INT_0STOSWMOV AX,CSSTOSWPOP ESRETWriIntver ENDPLedDisplay PROC NEARMOV AL,CounterMOV AH,ALAND AL,0FHMOV Buffer,ALAND AH,0F0HROR AH,4MOV Buffer + 1,AHMOV Buffer + 2,10H ;高六位不需要显示MOV Buffer + 3,10HMOV Buffer + 4,10HMOV Buffer + 5,10HMOV Buffer + 6,10HMOV Buffer + 7,10HRETLedDisplay ENDPINT_0: PUSH DXPUSH AXMOV AL,CounterADD AL,1DAAMOV Counter,ALMOV ReDisplayFlag,1CALL LedDisplayDELAY: PUSH BXPUSH CXPUSH DIPUSH SIMOV CX,20DELAY1: LEA SI,BufferCALL Display8loop DELAY1POP SIPOP DIPOP CXPOP BXPOP AX六、实验思考题1.绘制本实验的详细实验电路图?微机原理上机实验(十二)实验报告实验十二:步进电机实验一、实验目的1、了解步进电机的基本原理,掌握步进电机的转动编程方法2、了解影响电机转速的因素有那些二、实验内容编写程序:使用F5区的键盘控制步进电机的正反转、调节转速,连续转动或转动指定步数;将相应的数据显示在F5区的数码管上。

8086 汇编语言子程序程序设计

8086 汇编语言子程序程序设计

汇编语言程序设计实验报告学院:计算机科学与技术专业:计算机科学与技术班级:计科131MOV AX,4C00HINT 21HMAIN ENDPPROADD PROC NEARPUSH AXPUSH CXPUSH SIPUSH DIMOV SI,[BX]MOV DI,[BX+2]MOV CX,[DI]MOV DI,[BX+4]XOR AX,AXNEXT:ADD AX,[SI]ADD SI,2LOOP NEXTMOV [DI],AXPOP DIPOP SIPOP CXPOP AXRETPROADD ENDPARY DW 1,2,3,4,5,6,7,8,9,10COUNT DW 10SUM DW ?TABLE DW 3 DUP(?)CODE ENDSEND MAIN使用相应的文本编辑器建立文件LAB5.asm,内容如上所示。

二. 生成可执行文件:1.汇编:C:\masm> masm lab5;2.连接:C:\masm> link lab5;三. 请写出此程序中的变量ary,count,sum 的EA,并判断此程序的功能:四. 用debug 调试此程序时,第一条指令的段内EA 是多少?此程序数据段内偏移地址为0 的字单元数据为多少?其对应的机器指令是什么?-L ;加载程序文件lab5.exe-R ;查看IP 与CS 寄存器的内容-D DS:0 ;查看当前数据段内偏移地址为0 的字单元数据-U ;查看机器指令实验二:编写一个子程序,实现在屏幕的指定位置,用指定颜色,显示一个用0 结尾的字符串源程序如下data segmentstr db 'display string',0data endscode segmentassume cs:code,ds:datastart:mov ax,datamov ds,axmov dh,8mov dl,21mov cl,3mov si,offset strcall show_strmov ax,4c00hint 21h;----------------------------show_str proc nearpush axpush cxpush dxpush espush simov es:[bx], cljcxz okmov es:[bx+1], dlinc siadd bx, 2jmp short sok:pop sipop espop dxpop cxpop bxpop axret; 子程序:divdw; 要求:进行不会除法溢出的除法运算,被除数为dword,除数为word,结果为dword ; 参数:(ax) = 被除数dword型的低16位; (dx) = 被除数dword型的高16位; (cx) = 除数; 返回:(dx) = 结果的高16位; (ax) = 结果的低16位; (cx) = 余数divdw:mov bx, ax ; 缓存ax——被除数的低16位mov ax, dx ; ax = H,被除数的高16位mov dx, 0div cx ; ax 为商,dx为余数 = rem(H/N) * 65536push ax ; 结果的商,也就是最后要放在dx中的mov ax, bx ; dx为 rem(H/N) * 65536, 为高16位,ax为低16位,再进行一次除法运算div cx ; ax 为商——最后结果的低16位,dx为余数——为最后结果,应赋给cxmov cx, dxpop dxretcode endsend start实验结果实验一:变量ary,count,sum 的EA分别是00140,00154,00156此程序的功能是数列求和实验二:实验三:实验总结这次实验,感觉难度最大的就是做2个子程序的设计,在网上向好友请教了N回!还犯了一些低级的错误,如将16位的寄存器的内容传送到字符型数字串里去,这很明显是不对的,在逆序时寄存器的高16位会直接把正常的数字字符冲掉,还有就是将当我直接将字型单元的内容传送字型单元时,编译器会报错,不过提示是它后面的指令错误。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
计算机硬件Байду номын сангаас验室实验报告
课程名称:微机原理及应用 姓 名 学 号 班 级 成 绩
设备名称及软件环境 实验名称
Windows XP 操作系统 emu8086 仿真器 实验日期
[0005]子程序及中断实验
一.实验内容 1.实现子程序和中断服务子程序的设计; 2.编写子程序设置40H 中断为自定义中断服务子程序; 3.编写中断服务子程序实现 AX=AX+BX; 4.编写主程序调用子程序和中断。 二.理论分析或算法分析 定义数据段 Data
执行主程序
将 data 放在 dx,并 保存到 ds 中,ax 存 es
取子程序的偏移放 在 ax
调用子程序和中断, 实现:AX=AX+BX
结束
1
三.实现方法(含实现思路、程序流程图、实验电路图和源程序列表等) 代码: data segment a dw 5fh b dw 3fh c dw '?' data ends code segment assume cs:code,ds:data start: mov dx,data mov ds,dx xor ax,ax mov es,ax mov ax,offset change mov word ptr es:[80h],ax mov ax,seg change mov word ptr es:[82h],ax int 20h jmp s change proc near xor ax,ax xor bx,bx mov ax,a mov bx,b add ax,bx mov c,ax iret change endp code ends s: end start
2
四.实验结果分析(含执行结果验证、输出显示信息、图形、调试过程中所遇的问题及处理方法等) 执行前:
执行后:
五.结论 本次实验实现子程序和中断服务子程序的设计,编写子程序设置 40H 中断为自定义中 断服务子程序,编写中断服务子程序实现 AX=AX+BX,编写主程序调用子程序和中断,加深 了对知识的理解。 报告提交日期
3
相关文档
最新文档