微机原理实验(循环程序设计)

合集下载

[说明]td-pitd新一代32位微机原理实验箱、微机接口技术实验系统

[说明]td-pitd新一代32位微机原理实验箱、微机接口技术实验系统

TD-PITD+ 新一代32位微机教学实验系统西安唐都科教仪器公司最新推出“TD-PITD+32位微机教学实验系统”,该系统基于PCI总线扩展卡扩展出80x86系统总线,支持“80x86微机原理及接口技术”、“基于Windows系统的微机原理及接口技术”实验教学和IA-32微机系统应用开发,完全解决了以往各种PCI总线扩展实验设备存在的各种问题,诸如容易死机,不易维护,实验内容少,中断、DMA、存储器扩展等实验开不了或开不全,在Windows 环境中主要实验都不能开展等等。

所以唐都32位微机教学实验系统已成为高校“80x86微机原理及接口技术”和“”微机应用及开发”等课程实验教学的不二选择。

一、支持基于80x86的16/32位微机原理及接口技术教学体系(一)全面支持基于80x86的16/32位微机原理及接口技术的实验教学系统全面支持“基于80x86的16/32位微机原理及接口技术”的实验教学,从而可使各学校由原来的“基于DOS系统的16位微机原理及接口技术”的实验教学顺利提升到“基于80x86的16/32位微机原理及接口技术”实验教学的新层次。

“基于80x86的16/32位微机原理及接口技术”实验教学体系包括:80x86实模式微机原理及接口技术(16位微机原理及其程序设计、32位指令及其程序设计、微机接口技术及其应用)和80x86保护模式微机原理及接口技术(保护模式原理及其程序设计、虚拟存储管理及存储器扩展)。

其中“8259中断控制实验”包括8259单一中断源实验、8259优先级中断实验、8259级联中断实验,“8237DMA传送实验”包括存储器到存储器、存储器到I/O之间的DMA传送实验,“存储器扩展实验”包括8/16/32位静态存储器扩展实验和Flash ROM存储器实验。

(二)Windows环境下的汇编语言和C语言源程序调试软件专为在Windows系统环境下支持80x86微机原理及接口技术的实验教学设计了一套高度可视化的先进集成开发环境,在该环境下可支持80x86汇编或C语言源语言级的编程和调试,支持实验平台上扩展的接口芯片及设备的I/O操作、中断以及DMA方式操作的编程及调试,支持实验平台上存储器的内存扩展的编程操作及调试,完全解决了基于PC微机的Windows环境下,如何通过PCI总线扩展方式,来完整开展80x86微机接口技术的实验教学问题。

西安交通大学微机原理第一次实验报告

西安交通大学微机原理第一次实验报告

微型计算机原理与接口技术第一次实验报告实验者姓名:实验者学号:所在班级:报告完成日期:20年月日实验二分支程序的设计一、实验目的1.学习提示信息的显示及键盘输入字符的方法。

2.掌握分支程序的设计方法。

二、实验内容在提示信息下,从键盘输入原码表示的二位十六进制有符号数。

当此数大于0时,屏幕显示此数为正数;当此数小于0时,屏幕显示此数为负数;当此数等于0时,屏幕显示此数为零。

三、实验调试过程利用-u命令进行反汇编,结果如下。

三个CMP语句运行完的地址如图所示,第一个CMP运行完的是29H输出结果的地址如下图所示:首先对输入为负数时进行验证:输入FFH,设置一个断点在29H,利用-t命令观察跳转,结果如图:可以看到,程序最终正确的转入输出负的分支。

再输入正数11H,利用-t观察整个比较过程如下:可以看到,程序最终正确的转入输出正的分支。

最后输入00H,利用-t观察整个比较过程如下:可以看到,程序最终正确的转入输出0的分支。

四、实验框图及程序代码实验框图:程序代码:CRLF MACROMOV AH,02HMOV DL,0DHINT 21HMOV AH,02HMOV DL,0AHINT 21HENDMDA TA SEGMENT;定义结果信息MESS1 DB 'INPUT DATA:',0DH,0AH,'$'MESS2 DB 'THIS DATA IS+',0DH,0AH,'$'MESS3 DB 'THIS DATA IS-',0DH,0AH,'$'MESS4 DB 'THIS DATA IS ZERO',0DH,0AH,'$'DA TABUF DB 3 ;定义最大可输入字符长度ACTLEN DB ? ;实际输入字符长度STRING DB 3 DUP(?) ;输入字符缓冲区DA TA ENDSSSEG SEGMENT PARA STACK 'STACK'DB 50 DUP(0)SSEG ENDSCODE SEGMENTASSUME CS:CODE,SS:SSEG,DS:DA TASTART:MOV AX,DATAMOV DS,AXMOV AX,SSEGMOV SS,AXMOV DX,OFFSET MESS1MOV AH,09HINT 21HMOV AH,0AHMOV DX,OFFSET DATABUFINT 21HCRLFMOV AL,STRINGCMP AL,38HJAE ISNEGCMP AL,30HJNZ ISPOSMOV AL,[STRING+1]CMP AL,30HJNZ ISPOSJMP ISZEROISPOS:MOV DX,OFFSET MESS2MOV AH,09HINT 21HJMP DONEISNEG:MOV DX,OFFSET MESS3MOV AH,09HINT 21HJMP DONEISZERO:MOV DX,OFFSET MESS4MOV AH,09HINT 21HJMP DONEDONE:MOV AX,4C00HINT 21HCODE ENDSEND START五、实验结果及分析编写的汇编程序EX2.ASM经过汇编MASM与链接LINK生成可执行文件EX2.EXE,测试如下:可见,程序能够正确判断输入数据的正、负、零情况。

微机原理实验三实验报告

微机原理实验三实验报告

实验3. 循环程序设计一、实验目的⒈掌握移位指令的使用方法。

⒉学会循环结构程序的编程方法。

⒊利用DEBUG调试程序查看循环程序循环过程中CS和IP的变化情况。

二、实验要求⒈编写程序并上机调试,记录运行结果。

⒉用DEBUG调试程序调试所编程序,查看并记录每条指令内存单元地址及执行结果(包括F标志寄存各位值。

)⒊注意观察并记录每条指令执行后CS和IP寄存器值变化情况,以加深对循环程序的概念的理解。

三、实验内容⒉编写统计15个学生数学学习成绩程序。

要求:分别统计出低于60分,60-69分,70-79分,80-89分,90-100分的人数,并存放到S5,S6,S7,S8,S9,S10对应内存单元中。

源程序代码;DATA SEGMENTDATA1 DB 55,60,65,88,67,70,75,80,77,85,90,66,95,53,100DATA2 DB 5 DUP(?)DATA ENDS;CODE SEGMENTASSUME CS:CODE,DS:DATASTART:MOV AX,DATAMOV DS,AXMOV CX,15LEA SI,DATA1LEA DI,DATA2AGAIN:MOV AL,[SI]CMP AL,90JB NEXT1INC BYTE PTR[DI]JMP NEXT0NEXT1:CMP AL,80JB NEXT2INC BYTE PTR[DI+1]JMP NEXT0NEXT2:CMP AL,70JB NEXT3INC BYTE PTR[DI+2]JMP NEXT0NEXT3:CMP AL,60JB NEXT4INC BYTE PTR[DI+3]JMP NEXT0NEXT4:INC BYTE PTR[DI+4]NEXT0:INC SILOOP AGAINMOV AH,4CHINT 21HCODE ENDSEND START程序运行结果截图:四、实验总结本次实验掌握移位指令的使用方法。

微机原理实验

微机原理实验

微机原理实验实验⼀ MASM For Windows 的使⽤及顺序程序设计⼀、实验⽬的1、熟悉在PC机上建⽴、汇编、连接、调试和运⾏8086汇编语⾔程序的过程。

2、熟悉masm for windows调试环境及DEBUG常⽤命令的使⽤⼆、实验内容1.DEBUG常⽤命令(U、R、D、E、F、T、G、Q)的操作使⽤2.编程实现两个16位⽆符号数的加、减、乘、除运算。

有两个两字节⽆符号数分别放在存储单元A、B起始的缓冲器中,求其和,结果放在A起始的缓冲区并在屏幕上显⽰。

相加若有进位不存⼊存储单元。

三、实验设备PC机⼀台四、实验准备1) 分析题⽬,将程序中的原始数据和最终结果的存取⽅法确定好。

2) 画出流程图。

3) 写出源程序。

4) 对程序中的结果进⾏分析,并准备好上机调试与⽤汇编程序及汇编调试的过程。

五、实验步骤1) 输⼊源程序。

2) 汇编、连接程序,⽣成 .EXE⽂件,执⾏⽂件,检查结果。

六、学⽣实验报告的要求1) 列出源程序,说明程序的基本结构,包括程序中各部分的功能。

2) 说明程序中各部分所⽤的算法。

3) 说明主要符号和所⽤到寄存器的功能。

4) 上机调试过程中遇到的问题是如何解决的。

5) 对调试源程序的结果进⾏分析。

4) 说明标志位CF、SF和OF的意义。

DEBUG的常⽤命令1、R 显⽰或修改寄存器的内容命令格式:-R2、 D 显⽰存储单元的内容命令格式:-D[地址1, 地址2]3、E修改存储单元的内容命令格式:-E[地址1, 地址2]命令格式:-U[地址1, 地址2]5、T单步执⾏命令格式:-T6、G连续执⾏命令格式:-G[=起始地址, 结束地址]A⼩汇编命令格式:-A7、Q退出DEBUG,返回DOS实验⼀源程序 EXAM1-2 .ASMDATA SEGMENTA DB 34H,18H,2 DUP(0),’$’B DB 56H,83HDATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AXMOV AL,AMOV BL,BADD AL,BLMOV AH,A+1MOV BH, B+1ADC AH, BHMOV A, ALMOV A+1, AHMOV CX, 0004HMOV DI, OFFSET AMOV DX, [ DI]ADD DI,03NEXT: MOV AX, DXAND AX,000FHCMP AL,0AHJB QQQADD AL, 07HMOV [DI], ALDEC DIPUSH CXMOV CL, 04SHR DX, CLPOP CXLOOP NEXTMOV DX, OFFSET AMOV AH, 09HINT 21HMOV AH,4CHINT 21HCODE ENDSEND START执⾏程序EXAM1-2·EXE,屏幕上显⽰结果:9B8A实验⼆分⽀、循环程序设计⼀、实验⽬的1) 掌握分⽀、循环程序的结构。

微机原理与汇编语言实验循环程序设计实验

微机原理与汇编语言实验循环程序设计实验

微机原理与汇编语言实验报告姓名x x x学号xxxxxx 专业班级计科x班课程名称微机原理与汇编语言实验日期2014.10.22实验名称循环程序设计实验成绩一、实验目的1、掌握循环程序的设计方法。

2、掌握比较指令、转移指令和循环指令的使用方法。

3、进一步掌握调试工具的使用方法。

二、实验内容1、实验原理(1)键盘输入的十进制数如368在计算机中是以33H,36H,38H形式存放的,如何将它们转换为一个二进制数101110000B,以便对累加循环的循环次数进行控制是本程序首先要解决的问题(2)累加结果为一个16位的二进制数,为了显示结果,必需把它们转换为十进制数2、实验步骤(1)流程图(2)实验源码.model small.stack ;定义堆栈段.data ;定义数据段inf1 db "Please input a number(1-627):$"inf2 db 0ah, 0dh, "1+2+......+$"ibuf db 7, 0, 6 dup(0)obuf db 6 dup(0).codestart: mov ax, @datamov ds, axmov dx, offset inf1;将屏幕输入的十进制数(存放于ibuf)转化为二进制数存储于ax 中mov ah, 09hint 21hmov dx, offset ibufmov ah, 0Ahint 21hmov cl, ibuf+1mov ch, 0mov si, offset ibuf+2mov ax, 0loop1: mov dx, 10mul dxand byte ptr [si], 0Fhadd al, [si] 从键盘输入一个十进制数,并将其转换为二进制数,存放在AX中开始结束素、、(CX)-1=0累加循环次数送CX(MOV CX,AX)AX清0(AX中存放累加和)BX送1(BX存放每次循环累加的数,每循环一次,BX值加1)ADD AX,BXINC BX累加和(在AX中)转换为十进制数并显示YNadc ah, 0inc siloop loop1mov cx, ax ;计算1+2+3+...+nmov ax, 0mov bx, 1loop2: add ax, bxinc bxloop loop2mov di, offset obuf+6 ;将ax中的二进制数转换为十进制数并以ascii的形式存于obufmov byte ptr [di], '$'mov bx, 10loop3: mov dx, 0div bxadd dl, 30hdec dimov [di], dlor ax, axjnz loop3dec dimov [di], '='mov dx, offset inf2 ;结果输出mov ah, 09hint 21hmov cl, ibuf+1 ;显示nmov ch, 0mov si, offset ibuf+2loop4: mov dl, [si]add dl, 30hinc simov ah, 02hint 21hloop loop4mov dx, dimov ah, 09hint 21hmov ax, 4c00hint 21hend start实验习题1源码:; multi-segment executable file template..model small ;定义程序的存储模式(small表示小型模式).stack ;定义堆栈段.data ;定义数据段inf1 db 0ah, 0dh, "1+2+......+$"obuf1 db 6 dup(0)obuf2 db 7 dup(0) ;除了六位数字外还要有一个=号.codestart: mov ax, @datamov ds, axmov dx, offset inf1 ;输出 1+2+......+mov ah, 09hint 21hmov ax, 0 ;计算1+2+3+...+nmov bx, 1loop1: add ax, bxinc bxcmp ax, 60000jbe loop1push ax ;将最终结果备份入栈push bx ;将n备份pop cxmov di, offset obuf1+5;将cx二进制数转换为十进制数并以ascii的形式存于obuf1mov byte ptr [di], '$'mov ax, cxmov bx, 10loop2: mov dx, 0div bxadd dl, 30hdec dimov [di], dlor ax, axjnz loop2mov dx, di ;输出nmov ah, 09hint 21hpop axmov di, offset obuf2+6;将ax中的二进制数转换为十进制数并以ascii的形式存于obuf2mov byte ptr [di], '$'mov bx, 10loop3: mov dx, 0div bxadd dl, 30hdec dimov [di], dlor ax, axjnz loop3dec dimov [di], '='mov dx, di ;=输出结果mov ah, 09hint 21hmov ax, 4c00hint 21hend start实验习题2源码:; multi-segment executable file template..model small ;定义程序的存储模式(small表示小型模式).stack ;定义堆栈段.data ;定义数据段inf1 db 'Please input six num:', 0ah, 0dh, '$'inf2 db 'sum:$'obuf0 db 0ah, 0dh, '$'ibuf db 5, 0, 4 dup(0)obuf db 6 dup(0).codestart: mov ax, @datamov ds, axmov dx, offset inf1 ;输出提示信息mov ah, 09hint 21hmov bx, 6 ;设置外层循环次数loop1: mov dx, offset ibufmov ah, 0Ahint 21hmov cl, ibuf+1 ;设置内层循环次数mov ch, 0mov si, offset ibuf+2mov ax, 0loop2: mov dx, 10 ;将屏幕输入的十进制数(存放于ibuf)转化为二进制数存储于ax中 mul dxand byte ptr[si], 0Fhadd al, [si]adc ah, 0inc siloop loop2push ax ;将结果入栈保存mov dx, offset obuf0 ;回车换行mov ah, 09hint 21hdec bxcmp bx, 0jnz loop1mov cx, 6mov ax, 0loop3: pop bxadd ax, bxloop loop3mov di, offset obuf+5;将ax中的二进制数转换为十进制数并以ascii的形式存于obuf mov byte ptr [di], '$'mov bx, 10loop4: mov dx, 0div bxadd dl, 30hdec dimov [di], dlor ax, axjnz loop4mov dx, offset inf2 ;输出提示信息mov ah, 09hint 21hmov dx, dimov ah, 09hint 21hmov ax, 4c00hint 21hend start实验习题3源码:; multi-segment executable file template..model small ;定义程序的存储模式(small表示小型模式) .stack ;定义堆栈段.data ;定义数据段inf db "Please input a num(0-65535):$"inf2 db 0ah, 0dh, "The num of 1:$"ibuf db 6, 0, 5 dup(0)obuf db 6 dup(0).codestart: mov ax, @datamov ds, axmov es, axmov ah, 09h ;输出提示信息Please input a num:mov dx, offset infint 21hmov ah, 0Ah ;接收一个无符号十进制整数(小于65536)mov dx, offset ibufint 21hmov ax, 0mov cl, ibuf+1;将屏幕输入的十进制数(存放于ibuf)转化为二进制数存储于ax中mov ch, 0mov si, offset ibuf+2loop1: mov dx, 10mul dxand byte ptr[si], 0Fhadd al, [si]adc ah, 0inc siloop loop1mov bx, 0loop2: shr ax, 1adc bx, 0cmp ax, 0jnz loop2mov ax, bxmov di, offset obuf+5;将ax中的二进制数转换为十进制数并以ascii的形式存于obufmov byte ptr [di], '$'mov bx, 10loop3: mov dx, 0div bxadd dl, 30hdec dimov [di], dlor ax, axjnz loop3mov ah, 09h ;输出提示信息The num of 1:mov dx, offset inf2int 21hmov ah, 09h ;将统计结果在屏幕上显示出来mov dx, diint 21hmov ax, 4c00hint 21hend start实验习题4源码:; multi-segment executable file template..model small ;定义程序的存储模式(small表示小型模式).stack ;定义堆栈段.data ;定义数据段N equ 5ibuf db 4, 0, 3 dup(0)inf1 db 'Please input N num(0-255):', 0ah, 0dh, '$'inf2 db 'Sort:', 0ah, 0dh, '$'buf db N dup(0)obuf2 db 4 dup(0)obuf db 0ah, 0dh, '$'.codestart: mov ax, @datamov ds, axmov dx, offset inf1 ;输出提示信息mov ah, 09hint 21hmov di, offset bufmov bx, N ;设置外层循环次数loop1: mov dx, offset ibufmov ah, 0Ahint 21hmov cl, ibuf+1 ;设置内层循环次数mov ch, 0mov si, offset ibuf+2mov ax, 0loop2: mov dx, 10 ;将屏幕输入的十进制数(存放于ibuf)转化为二进制数存储于ax中 mul dxand byte ptr[si], 0Fhadd al, [si]inc siloop loop2mov [di], alinc dimov dx, offset obuf ;回车换行mov ah, 09hint 21hdec bxcmp bx, 0jnz loop1mov bx, N-1 ;比较大小mov cx, bxmov dx, bxmov di, offset bufloop3: mov si, dimov al, [di]inc siloop4: cmp [si], aljbe loop5mov al, [si]mov ah, [di]mov [si], ahmov [di], alloop5: inc siloop loop4dec dxmov cx, dxinc didec bxcmp bx, 0jne loop3mov dx, offset inf2 ;输出提示信息mov ah, 09hint 21h;结果输出mov cx, Nmov si, offset bufloop6: mov di, offset obuf2+3;将buf中的二进制数转换为十进制数并以ascii的形式存于obuf2,并输出 mov byte ptr [di], '$'mov bx, 10mov al, [si]mov ah, 0loop7: mov dx, 0div bxadd dl, 30hdec dimov [di], dlor ax, axjnz loop7mov dx, dimov ah, 09hint 21hmov dx, offset obufmov ah, 09hint 21hinc siloop loop6mov ax, 4c00hint 21hend start3、实验结果(1)实验结果(2)实验习题1程序流程图:(3)实验习题2(4)实验习题3(5)实验习题4三、实验总结1)通过本次实验我掌握循环程序的设计方法,掌握比较指令、转移指令和循环指令的使用方法,进一步掌握了调试工具的使用方法。

实验报告

实验报告

南通大学计算机科学与技术学院微机原理实验报告书班级:智控151学号:***********名:***南通大学计算机类课程实验报告南通大学计算机科学与技术学院微机原理实验报告书班级:智控151学号:1512042022姓名:王建棋南通大学计算机类课程实验报告六、实验结果<一><二>七、实验存在问题和解决办法程序一:检查发现第16行的“ADD AL,20H”将数字0写成了大写字母O,排除错误后可正常运行。

字符串后忘了加$,导致转换为小写字母后出现如下乱码:字符串后加结束符$后乱码消除。

程序二:分析表明第28行“CMP BL,0FFH”中FFH前要加0八、实验心得和建议南通大学计算机科学与技术学院微机原理实验报告书班级:智控151学号:1512042022姓名:王建棋南通大学计算机类课程实验报告ADD AL,30HMOV DL,ALMOV AH,2INT 21HMOV AX,4C00HINT 21HCODE ENDSEND START(如不够,请另附纸)六、实验结果七、实验存在问题和解决办法分析表明错误原因如下:(1)O写成0;(2)相对寻址只限于用SI、DI、BX、BP,而程序中却用了其它寄存器。

修改后仍有错误如下:错误原因:使用“INC BYTE PTR[BX+2]”忘了加BYTE PTR修改后仍得不到正确结果,错误如下:错误原因:“CMP [DI],'0'”应改成“CMP BYTE PTR[DI],'0'”错误全部修改后得到所要的结果八、实验心得和建议南通大学计算机科学与技术学院微机原理实验报告书班级:智控151学号:1512042022姓名:王建棋南通大学计算机类课程实验报告MOV AX,4C00HINT 21HCODE ENDSEND START(如不够,请另附纸)六、实验结果七、实验存在问题和解决办法出错原因:(1)DEC,DW 是保留字;(2)“MOV CL,10000”中10000超过范围CL的最大范围。

微机原理实验(循环程序设计)

微机原理实验(循环程序设计)
3.学会了调试循环程序的方法。




教师签字年月日
备注:1.文件名命名方式为:学号+姓名+实验序号.DOC
2.将文件按附件形式添加后提交
DATA SEGMENT
DB 06H,12H,88H,82H,90H,22H,33H
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,SS:STACK,DS:DATA
START:MOV AX,DATA
MOV DS,AX
MOV DI,0000H
MOV CL,[DI]
XOR CH,CH
MOV BL,CH
INC DI
A0: MOV AL,[DI]
TEST AL,80H
JE A2
INC BL
A2: INC DI
LOOPA0
MOV [DI],BL
MOV AX,4C00H
INT 21H
CODE ENDS
END START




(1)用编辑软件如:EDIT,输入源程序,并保存,后缀名为.ASM。
-U ;先用反汇编来查看源程序装入的地址和数据段的地址

-G=xxxx:xxxx;从程序装入的地址处,开始运行程序
(5)查看实验结果。
(6)也可使用EMU8086软件进行调试








1.通过实验掌握了宏汇编命令的基本格式及对循环结构的理解。
2.熟悉并掌握了循环结构程序设计的方法。
2.求某数据区内负数的个数。
设数据区的第一个单元存放数据的个数,从第二个单元开始存放数据,在最后一个单元存放结果。

微机原理与接口技术实验

微机原理与接口技术实验

CALL ADDA DISX 3DH MOV SI,OFFSET DATA3 MOV BX,05 CALL DISPL DISX 0DH DISX 0AH MOV AH,4CH INT 21H
DISPL DS1:
DISPL
PROC NEAR DISX [SI+BX-1] DEC BX JNZ DS1 RET ENDP
5.在屏幕上显示结果可利用INT 21H的02号子功能,因该功能一次只 能显示一个字符,故对于显示数字串来说,要编写一段显示子程序,反 复使用02H号子功能。
6.加数与被加数为5位,而和可能为5位或6位,即考虑到带进位和不 带进位的情况。在显示和数时最好按DISUP1: MOV AL,BH MOV CL,04 SHR AL,CL CMP AL,09 JA DISUP4 ADD AL,30H
实验二 两个多位十进制数相加的程序
CODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACK,ES:DATA START: MOV AX,DATA
MOV DS,AX MOV AX,STACK MOV SS,AX MOV AX,TOP MOV SP,AX MOV DX,OFFSET MESS MOV AH,09H INT 21H MOV SI,OFFSET DATA1 MOV BX,05 CALL DISPL DISX 2BH MOV SI,OFFSET DATA2 MOV BX,05 CALL DISPL MOV SI,OFFSET DATA1 MOV DI,OFFSET DATA2
实验一 求最大值程序
NEXT: MAX2:
LOOP MAX1 MOV BL,AL MOV CL,04 SHR AL,CL CMP AL,09 JA MAX4 ADD AL,30H DISX AL MOV AL,BL AND AL,0FH CMP AL,09 JA MAX5 ADD AL,30H

微机原理实验指导书

微机原理实验指导书

实验一数据传送实验目的:1.熟悉8086指令系统的数据传送指令及8086的寻址方式。

2.利用TurboDebugger调试工具来调试汇编语言程序。

实验任务:1.通过下述程序段的输入和执行来熟悉TurboDebugger的使用,并通过显示器屏幕观察程序的执行情况。

练习程序段如下:MOVBL,08HMOVCL,BLMOVAX,03FFHMOVBX,AXMOVDS:[0020H],BX2.用以下程序段将一组数据压入(PUSH)堆栈区,然后通过不同的出栈顺序出栈,观察出栈后数据的变化情况。

压栈程序段如下:MOVAX,0102HMOVBX,0304HMOVCX,0506HMOVDX,0708HPUSHAXPUSHBXPUSHCXPUSHDX出栈程序段请自行编写(用不同的出栈顺序)。

3.指出下列指令的错误并加以改正,上机验证之。

(1)MOV[BX],[SI](2)MOVAH,BX(3)MOVAX,[SI][DI](4)MOVBYTEPTR[BX],2000H(5)MOVCS,AX(6)MOVDS,2000H4.设置各寄存器及存储单元的内容如下:(BX)=0010H,(SI)=0001H(10010H)=12H,(10011H)=34H,(10012H)=56H,(10013H)=78H(10120H)=0ABH,(10121H)=0CDH,(10122H)=0EFH说明下列各条指令执行完后AX寄存器中的内容,并上机验证。

(1)MOVAX,1200H(2)MOVAX,BX(3)MOVAX,[0120H](4)MOVAX,[BX](5)MOVAX,0110H[BX](6)MOVAX,[BX][SI](7)MOVAX,0110H[BX][SI]5.将DS:1000H字节存储单元中的内容送到DS:2020H单元中存放。

试分别用8086的直接寻址、寄存器间接寻址、变址寻址、寄存器相对寻址传送指令编写程序段,并上机验证结果。

微机原理实验程序 中国石油大学(华东)

微机原理实验程序 中国石油大学(华东)

实验3 循环程序设计实验内容:1.数组X,Y,Z,。

X=32,-43,76,95,-1;Y=-78,127,-128,-125,88。

计算两数之和,送入数组S。

DATA SEGMENTX DB 32,-43,76,95,-1Y DB -78,127,-128,-125,88S DB 5 DUP(0)DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART:MOV AX ,DATAMOV DS,AXMOV CX,5MOV SI,0FOR:MOV AL,X[SI]ADD AL,Y[SI]MOV S[SI],ALINC SILOOP FORCODE ENDSEND START2.两个多位十进制数,X=1357902468,Y=5790123467。

计算两数之和(BCD码)。

DATA SEGMENTX DB 68H,24H,90H,57H,13HY DB 67H,34H,12H,90H,57HS DB 5 DUP(0)DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART:MOV AX ,DATAMOV DS,AXMOV CX,5MOV SI,0CLCFOR:MOV AL,X[SI]ADD AL,Y[SI]DAAMOV S[SI],ALINC SILOOP FORCODE ENDSEND START实验4 子程序调用变成设计实验内容:用子程序调用方法,现有数组X=32,-43,76,95,-1,-78,127,-128,-125,88 编程按递增顺序排序输出。

DATA SEGMENTX DB 32,-43,76,95,-1,-78,127,-128,-125,88ENDS SEGMENTCODE SEGMENTASSUME CS:CODE,DS:DATASTART:MOV AX ,DATAMOV DS,AXCALL SUB1MOV AH,4CHINT 21HSUB1 PROC NEARMOV CX,9LP1:MOV BX,0MOV DX,CXLP2;MOV AL,X[BX]CMP AL,X[BX+1]JLE NEXTXCHG AL,X[BX+1]NEXT:INC BXDEC DXJNE LP2LOOP LP1RETSUB1 ENDPCODE ENDSEND START实验5 DOS功能调用实验内容:1.从键盘连续输入五个单个字符,然后再反向输出这5个字符。

微机原理实验

微机原理实验

实验一、DEBUG 调试软件的使用一、实验目的1.熟练掌握DEBUG的常用命令,学会用DEBUG调试程序。

2.了解数据在存储器中的存取方法以及堆栈中数据的压入与弹出。

3.掌握各种寻址方式以及简单指令的执行过程。

4.掌握变量和标号的处理,数值的默认进位制。

二、实验内容1.设堆栈指针SP=2000H,AX=3000H,BX=5000H;利用堆栈实现将AX,BX的内容交换。

用DEBUG 进行汇编和调试。

1.1 DEBUG的主要命令DEBUG是为汇编语言设计的一种调试工具,它通过单步、设置断点等方式为汇编语言程序员提供了非常有效的调试手段。

一.进入DEBUG状态二.DEBUG的命令1.汇编命令A该命令允许键入汇编语言语句,并能把它们汇编成机器代码,相继地存放在从指定地址开始的存储区中。

注意:汇编程序默认的数据是十进制,而DEBUG默认的数据是16进制,即DEBUG中没有二进制、八进制及十进制,只有16进制。

汇编命令格式为:-A? [段地址]:[偏移地址] 说明:[ ]表示可选项,若未指定地址,则默认地址为CS:0100H。

例:用汇编语言编写一个简单的加法程序。

输入的汇编指令有语法错误的,将提示“error”,再重新输入正确指令即可。

若程序输入完毕,发现某条指令输入错误,比如第三条语句输入有误,就从该指令的偏移地址开始汇编(即-A 106)。

如果新输入的指令所占用的内存空间跟旧指令一样,修改完回车退出汇编即可;如果新输入的指令所占用的内存空间比旧指令少,可在多余的内存空间输入“NOP(空操作,占一字节)”指令;如果新输入的指令所占用的内存空间比旧指令多,就必须将后面的所有指令重新输入。

思考:汇编程序时,偏移地址为何不是连续的,它是如何变化的?(参考第6小点)2.命名命令N读(L)/写(W)程序前,必须先命名,即该命令结合读(L)/写(W)命令使用。

(参阅4、5)例:-N EX1;给程序文件命名为EX1。

3.检查和修改寄存器命令R4.写盘命令WW命令没有任何参数时,与命令N配合使用进行写操作,使用W命令前在BX:CX中应写入文件的字节数。

微机接口机原理实验报告

微机接口机原理实验报告

微机原理及接口技术——实验报告学号: xxxxxx姓名: xxxxx专业: 网络工程实验一: 系统认知1.1实验目的掌握 TD 系列微机原理及接口技术教学实验系统的操作, 熟悉Wmd86 联机集成开发调试软件的操作环境。

通过顺序程序设计与分支程序设计来进行举例。

1.2实验设备PC 机一台, TD-PITE 实验装置一套。

1.3实验内容内存从BUFF开始的单元中存放着两个字数据X、Y, 完成X+Y, 并将相加的和(假设仍为一个字数据)存放于内存从RESULT开始的存储单元中。

DATA SEGMENTBUFF DW X,YRESULT DW ?DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART: MOV AX,DATAMOV DS,AXMOV AX,BUFFADD AX,BUFF+2MOV RESULT,AXMOV AH,4CHINT 21HCODE ENDSEND START加载程序后调试, R寄存器;U反汇编;D显示数据;E修改数据。

1.4实验截图实验二分支程序设计2.1实验目的1.掌握分支程序的结构.2.掌握分支程序的设计、调试方法.2.2实验设备PC 机一台, TD-PITE 实验装臵一套。

2.3实验内容1, X>0求函数Y= 0, X=0-1, X<0程序如下:DATA SEGMENTVAR1 DB XVAR2 DB ?DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA START:MOV AX,DATAMOV DS,AXMOV AL, VAR1CMP AL, 0JGE BIGMOV VAR2,0FFHJMP DONEBIG:JE EQULMOV VAR2,1JMP DONEEQUL:MOV VAR2, 0DONE:MOV AH, 4CHINT 21HCODE ENDSEND START实验三循环程序设计3.1实验目的1)加深对循环结构的理解。

微机原理实验指导书

微机原理实验指导书

《微机原理与接口技术》实验指导书试验地点: 图书馆三楼西南机房实验一初级程序的编写与调试实验一、实验内容1.设堆栈指针SP=2000H,AX=3000H,BX=5000H请编一程序段将AX的内容和BX的内容进行交换。

请用堆栈作为两寄存器交换内容的中间存储单元,用DEBUG调试程序进行汇编与调试。

2.设AX=0002H,编一个程序段将AX的内容乘10,要求用移位的方法完成。

3.设DS=当前段地址,BX=0300H,SI=0002H,请用DEBUG的命令将存储器偏移地址300H~304H连续单元顺序装入0AH、0BH、0CH、0DH、0EH。

在DEBUG状态下送入下面程序,并用单步执行的方法,分析每条指令源地址的形成过程?当数据传送完毕时,AX中的内容是什么?程序清单如下:(P120)MOV AX, BXMOV AX, 0304HMOV AX, [0304H]MOV AX, [BX]MOV AX, 0001[BX]MOV AX, [BX][SI]MOV AX, 0001[BX][SI]HLT二、实验目的和要求实验目的1.掌握DUBUG的常用命令,学会用DEBUG调试程序。

2.深入了解数据在存储器中的存储方法,及堆栈中数据的压入与弹出。

3.熟练掌握各种寻址方法以及简单指令的执行过程。

实验要求1.实验前要作好充分准备,包括汇编程序清单、调试步骤、调试方法,对程序结果的分析等。

2.本实验要求在PC机上进行。

3.本实验只要求在DEBUG调试程序状态下进行,包括汇编程序,调试程序,执行程序。

三、预习要求熟悉并掌握DEBUG的常用命令的格式和功能,其中主要包括(1)汇编命令A(2)显示内存命令D(3)修改存储单元内容命令E(4)反汇编命令U(5)命名命令N(6)读盘命令L(7)写盘命令W(8)运行命令G(9)检查和修改寄存器内容命令R(10)追踪与显示命令T(11)结束DEBUG返回DOS命令Q四、实验设备(软、硬件)1、IBM PC和(PC/XT、AT、286、386、486)2、BH-86/51 通用微机实验培养装置五、仪器使用说明PC-86系列微机调试程序——DEBUG1. DEBUG的主要功能(1)调试程序DEBUG是专为小汇编和宏汇编语言设计的一种调试工具。

微机原理实验指导书 (1)

微机原理实验指导书 (1)

实验一系统操作及程序调试举例1.实验目的学习并掌握实验系统的基本操作,为以后的实验打下基础。

2.实验设备DICE-8086B实验系统一台3.实验准备工作系统一经连好,检查无误后,就可以通电运行。

系统提供两种启动方式,即:系统自动完成后,显示器上会显示“>”提示符,等待键入操作命令。

4.实验内容及步骤(1)系统操作练习(一)要求:从3500内存单元开始建立0~15共16个数据。

程序流程图如下:实验步骤①输入与修改:在“﹥”提示符下键入A2000,此时显示器上将会显示程序的段地址CS和偏移地址IP(=2000H),接着就可以在光标处输入程序。

注:在输入过程中,若发现本行有错误,则可以按“ ”键删除并重新输入;若回车后系统提示“ERROR!”,则要在原地址指针处重新正确输入。

输入程序后可通过反汇编查看程序。

(U操作)②程序运行:在DICE-8086B实验系统上,程序的运行方式有单步、连续和断点运行几种方式。

可参考(T操作,G操作,GB操作等)③内存单元的修改与显示:用(D操作)可显示内存单元的内容,用(E操作)可修改内存单元的内容。

(分别参考前)。

④运行程序观察从3500H单元开始连续存放的16个数据为多少?任意修改AX的值,再运行程序,显示运行结果是否正确?流程图及参考程序如下:地址机器码助记符注释2000 BF 3500 MOV DI,3500 ;设数据区首址2003 B9 0010 MOV CX,0010 ;字节数送CX2006 B8 0000 MOV AX,00002009 9E SAHF200A 88 05 MOV B[DI],AL ;写入一字节200C 47 INC DI ;修改地址指针200D 40 INC AX ;修改数据200E 27 DAA ;十进制调整200F E2 F9 LOOP 200A ;未填完转移2011 CD 00 INT(2)系统操作练习(二)要求:将内存3500单元开始的0~15共16个数传递到3600单元开始的数据区中。

微机原理与汇编语言程序设计实验一

微机原理与汇编语言程序设计实验一

实验一汇编语言上机环境及基本操作一、实验目的及要求1.学习及掌握汇编语言源程序的书写格式和要求,明确程序中各段的功能和相互之间的关系。

2.学会使用EDIT、MASM、LINK、DEBUG等软件工具。

3.熟练掌握在计算机上建立、汇编、连接、调试及运行程序的方法。

二、实验内容1.汇编语言源程序的建立本例中给出的程序是要求从内存中存放的10个无符号字节整数数组中找出最小数,将其值保存在AL寄存器中。

设定源程序的文件名为ABC。

DATA SEGMENTBUF DB 23H,16H,08H,20H,64H,8AH,91H,35H,2BH,7FHCN EQU $-BUFDATA ENDSSTACK SEGMENT STACK ’STACK’STA DB 10 DUP(?)TOP EQU $-STASTACK ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACKSTART: PUSH DSXOR AX,AXPUSH AXMOV AX,DATAMOV DS,AXMOV BX,OFFSET BUFMOV CX,CNDEC CXMOV AL,[BX]INC BXLP: CMP AL,[BX]JBE NEXTMOV AL,[BX]NEXT: INC BXDEC CXJNZ LPMOV AH,4CHINT 21HCODE ENDSEND START键入以下命令:C:\>EDIT ABC.ASM此时屏幕的显示状态如图1所示。

图1 用EDIT编辑ABC.AS M程序窗口程序输入完毕后一定要将源程序文件存入盘中,以便进行汇编及连接,也可以再次调出源程序进行修改。

2.将源程序文件汇编成目标程序文件一般情况下,MASM汇编程序的主要功能有以下3点:(1)检查源程序中存在的语法错误,并给出错误信息。

(2)源程序经汇编后没有错误,则产生目标程序文件,扩展名为.OBJ。

(3)若程序中使用了宏指令,则汇编程序将展开宏指令。

西安交大微机原理实验三循环程序的设计

西安交大微机原理实验三循环程序的设计

实验三循环程序的设计一、实验目的1.掌握提示信息的使用方法和从键盘键入信息的用法2.掌握循环程序的设计方法二、实验内容编写程序,从键盘分别键入两个字符串,进行比较,若相同,则显示“MATC”H,否则,显示“NOMATC”H 。

三、实验原理强迫cpu 重复执行一指令序列的程序结构是循环程序。

循环程序结构分四部分:1、初始化部分2、循环处理部分3、循环控制部分4、结束部分。

四、程序代码CRLF MACROMOV AH,02HMOV DL,0DHINT 21HMOV AH,02HMOV DL,0AHINT 21HENDMDATA SEGMENTMESS1 DB'INPUT STRING1:',0DH,0AH,'$'MESS2 DB'INPUT STRING2:',0DH,0AH,'$'MESS3 DB'NO MATCH',0DH,0AH,'$'MESS4 DB'MATCH',0DH,0AH,'$'MAXLEN1 DB 81 ACTLEN1 DB ?STRING1 DB 81 DUP(?)MAXLEN2 DB 81ACTLEN2 DB ?STRING2 DB 81 DUP(?)DATA ENDSSTACK SEGMENT PARA STACK 'STACK'STA DB 50 DUP(?)TOP EQU LENGTH STASTACK ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACKSTART:MOV AX,DATAMOV DS,AXMOV AX,STACKMOV SS,AXMOV SP,TOPMOV DX,OFFSET MESS1 MOV AH,09HINT 21HMOV AH,0AHMOV DX,OFFSET MAXLEN1 INT 21HCRLFMOV DX,OFFSET MESS2 MOV AH,09HINT 21HMOV AH,0AHMOV DX,OFFSET MAXLEN2 INT 21HCRLFMOV SI,OFFSET ACTLEN1 MOV BX,OFFSET ACTLEN2 MOV AL,[SI]CMP AL,[BX]JNE NOMA NOMATCH: MOV CX,[SI] AND CX,0FHNEXT:INC SIINC BXMOV AL,[SI]CMP AL,[BX]JNE NOMADEC CXCMP CX,0JNE NEXTMOV AH,09HMOV DX,OFFSET MESS4 INT 21HJMP DENDNOMA:MOV AH,09HMOV DX,OFFSET MESS3 INT 21HDEND:MOV AX,4C00HINT 21HEND START五、头验调试过程 1•调试字符串输入功能在edit 中输入代码,编译、链接后,用debug 的-u 命令反汇编生成的可执行文件 shiyan3.exa 首先调试字符串输入是否正确,设置断点如下所示:110778:0000 B06AG? MOU AX P G?6A U778:00G8 BED8 MOU DS, AX 077G :0GQ5 8EC0 ruu ES.AXGT?78:0OGV B88O07 MOU AX P 6?B00778: 0O0A BED0 rou SS,AX 0778:0OGC BC3Z0O MOU SF,G0QZ 0778:0OGF BAO0GG MOU DX.0000 Qf?78:001Z B409 MQU AH.09 0778:0614 CDZ1 IHT Z1 0778:0016 B4GA MOU AH (0A O7?a :O0ia BA35O0 MOU DX R6035 0778:001® CDZ1 IHT 21 O77O :0O1D B402 MOU AH 题 Q7?0: Q01T B20D MOU DLpOD -g43INPUT STHING1: xjtuINPUT 31H1INGZ : bjtuAX=0£GA BX=0OGG CX=0158 DX=O0GA SF=003ZBF=0O0G SI=0000 DI=0000DS=076A ES=G76A SS=O70e CS=Q776 IF=0GH3MU UP El PL HZ NA FO NC阴76:0643 EE3606MOUSI ,0036用-d 命令查看如下以上说明字符串输入部分工作正常。

微机循环程序设计实验报告

微机循环程序设计实验报告

微机循环程序设计实验报告微机循环程序设计实验报告引言在当今数字化时代,计算机技术的发展已经成为各个领域的核心。

作为计算机科学的基础,循环程序设计在软件开发中扮演着重要的角色。

本实验旨在通过微机循环程序设计,探索程序的优化和性能提升。

实验目的1. 了解循环程序设计的基本概念和原理。

2. 熟悉微机循环程序设计的编写方法和技巧。

3. 掌握循环程序的性能优化和调试方法。

4. 分析循环程序设计在实际应用中的价值和局限性。

实验过程1. 实验环境搭建在开始实验前,我们需要搭建一个合适的实验环境。

选择一款适合的集成开发环境(IDE),并安装相应的编译器。

在本实验中,我们选择了Visual Studio作为开发环境,C语言作为编程语言。

2. 编写简单的循环程序在掌握基本的编程语法后,我们开始编写简单的循环程序。

通过使用for循环,我们可以实现对某个任务的重复执行。

这样的程序通常用于处理大量数据或者进行复杂的计算。

通过编写简单的循环程序,我们可以更好地理解循环程序设计的基本原理。

3. 优化循环程序性能在编写循环程序的过程中,我们需要考虑程序的性能。

通过合理地选择循环结构和优化算法,我们可以提高程序的执行效率。

例如,我们可以使用并行化技术来加速程序的运行,或者使用循环展开来减少循环的次数。

通过不断地优化,我们可以使程序更加高效。

4. 调试循环程序循环程序设计中常常会出现一些错误,例如死循环、数组越界等。

为了找出并解决这些错误,我们需要使用调试工具。

通过逐步执行程序,并观察变量的值和程序的执行流程,我们可以找到错误的原因并进行修复。

实验结果与分析通过实验,我们成功编写了多个循环程序,并对其进行了性能优化和调试。

在程序执行过程中,我们发现了一些问题,例如循环次数过多导致程序执行时间过长,或者循环条件设置不当导致程序无法正常结束。

通过分析这些问题,我们可以得出以下结论:1. 循环程序设计是一种高效的编程方法,可以大大提高程序的执行效率。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
ASSUME CS:CODE,SS:STACK,DS:DATA
START:MOV AX,DATA
MOV DS,AX
MOV DI,0000H
MOV CL,[DI]
XOR CH,CH
MOV BL,CH
INC DI
A0: MOV AL,[DI]
TEST AL,80H
JE A2
INC BL
A2: (软件及文档自行从互联网获取)











1.通过实验掌握了宏汇编命令的基本格式及对循环结构的理解。
2.熟悉并掌握了循环结构程序设计的方法。
3.学会了调试循环程序的方法。




教师签字年月日
备注:1.文件名命名方式为:学号+姓名+实验序号.DOC
LOOPA0
MOV [DI],BL
MOV AX,4C00H
INT 21H
CODE ENDS
END START




(1)用编辑软件如:EDIT,输入源程序,并保存,后缀名为.ASM。
(2)用MASM.EXE编译源程序,编译无错后,生成相应的OBJ目标文件。
(3)用LINK. EXE连接OBJ文件,生成可执行的EXE文件。
参考程序一如下:
STACK SEGMENT STACK
DB 32 DUP (?)
STACK ENDS
CODE SEGMENT
ASSUME CS:CODE
START: MOV DX, 0001H
MOV BL, 02H
A1: MOV AL, BL
INC BL
MUL BL
ADD DX, AX
CMP AX,00C8H
JNA A1
INT 03H
CODE ENDS
END START
参考程序二、(数据段内的数据可根据需要改变)
STACK SEGMENT STACK
DW 64 DUP(?)
STACK ENDS
DATA SEGMENT
DB 06H,12H,88H,82H,90H,22H,33H
DATA ENDS
CODE SEGMENT
2.将文件按附件形式添加后提交
(4)运行程序:根据需要,可选择直接通过文件名的方式运行程序,或者是用DEBUG将可执行的EXE文件跳入内存后,用G命令运行。
例:C:\> DEBUG文件名. EXE
-U ;先用反汇编来查看源程序装入的地址和数据段的地址

-G=xxxx:xxxx;从程序装入的地址处,开始运行程序
(5)查看实验结果。




1.掌握宏汇编命令的基本格式及加深对循环结构的理解。
2.掌握循环结构程序设计的方法。
3.熟练掌握调试循环程序的方法。




编制程序
1.使S=1+2*3+3*4+…+N*(N+1),直到N*(N+1)项大于200为止
2.求某数据区内负数的个数。
设数据区的第一个单元存放数据的个数,从第二个单元开始存放数据,在最后一个单元存放结果。
相关文档
最新文档