北京邮电大学_微机原理软件实验报告

合集下载

北京邮电大学 微机原理软件实验2

北京邮电大学 微机原理软件实验2

北京邮电大学微机原理软件实验·第二次实验目录题目一: (2)一、实验目的 (2)二、实验内容 (2)三、设计思路 (2)四、源程序 (3)五、实验结果(反色) (4)题目二: (5)一、实验目的 (5)二、实验内容 (5)三、设计思路 (5)四、源程序 (7)五、程序运行结果(反色) (9)题目三: (10)一、实验目的 (10)二、实验内容 (10)三、设计思路 (10)四、源程序 (11)五、程序运行结果(反色) (14)实验总结: (14)题目一:一、实验目的1、开始独立进行汇编语言程序设计,熟悉debug使用;2、掌握基本分支(如cmp,jmp,jne等),循环程序设计(如loop);3、掌握最简单的DOS 功能调用,如int 21h。

二、实验内容编一程序,在显示器上显示256个ASCII代码,要求显示格式为每行显示16个字符,两个ASCII字符间空一格三、设计思路2、可能使用到的函数①传送指令格式:MOV DEST,SRC功能:把一个字节,字或双字从源操作数SRC传送至目的操作数DEST。

②加1减1指令格式:INC DESTDEC DEST功能:INC指令将目的操作数加1,结果送目的操作数。

DEC指令将目的操作数减1,结果送目的操作数。

目的操作数为通用寄存器或存储器操作数。

③无条件转移指令格式:JMP TARGET功能:使程序无条件地转移到指令规定的目的地址TARGET去执行指令。

转移分为短转移、段内转移(近程转移)和段间转移(远程转移)。

④条件转移指令该类指令是根据上一条指令对标志寄存器中标志位的影响来决定程序执行的流程,若满足指令规定的条件,则程序转移;否则程序顺序执行。

⑤输出单字符这是2号系统功能调用,其使用格式为:MOV DL,‘A’MOV AH,2INT 21H执行2号系统功能调用,将置入DL寄存器中的字符(以ASCII码形式表示)通过显示器显示出来(或从打印机输出)。

北京邮电大学-微机原理硬件实验报告

北京邮电大学-微机原理硬件实验报告

微机原理与接口技术硬件实验报告学院:信息与通信工程学院班级:201******学生姓名:****** ******学号:201******* 201*******班内序号:** **实验一熟悉实验环境及IO的使用一、实验目的:1. 通过实验了解和熟悉实验台的结构,功能及使用方法。

2. 通过实验掌握直接使用Debug 的I、O 命令来读写IO 端口。

3. 学会Debug 的使用及编写汇编程序二、实验内容:1. 学习使用Debug 命令,并用I、O 命令直接对端口进行读写操作,2.用汇编语言编写跑马灯程序。

(使用EDIT 编辑工具)实现功能A.通过读入端口状态(ON 为低电平),选择工作模式(灯的闪烁方式、速度等)。

B.通过输出端口控制灯的工作状态(低电平灯亮)三、实验步骤:1.实验板的IO 端口地址为0E8E0H在Debug 下,I 是读命令。

(即读输入端口的状态---拨码开关的状态)O 是写命令。

(即向端口输出数据---通过发光管来查看)进入Debug 后,读端口拨动实验台上八位拨码开关输入I 端口地址回车屏幕显示 xx 表示从端口读出的内容,即八位开关的状态ON 是0,OFF 是 1 写端口输入 O 端口地址xx (xx 表示要向端口输出的内容)回车查看实验台上的发光二极管状态,0 是灯亮,1 是灯灭。

2. 在Debug 环境下,用a 命令录入程序,用g 命令运行C>Debug -amov dx, 端口地址mov al,输出内容out dx, almov ah, 0bhint 21hor al, aljz 0100int 20h-g运行查看结果,修改输出内容再运行查看结果分析mov ah, 0bhint 21hor al, aljz 0100int 20h该段程序的作用:检测键盘有没有按键,有则返回DOS。

没有继续执行3.利用EDIT 工具编写汇编写跑马灯程序程序实现功能A.通过读入端口状态(ON 为低电平),选择工作模式(灯的闪烁方式、速度等)。

北邮微机原理硬件实验报告

北邮微机原理硬件实验报告

北邮微机原理硬件实验报告实验目的本次实验主要是通过对微机原理的学习,掌握多种硬件器件的基本使用,包括程序寄存器(PRG)、数据寄存器(DR)、累加器(AC)等,也希望能够初步了解微机系统的结构和工作原理。

实验内容1. 按以下程序编写汇编程序ORG 0HLOOP: MOV A,NUMADD BINC R5MOV MEM,R5SJMP LOOPENDNUM: DB 50HB: DB 35HR5: EQU 25HMEM: DS 1编写程序后,运行该程序,观察程序在8051微处理器上执行的情况。

2. 制作简易流水灯电路使用LED等元器件,制作一个简单的流水灯电路。

同时,编写相应的汇编程序,实现流水灯的基本效果。

3. 实现双向流水灯效果在完成流水灯电路的基础上,通过改变程序实现双向流水灯的效果。

在这个过程中,需要仔细分析程序的实现方式,并且结合8615芯片的具体情况,理解程序在底层机器中的工作方式。

4. 实现用数码管显示数字的功能使用7段数码管,将程序输出的结果显示在数码管上。

在这个过程中,我们需要灵活处理I/O端口和存储器的读写,以及处理各类中断信号。

实验过程1. 编写并调试汇编程序我们首先使用Keil软件编写了相应的汇编程序,并在8051单片机上运行。

在运行过程中发现,程序能够成功地对NUM与B进行加法运算,并将结果存储在MEM中。

2. 制作流水灯电路我们使用LED、电阻等元器件,制作了一个简单的流水灯电路,并测试了该电路的基本工作情况。

由于电路较为简单,因此没有出现特别明显的问题。

3. 实现双向流水灯效果为了实现双向流水灯效果,我们对程序进行了修改。

在这个过程中,初步出现了一些问题,包括倒计时初始值不正确、程序中断启动终止不及时等。

经过反复调试,我们成功地实现了这一功能。

4. 实现用数码管显示数字的功能最后,我们将流水灯程序变更为用数码管显示数字的程序。

在这个过程中,我们主要用到了表格查找和存储器读写等基本操作,成功将结果在数码管上显示。

北邮微机原理软件实验报告(精)

北邮微机原理软件实验报告(精)

北邮微机原理软件实验报告(精)微机原理软件实验报告实验二分支、循环程序设计一.实验目的1.启动独立的汇编语言编程。

2.掌握基本分支和循环编程。

3.掌握最简单的DOS函数调用。

二、实验内容1.安排一个数据区,内存有若干个正数,负数和零。

每类数的个数都不超过9。

2.编写一个程序统计数据区中正数,负数和零的个数。

3.将统计结果在屏幕上显示。

三.流程图IV源代码datasegmentzdw0;数据adw0中的零数;大于0 bdw0的数据数;数据中小于0的数量numdw9,8,0,-7,6,-5,-4,3,2,-1,0,-8,-1,9,0,0,1;设定的一组数据,其中4个0,7个正数,6个负数,符合题目要求NDW($-num/2);此组中的数据数量为类型0DB0DH,0ah,‘零的数量:$’类型1DB0DH,0ah,‘格雷特的数量:$'type2db0dh,0ah,'numberoflessthan0:$'locatedwtype0,type1,type2dataendsstacksegmentstackdw128dup(?stackendscodesegmentassumeds:data,ss:stack,cs:codestart:movax,datamovds,axmovax,stack莫夫斯,斧头;初始化DS和Ss以指向stamovbx,offsetnum;将num中第一个数字的地址送入bxmovcx,n;将n中数字个数送入cxloop1:movax[bx];取出num中的第一个数字cmpax,0;与零相比jzifz;判断结果为是0,跳转到ifz处继续执行salax,1jcifl;如果判断结果小于0,跳转到IFLincwordptra;否则,a自加,然后继续执行程序jmpcontinueifl:incwordptrb;B计数加上1jmpcontinueifz:incz;Z计数加1继续:addbx,2;指针+2,继续送入下一数字looploop1;循环cx次判断movcx,3;共显示3个字符串xorbx,bxdisp:movdx,定位[bx]movah,09h;dos09号功能调用,显示字符串int21hmovdx,z[bx]adddx,'0';转换为ASCII码movah,02h;dos02号功能调用,显示字符int21haddbx,2;指针+2(DW)loopdispmovax,4c00hint21h;返回dos系统codeendsendstart五.运行结果Vi预览问题1.十进制数0--9所对应的ascii码是什么?如何将十进制数0--9在屏幕上显示出来?。

推荐-北邮—微原软件实验报告 精品

推荐-北邮—微原软件实验报告 精品

微机原理软件实验报告学院:信息与通信工程学院班级:班内序号:姓名:学号:实验二分支,循环程序设计一.实验目的:1.开始独立进行汇编语言程序设计;2.掌握基本分支,循环程序设计;3.掌握最简单的DOS 功能调用.二.实验内容:1.安排一个数据区(数据段),内存有若干个正数,负数和零.每类数的个数都不超过9.2.编写一个程序统计数据区中正数,负数和零的个数.3.将统计结果在屏幕上显示.三.预习题:1.十进制数0 -- 9 所对应的ASCII 码是什么? 如何将十进制数0 -- 9 在屏幕上显示出来?答:0—9对应的ASCII 码是30H—39H;在屏幕上显示0—9,需要将对应字符的ASCII 码赋给DL,并进行DOS的2号功能调用,0—9的ASCII 码正是其本身的数值加上30H。

2.如何检验一个数为正,为负或为零? 你能举出多少种不同的方法?答:①用CMP命令和0比较,如果ZF为1,则该数为零;再用该数和8000H相与,取出符号位判断,可区分正负;②用CMP命令和0比较,结果不小于0时用JGE命令进行跳转,否则为负数;用JGE 命令跳转后,如果为0再用JZ命令跳转,否则为正数。

四.选作题:统计出正奇数,正偶数,负奇数,负偶数以及零的个数.五.实验过程1.流程图2.源代码DATA SEGMENTNUM DW 0,0,1,2,3,4,5,101,-6,-7,-8,-8,-9 ;有2个0,6 个正数,5 个负数N DW ($-NUM)/2 ;该组数据的个数Z DB 0 ;0 的个数P DB 0 ;正数的个数PO DB 0 ;正奇数的个数PE DB 0;正偶数的个数M DB 0 ;负数的个数MO DB 0;负奇数的个数ME DB 0 ;负偶数的个数STR0 DB 'number of zeros : $' ;STR0-4为用于显示的字符串STR1 DB 0DH, 0AH, 'number of positive numbers : $'STR2 DB 0DH, 0AH, 'number of negative numbers : $'STR3 DB 0DH, 0AH, ' odd : $'STR4 DB ' even : $'DATA ENDSSTACK SEGMENT STACKDW 100 DUP(?)STACK ENDSCODE SEGMENTASSUME DS:DATA, SS:STACK, CS:CODESTART: MOV AX, DATAMOV DS, AXMOV AX, STACKMOV SS, AX ;初始化DS、SSLEA BX, NUM ;将NUM 中第一个数字的地址送入BXMOV CX, N ;将数据个数送入CXAGAIN: MOV AX, [BX] ;取出NUM 中的第一个数字CMP AX, 0 ;和0比较JGE PLU ;大于等于0时转PLUINC M ;负数的个数加1TEST AX, 1 ;检测该数据最低位是否为1,即是否为负奇数JNZ MINODD ;ZF为0时转MINODD,该数为负奇数INC ME ;负偶数个数加1JMP NEXTMINODD: INC MO ;负奇数个数加1JMP NEXTPLU: JZ ZER ;等于0时转ZERINC P ;正数个数加1TEST AX, 1 ;检测该数据最低位是否为1,即是否为正奇数JNZ PLUODD ;ZF为0时转PLUODD,该数为正奇数INC PE ;正偶数个数加1JMP NEXTPLUODD: INC PO ;正奇数个数加1JMP NEXTZER: INC Z ;零的个数加1NEXT: ADD BX,2 ;偏移地址加2,指向下一数字LOOP AGAIN ;CX自减,CX≠0时继续循环DISPLAY: ;在屏幕上显示统计结果MOV AH, 09H ;9号功能调用,显示字符串MOV DX, OFFSET STR0 ;将字符串的首地址的偏移地址送到DX,DS已;是其段基址INT 21HMOV AH, 02H ;2号功能调用,显示单个字符MOV DL, Z ;将零的个数送到DLADD DL, 30H ;0—9数字本身加上30H即为其ASCII 码INT 21HMOV AH, 09H ;正数部分统计结果显示,原理同上MOV DX, OFFSET STR1INT 21HMOV AH, 02HMOV DL, PADD DL, 30HINT 21HMOV AH, 09HMOV DX, OFFSET STR3INT 21HMOV AH, 02HMOV DL, POADD DL, 30HINT 21HMOV AH, 09HMOV DX, OFFSET STR4INT 21HMOV AH, 02HMOV DL, PEADD DL, 30HINT 21HMOV AH, 09H ;负数部分统计结果显示,原理同上MOV DX, OFFSET STR2INT 21HMOV AH, 02HMOV DL, MADD DL, 30HINT 21HMOV AH, 09HMOV DX, OFFSET STR3INT 21HMOV AH, 02HMOV DL, MOADD DL, 30HINT 21HMOV AH, 09HMOV DX, OFFSET STR4INT 21HMOV AH, 02HMOV DL, MEADD DL, 30HINT 21HMOV AX, 4C00H ;返回DOSINT 21HCODE ENDSEND START3.运行结果数据为:0,0,1,2,3,4,5,101,-6,-7,-8,-8,-9运行结果:zero表示零的个数,为2;positive number表示正数的个数,为6,其中奇数odd为4个,偶数even为2个;negative number表示负数的个数,为5,其中奇数odd为2个,偶数even 为3个。

2011211123班北邮微原软件实验报告

2011211123班北邮微原软件实验报告

信息与通信工程学院微机原理软件实验报告班级:2011211123姓名:学号:日期:2013.11.28实验二分支、循环程序设计一、实验目的1.开始独立进行汇编语言程序设计;2.掌握基本分支,循环程序设计;3.掌握最简单的DOS 功能调用。

二、实验内容1.安排一个数据区,内存有若干个正数,负数和零。

每类数的个数都不超过9。

2.编写一个程序统计数据区中正数,负数和零的个数。

3.将统计结果在屏幕上显示。

4.(扩展题)统计出正奇数、正偶数,负奇数、负偶数以及零的个数。

三、预习思考1.十进制数0 ~ 9 所对应的ASCII 码是什么?如何将十进制数0 ~ 9 在屏幕上显示出来?答:0~9分别对应ASCII码的30H~39H。

将十进制数0~9显示在屏幕上,要用二进制数0~9分别加上30H。

2.如何检验一个数为正,为负或为零?你能举出多少种不同的方法?答:和0相比是否相等,然后用该数和相与,取出符号位判断,可区分正负。

还可以直接用CMP命令和0比较,然后用JZ等命令进行判断。

四、实验过程1、流程图是2、源代码DATA SEGMENTARRAY DB 8,0,0,5,8,-1,-2,-3, 0,1,4,3LENG EQU $-ARRAY ; 数组长度POSI DB ? ; 正数个数NEGT DB ? ; 负数个数ZERO DB ? ; 零的个数POSIEVEN DB ? ;正偶数的个数POSIODD DB ? ; 正奇数的个数NEGTEVEN DB ? ; 负偶数的个数NEGTODD DB ? ; 负奇数的个数POSICHAR DB 'Pos: $'NEGTCHAR DB 'Neg: $'ZEROCHAR DB 'Zero: $'EVENCHAR DB ' ou: $'ODDCHAR DB ' ji: $'CR DB 0DH,0AH,'$' ; 回车换行DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART: MOV AX,DATAMOV DS,AXMOV SI,OFFSET ARRAY-1MOV CL,LENG ;数组长度MOV AL,0LOP: CMP CL,0 ; 循环控制条件JE CALCINC SIDEC CLMOV BL,[SI] ;基址加变址寻址CMP BL,AL ; 和零比较JG ISPOSI ; 是正数JE ISZERO ; 是零JL ISNEGT ; 是负数ISPOSI: INC POSI; 正数个数加一AND BX,1ADD POSIEVEN,BL ; 和1与之后的结果加到正偶数中JMP LOPISZERO: INC ZEROJMP LOPISNEGT: INC NEGT ; 负数个数加一AND BX,1ADD NEGTEVEN,BL ; 和1与之后结果加到负偶数中JMP LOPCALC: MOV AH,POSIMOV AL,POSIEVENSUB AH,AL ; 计算正奇数个数MOV POSIODD,AHMOV AH,NEGTMOV AL,NEGTEVENSUB AH,AL ; 计算负奇数个数MOV NEGTODD,AHPRINT: ;打印MOV AH,09HMOV DX,OFFSET POSICHARINT 21HMOV AH,02HMOV DL,POSIADD DL,30HINT 21HMOV AH,09HMOV DX,OFFSET EVENCHARINT 21HMOV AH,02HMOV DL,POSIEVENADD DL,30HINT 21HMOV AH,09HMOV DX,OFFSET ODDCHARINT 21HMOV AH,02HMOV DL,POSIODDADD DL,30HINT 21HMOV DX,OFFSET CRMOV AH,09HINT 21HMOV AH,09HMOV DX,OFFSET NEGTCHARINT 21HMOV AH,02HMOV DL,NEGTADD DL,30HINT 21HMOV AH,09HMOV DX,OFFSET EVENCHARINT 21HMOV AH,02HMOV DL,NEGTEVENADD DL,30HINT 21HMOV AH,09HMOV DX,OFFSET ODDCHARINT 21HMOV AH,02HMOV DL,NEGTODDADD DL,30HINT 21HMOV DX,OFFSET CRMOV AH,09HINT 21HMOV AH,09HMOV DX,OFFSET ZEROCHARINT 21HMOV AH,02HMOV DL,ZEROADD DL,30HINT 21HEXT: MOV AX,4C00HINT 21HCODE ENDSEND START五、实验分析实验结果如下:六.预习题1.十进制数0 -- 9 所对应的ASCII 码是什么? 如何将十进制数0 -- 9 在屏幕上显示出来?答:0-9的ascii码为,30h,31h,32h,34h,35h,36h,37h,38h,39h,将要显示的数加上30h,得到该数的ascii码,再利用DOS功能调用显示单个字符2.如何检验一个数为正,为负或为零? 你能举出多少种不同的方法?答:利用cmp指令,利用TEST指令,将该数与0相减,观察标志位。

北京邮电大学微机原理软件

北京邮电大学微机原理软件

微机原理软件实验报告班级:姓名:学号:班内序号:指导老师:实验二分支、循环程序设计一、实验目的1.开始独立进行汇编语言程序设计;2.掌握基本分支,循环程序设计;3.掌握最简单的 DOS 功能调用.二、实验内容1.安排一个数据区,内存有若干个正数,负数和零.每类数的个数都不超过 9.2.编写一个程序统计数据区中正数,负数和零的个数.3.将统计结果在屏幕上显示.4.(选作)统计出正奇数,正偶数,负奇数,负偶数以及零的个数.三、实验设计四、源代码DATA SEGMENTARRAY DB -1,-2,-3,-4,-5,-6,0,1,2,3,5,4,5,6,0COUNT EQU $-ARRAYPOSI DB 0 ;正数NEGA DB 0 ;负数ZERO DB 0 ;零ODDPOS DB 0 ;正奇数EVENPOS DB 0 ;正偶数ODDNEG DB 0 ;负奇数EVENNEG DB 0 ;负偶数STRING1 DB '正数个数:','$' ;把最后的统计结果显示在屏幕上STRING2 DB '负数个数:','$' ;下同STRING3 DB '零的个数:','$'STRING4 DB '正奇数个数:','$'STRING5 DB '正偶数个数:','$'STRING6 DB '负奇数个数:','$'STRING7 DB '负偶数个数:','$'DATA ENDSSTACK SEGMENT STACK 'STACK'DB 100 DUP(?)STACK ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACKSTART: MOV AX,DATAMOV DS,AXMOV CX,COUNTLEA BX,ARRAY ;把数据段的偏移地址给BXLOOP1: CMP BYTE PTR [BX],0JGE POSINC NEGA ;统计负数TEST BYTE PTR [BX],01H ;利用奇数的二进制表示式最后一位必为1的特JZ ENEG ;点来判断奇偶INC ODDNEG ;统计负奇数JMP NEXTENEG: INC EVENNEG ;统计负偶数JMP NEXTPOS: JZ ZERINC POSI ;统计正数TEST BYTE PTR [BX],01HJZ EPOSINC ODDPOS ;统计正奇数JMP NEXTEPOS: INC EVENPOS ;统计正偶数JMP NEXTZER: INC ZERO ;统计零NEXT: INC BXLOOP LOOP1MOV AH,09H ;显示正数MOV DX,SEG STRING1MOV DS,DXLEA DX,STRING1INT 21HMOV AH,02HMOV DL,POSIADD DL,30HINT 21HMOV DL,0AH ;显示空格INT 21H ;显示回车MOV DL,0DHINT 21HMOV AH,09H ;显示负数MOV DX,SEG STRING2MOV DS,DXLEA DX,STRING2INT 21HMOV AH,02HMOV DL,NEGAADD DL,30HINT 21HMOV DL,0AHINT 21HMOV DL,0DHINT 21HMOV AH,09H ;显示零MOV DX,SEG STRING3MOV DS,DXLEA DX,STRING3INT 21HMOV AH,02HMOV DL,ZEROADD DL,30HINT 21HMOV DL,0AHINT 21HMOV DL,0DHINT 21HMOV DL,0AHINT 21HMOV DL,0DHINT 21HMOV AH,09H ;显示正奇数MOV DX,SEG STRING4MOV DS,DXLEA DX,STRING4INT 21HMOV AH,02HMOV DL,ODDPOSADD DL,30HINT 21HMOV DL,0AHINT 21HMOV DL,0DHINT 21HMOV AH,09H ;显示正偶数MOV DX,SEG STRING5MOV DS,DXLEA DX,STRING5INT 21HMOV AH,02HMOV DL,EVENPOSADD DL,30HINT 21HMOV DL,0AHINT 21HMOV DL,0DHINT 21HMOV AH,09H ;显示负奇数MOV DX,SEG STRING6MOV DS,DXLEA DX,STRING6INT 21HMOV AH,02HMOV DL,ODDNEGADD DL,30HINT 21HMOV DL,0AHINT 21HMOV DL,0DHINT 21HMOV AH,09H ;显示负偶数MOV DX,SEG STRING7MOV DS,DXLEA DX,STRING7INT 21HMOV AH,02HMOV DL,EVENNEGADD DL,30HINT 21HMOV DL,0AHINT 21HMOV DL,0DHINT 21HMOV AX,4C00HINT 21HCODE ENDSEND START五、程序运行结果六、预习题1.十进制数 0 -- 9 所对应的 ASCII 码是什么? 如何将十进制数 0 -- 9 在屏幕上显示出来?答:十进制数0—9对应的ASCII码是30H—31H。

北邮微机原理软件实验报告

北邮微机原理软件实验报告

实验一1.实验要求:编一程序,将地址偏移量为100H单元开始的256个单元分别写入00H,01H,……,FFH数据;统计写入的数据块的0元素、正元素、负元素的个数,并分别将统计结果送入上述数据块后的三个单元中;用DOS功能调用显示上面数据快各单元(包括统计结果)内容,要求每行显示16个数据,两个数据之间用空格隔开。

程序设计思路:分配256个单元存放数据00H,01H,……,FFH,3个单元存放统计结果。

约定:DH存放0的个数,BH存放负数的个数,BL存放正数的个数,然后进行将256个数据一一与0进行比较,得到 DH、BH、BL。

将DH、BH、BL 存入SI的最后三个单元。

最后在以高、低4位,依次将每个单元的数据输出。

2. 程序流程:4.子程序:DISP PROC NEAR ;Show number MOV DL,AL MOV AH,2 INT 21H RET DISP ENDP开始初始化;SI 前256个单元存放00 H……FFH;CX=256;DH=0;BX=0;CMP AL ,0;MOV AL ,[SI] CX=0?将DH ,BX 存入SI ;INC SI ;CX=259;YESINC DH ;INC BHINC BL显示高4位显示低4位; 添加空格; INC SI ;BH=0??BH=16;CX=0?SF=ELSZF=1N ONO YE SN O终止YE实验二1.实验要求:编一程序,把键入的十六进制数转换成十进制,要求:(1)在屏幕上显示转换的十进制数,键入的最大值为FFFFH;(2)若键入非16进制的数,则提示错误;(3)程序中至少用一个子程序和宏命令。

2.程序设计思路:首先判断键入的字符是否为合法的十六进制字符,若是十六进制,将其转化成二进制数值,放入BX中,然后接收下一个字符,并将上一个字符左移4位,再讲此时的BX与接收到的BX相加,直到键入回车,停止接收。

然后通过除以10000,依次将余数除以1000、100、10、1,将二进制转化为十进制,再显示出来。

微机原理软件实验报告

微机原理软件实验报告

实验名称:汇编语言程序设计实验日期:2023年3月10日实验地点:计算机实验室实验者:张三一、实验目的1. 熟悉汇编语言的基本语法和指令系统。

2. 掌握汇编语言程序设计的基本方法。

3. 通过实验,加深对微机原理的理解。

二、实验内容本次实验主要涉及以下内容:1. 数据传送指令的应用2. 算术运算指令的应用3. 控制转移指令的应用4. 子程序设计三、实验步骤1. 编写一个简单的程序,实现以下功能:(1)将数据0x1234存入寄存器AX;(2)将数据0x5678存入寄存器BX;(3)计算AX和BX的乘积,并将结果存入寄存器DX;(4)将乘积的高16位和低16位分别存入寄存器CX和AX。

2. 编写一个程序,实现以下功能:(1)将数据0x1A2B3C4D存入内存单元[0x1000];(2)从内存单元[0x1000]开始,读取连续4个字节的数据;3. 编写一个程序,实现以下功能:(1)定义一个子程序,实现两个整数的加法运算;(2)在主程序中调用该子程序,实现两个整数的加法运算。

四、实验结果与分析1. 数据传送指令的应用(1)将数据0x1234存入寄存器AX;MOV AX, 0x1234(2)将数据0x5678存入寄存器BX;MOV BX, 0x5678(3)计算AX和BX的乘积,并将结果存入寄存器DX;MUL BX(4)将乘积的高16位和低16位分别存入寄存器CX和AX; MOV CX, DXMOV AX, DX2. 算术运算指令的应用(1)将数据0x1A2B3C4D存入内存单元[0x1000];MOV [0x1000], 0x1A2B3C4D(2)从内存单元[0x1000]开始,读取连续4个字节的数据; MOV AX, [0x1000]MOV BX, [0x1000+2]MOV CX, [0x1000+4]MOV DX, [0x1000+6]MOV AH, 0x0EINT 0x103. 控制转移指令的应用(1)定义一个子程序,实现两个整数的加法运算;ADD procedure:ADD AX, BXRET(2)在主程序中调用该子程序,实现两个整数的加法运算;MOV AX, 0x1MOV BX, 0x2CALL ADDMOV CX, AX五、实验心得通过本次实验,我深刻理解了汇编语言的基本语法和指令系统,掌握了汇编语言程序设计的基本方法。

2021年北邮微机原理实验报告

2021年北邮微机原理实验报告

微机原理软件试验汇报学院: 信息与通信工程学院班级: 211123班内序号:学生姓名:学号:试验二分支,循环程序设计一、试验目1.开始独立进行汇编语言程序设计;2.掌握基础分支,循环程序设计;3.掌握最简单DOS 功效调用.二、试验任务及内容1.安排一个数据区, 内存有若干个正数, 负数和零。

每类数个数都不超出9。

2.编写一个程序统计数据区中正数, 负数和零个数。

3.将统计结果在屏幕上显示。

4.(扩展题)统计出正奇数、正偶数, 负奇数、负偶数以及零个数。

三、画出程序步骤图Y四、给出源程序(要求加注释)data segmentbuff dw 1, 2, 0, 0 ,-1 ; 数据段, 初始化数据count equ $-buffplus db ? ; 定义三种数存放位置zero db ?minus db ?string1 db 'plus number:','$'string2 db 'zero number:','$'string3 db 'minus number:','$'data endsstack segment stack 'stack'db 100 dup(? )stack endscode segmentassume cs:code,ds:data,es:data,ss:stackbegin:mov ax,datamov ds,axmov cx,countshr cx,1mov dx,0mov ah,0lea bx,buffagain: cmp word ptr[bx],0 ; 首先和0比较jge pluinc ah ; 小于零MINUS+1jmp nextplu: jz zer ; 判定是否等于零, 等于零ZERO+1 inc dl ; 不等于零PLUS+1jmp nextzer: inc dhnext:inc bx ; 下一个数inc bxloop againadd dl,48mov plus,dladd dh,48mov zero,dhadd ah,48mov minus,ahshow:sub dx,dx ; 显示模块mov dx,offset string1mov ax,0900h ; 送显示指令int 21hmov dl,[plus]mov ax,0200hint 21hmov dl,0dhint 21hmov dl,0ahint 21hmov dx,offset string2mov ax,0900hint 21hmov dl,[zero]mov ax,0200hint 21hmov dl,0dhint 21hmov dl,0ahint 21hmov dx,offset string3mov ax,0900hint 21hmov ax,0200hmov dl,[minus]int 21hmov ax,4c00h ; 结束程序int 21hcode endsend begin五、给出程序运行结果(运行结果抓屏保留)data segment 中存入1, 2, 0, 0, -1显示有2个0、2个大于0数、1个小于0数, 结果正确六、预习题1.十进制数0 -- 9 所对应ASCII 码是什么? 怎样将十进制数0 -9 在屏幕上显示出来? 答: 对应ASCII码是30H~39H, 把0-9加上30H即可得到对应ASCII, 送给DL, 再实施INT 21H即可显示。

北邮微机原理 第二次软件实验报告

北邮微机原理 第二次软件实验报告

微机原理与接口技术中断实验与编程报告姓名学院信息与通信工程学院专业班级学号班内序号目录一、实验目的 (2)二、实验任务及内容 (2)1设计思路 (2)2流程图 (3)3源代码 (4)4子程序清单 (9)三、实验结果 (10)四、实验总结 (12)一、实验目的编一程序,在显示器上显示时、分、秒。

借用计数器8253的Timer0作为中断源,通过8259A向CPU发中断,每10ms产生一次中断。

在中断服务程序中管理刷新时、分、秒。

要求:输入文件名,(如CLK)后,清屏后显示:Current time is xx:xx:xx(时分秒键盘输入)打回车,时、分、秒开始计时。

时钟不停的刷新。

当键入ctrl+c时,停止计时,返回系统,且系统正常运行不死机。

二、实验任务及内容1设计思路1)定义数据段和堆栈段。

数据段存放中断次数count100,输入的时间信息(8位字符),用于提示的字符串信息。

堆栈段存放256个空字符。

2)宏名check的定义。

判断输入的字符是否超出允许输入的范围,若超出范围,报错后返回程序开始处。

3)主程序。

初始化寄存器。

清屏。

(执行过程见注释部分)显示字符串str1。

用于说明输入格式(xx:xx:xx)和输入后开始计时的方式(按回车键开始)将输入的8个字符存入数据段。

使用DOS功能调用01H,通过DI,把存放在AL 中的键入字符存入以tenhour为开始的数据段,并使用宏指令check判断输入字符是否超过范围。

键入回车,开始计时。

使用DOS 功能调用01H ,把键入的键与回车键对应码0DH进行比较。

若键入其他键,报错,返回程序开始。

将原来08H 中断号设置的入口地址换成本程序中timer 的起始地址,保证在发生08H 中断时,程序自动进入timer 过程。

为时钟计时器置初值。

43H 端口是指8253三通道定时器中的命令寄存器,所使用的命令字36H 表示选用0通道定时器,以3号方式(产生方波)计数等。

北京邮电大学实验报告实验三微机

北京邮电大学实验报告实验三微机

北京邮电大学实验报告题目:微机原理软件实验三班级: 2010211127专业:信息工程姓名:付莹学号:10210759实验五:中断实验1. 实验类设计型实验:编程实现时钟的显示。

2. 实验目的掌握计数器/定时器8253的工作原理和编程方法;掌握中断控制器8259的工作原理;掌握中断处理程序的编写。

3. 实验条件硬件条件:PC机一台。

软件条件:DOS操作系统;任意一种编辑程序,如EDIT;宏汇编程序MASM;连接程序LINK;调试程序DEBUG。

可借用该程序中的中断服务程序以及8253的初始化程序段(口地址为40H、41H、42H、43H,控制字为36H=00110110B,时间常数TC=11932:1.1932MHz/11932=100Hz,输出方波频率为100Hz,其周期为1000/100=10ms)。

4. 实验内容及步骤编一程序,在显示器上显示时、分、秒。

借用计数器8253的Timer0作为中断源,通过8259A向CPU发中断,每10ms产生一次中断。

在中断服务程序中管理刷新时、分、秒Current time is: xx:xx:xx (时分秒键盘输入)回车后时、分、秒开始计时,时钟不停的刷新。

当键入CTRL+C时,停止计时,返回系统,且系统正常运行不死机。

5. 实验报告(1)画出程序流程图。

开始等待回车键按下(08H 中断调用)取原8H 中断的中断矢量并压栈保护建立数据段的可寻址性 装载现在的中断服务程序8253初始化产生10ms 方波,10ms 中断一次重写IMR ,只开放时钟和键盘中断开中断监测键盘(06H 中断调用)是Ctrl+C ? 关中断 恢复IMR重置8253,,55ms 中断一次恢复原中断开中断返回DOS ,结束Yes有键按下?显示时间值(09H 中断调用)取消秒Yes 计数达到100次(1秒)?NoYesNoNo实现等待计时功能实现循环,秒值变化则返回继续执行程序显示“Current time is :” 读入键盘输入(2)提交调试好的汇编语言源程序(.asm)。

北邮 微机原理实验报告

北邮 微机原理实验报告

北邮微机原理实验报告一、实验目的本实验旨在通过对微机原理的实际操作,加深对计算机内部结构和工作原理的理解,并通过实验验证理论知识的正确性。

二、实验设备和材料•计算机硬件设备:PC机一台、示波器一台、数字信号发生器一台。

•软件工具:TASM、MASM汇编语言编译器。

三、实验内容本实验分为以下几个步骤:1. 准备工作•将PC机与示波器、数字信号发生器连接。

•打开PC机,进入实验环境。

2. 实验一:简单指令的执行•编写一个简单的汇编程序,实现两个数相加并将结果存储到指定寄存器中。

•使用TASM或MASM编译器对汇编程序进行编译,生成可执行文件。

•运行可执行文件,在示波器上观察到相加过程的波形。

3. 实验二:数据传输操作•编写一个汇编程序,实现数据在不同寄存器和内存之间的传输。

•编译并运行程序,通过观察PC机上的输出结果,验证数据传输的正确性。

4. 实验三:逻辑运算和移位操作•编写程序,实现逻辑运算和移位操作,并观察运算结果。

•通过数字信号发生器产生相应的输入信号,验证程序的正确性。

5. 实验四:中断处理•编写一个汇编程序,实现对中断请求的响应和处理。

•通过示波器观察中断请求和处理的波形,验证程序的正确性。

6. 实验五:串行通信操作•编写程序,实现串行通信的发送和接收操作。

•通过示波器观察串行通信的波形,验证程序的正确性。

四、实验结果和分析•对每个实验步骤进行记录,并详细分析实验结果。

•比较实验结果与理论预期是否一致,并给出原因分析。

五、实验心得通过本次实验,我深刻理解了微机原理的实际应用和操作过程。

通过实际操作,我对计算机内部结构和工作原理有了更深入的了解,并通过实验验证了理论知识的正确性。

同时,我也意识到在实际操作中的一些细节和注意事项,这对我今后的学习和工作都有很大的帮助。

六、实验总结通过本次实验,我不仅掌握了微机原理的实际应用技能,还深化了对计算机内部结构和工作原理的理解。

实验过程中,我遇到了一些问题,但通过思考和实践,逐步解决了这些问题,并取得了满意的实验结果。

【最新推荐】北邮微机原理软件实验报告-范文word版 (14页)

【最新推荐】北邮微机原理软件实验报告-范文word版 (14页)

本文部分内容来自网络整理,本司不为其真实性负责,如有异议或侵权请及时联系,本司将立即删除!== 本文为word格式,下载后可方便编辑和修改! ==北邮微机原理软件实验报告微机原理软件实验报告实验二分支,循环程序设计一、预习题:1.十进制数 0 -- 9 所对应的 ASCII 码是什么? 如何将十进制数 0 -- 9 在屏幕上显示出来?答:要屏显0-9的数码,可以调用02h中断,然后将要显示的数码的ASCII码存进DL里,然后执行INT 21H就可以打印字符。

当然,若不只一个数,调用09h中断(显示字符串)更好,但要将DS:DXZ指向要显示的数字在内存中的首地址,并要求以$结束。

2.如何检验一个数为正,为负或为零? 你能举出多少种不同的方法?答:CMP X,0 检验标志位CFCF=1,X为负数CF=0接着检验ZF:ZF=1,X为零,ZF=0,X为正数二、实验目的:1.开始独立进行汇编语言程序设计;2.掌握基本分支,循环程序设计;3.掌握最简单的 DOS 功能调用.三、实验内容:1.安排一个数据区,内存有若干个正数,负数和零.每类数的个数都不超过 9.2.编写一个程序统计数据区中正数,负数和零的个数.四、实验源代码assume cs:code,ds:datadata segmentbuff db 1,2,3,4,5,-1,-2,-3,0,0 ;安排的数据区string db '>0:'plus db 0db 0ah,0dhstring1 db '=0:'zero db 0db 0ah,0dhstring2 db '<0:'minus db 0db '$'data endscode segmentstart:movax,datamovds,axmov cx,10mov dx,0 mov ah,0 ;初始化,并将CX赋为10,因为共有10个数 ;用变量plus来存储正数的个数 ;用变量zero来存储零的个数 ;用变量minus来存储负数的个数 ;将计数器dx,ah初始化为0lea bx,buffcompare:cmp byte ptr [bx],0jgeplu inc ah jmp next ;取出一个数与0进行比较 ;大于等于0,跳至plu 执行 ;小于0,用ah暂存小于0的个数,ah+1 ;比完后进行下一个数的比较plu: je zer;等于0,跳至zer执行 inc dl jmp next zer: inc dh ;大于0,用dl暂存大于0的个数,dl+1 ;比完后进行下一个数的比较 ;等于0,用dh暂存等于0的个数,dh+1 ;将dl,dh,ah分别赋值给变量plus,zero,minus,其ASCII分别加next:incbx loop compare48add dl,48 movplus,dl add dh,48 movzero,dh add ah,48 movminus,ah mov ah,09h lea dx,string int 21h ;调用09h中断,将最终结果输出mov ax,4c00hint 21hcode ends否 end start实验截图六、实验总结及心得体会:这个实验有两个要点。

北邮微机原理实验报告

北邮微机原理实验报告

微机原理软件实验报告学院:信息与通信工程学院班级:2012211123班内序号:学生姓名:学号:实验二分支,循环程序设计一、实验目的1.开始独立进行汇编语言程序设计;2.掌握基本分支,循环程序设计;3.掌握最简单的DOS 功能调用.二、实验任务及内容1.安排一个数据区,内存有若干个正数,负数和零。

每类数的个数都不超过9。

2.编写一个程序统计数据区中正数,负数和零的个数。

3.将统计结果在屏幕上显示。

4.(扩展题)统计出正奇数、正偶数,负奇数、负偶数以及零的个数。

三、画出程序流程图Y四、给出源程序(要求加注释)data segmentbuff dw 1, 2, 0, 0 ,-1 ;数据段,初始化数据count equ $-buffplus db ? ;定义三种数的存储位置zero db ?minus db ?string1 db 'plus number:','$'string2 db 'zero number:','$'string3 db 'minus number:','$'data endsstack segment stack 'stack'db 100 dup(?)stack endscode segmentassume cs:code,ds:data,es:data,ss:stackbegin:mov ax,datamov ds,axmov cx,countshr cx,1mov dx,0mov ah,0lea bx,buffagain: cmp word ptr[bx],0 ;首先和0比较jge pluinc ah ;小于零MINUS+1jmp nextplu: jz zer ;判断是否等于零,等于零ZERO+1 inc dl ;不等于零PLUS+1jmp nextzer: inc dhnext: inc bx ;下一个数inc bxloop againadd dl,48mov plus,dladd dh,48mov zero,dhadd ah,48mov minus,ahshow:sub dx,dx ;显示模块mov dx,offset string1mov ax,0900h ;送显示指令int 21hmov dl,[plus]mov ax,0200hint 21hmov dl,0dhint 21hmov dl,0ahint 21hmov dx,offset string2mov ax,0900hint 21hmov dl,[zero]mov ax,0200hint 21hmov dl,0dhint 21hmov dl,0ahint 21hmov dx,offset string3mov ax,0900hint 21hmov ax,0200hmov dl,[minus]int 21hmov ax,4c00h ;结束程序int 21hcode endsend begin五、给出程序运行结果(运行结果抓屏保存)data segment 中存入1,2, 0, 0,-1显示有2个0、2个大于0的数、1个小于0的数,结果正确六、预习题1.十进制数0 -- 9 所对应的ASCII 码是什么? 如何将十进制数0 -9 在屏幕上显示出来? 答:对应的ASCII码是30H~39H,把0-9加上30H即可得到对应的ASCII,送给DL,再执行INT 21H即可显示。

北京邮电大学微机原理与接口技术软件件实验报告

北京邮电大学微机原理与接口技术软件件实验报告

北京邮电大学微机原理与接口技术软件件实验报告信息与通信工程学院微机原理软件实验报告班级:学号:姓名:序号:时间:2015-11-6——2015-11-29实验二分支,循环程序设计一、实验目的:1.开始独立进行汇编语言程序设计;2.掌握基本分支,循环程序设计;3.掌握最简单的 DOS 功能调用.二、实验内容:1.安排一个数据区(数据段),内存有若干个正数,负数和零.每类数的个数都不超过 9。

2.编写一个程序统计数据区中正数,负数和零的个数。

3.将统计结果在屏幕上显示。

4.(选做)统计出正奇数,正偶数,负奇数,负偶数以及零的个数。

三、预习题:1、十进制数 0 -- 9 所对应的 ASCII 码是什么? 如何将十进制数 0 -- 9 在屏幕上显示出来?答:十进制数0——9对应的二进制数为30H——39H。

要屏显0-9的数码,只需将AH置成02H(DOS功能调用),然后将要显示的数码的ASCII码存进DL里,然后执行INT 21H就可以打印字符。

或者,若这些数码是以字符串的格式存储,则可以将AH置成09H,(最后以’$’字符结束,)然后将串首地址传给DS,然后执行INT 21H就可以打印字符串。

2、如何检验一个数为正,为负或为零? 你能举出多少种不同的方法?答:可以将待检验数与0比较(使用CMP 指令后用JZ指令判断ZF是否为零),也可以将待检验数与80H相与,判断ZF的值。

二是和0相比是否相等,然后用该数(假设为8位)和10000000相与,取出符号位判断,可区分正负。

本次试验中我使用的方法是与0比较,所有判决方法的核心思想要么是直接和0相比,要么使用逻辑或移位运算,取出符号进行判断。

四、实验过程:流程图:是代码:DATA SEGMENT ;数据段BUFF DW4,0,37,99,-9,-2,-87,0,76,11,0,-34,-11,0,2 2 ;待判断数据COUNT EQU $-BUFF ;COUNT的值为BUFF所占的字节数POSI DB ? ;正数ZERO DB ? ;负数NEGT DB ? ;0 POSIEVEN DB 0 ;正偶数POSIODD DB ? ;正奇数NEGTEVEN DB 0 ;负偶数NEGTODD DB ? ;负奇数POSICHAR DB 'Positive: $' ;用于打印提示的字符串定义NEGTCHAR DB 'Negtive: $'ZEROCHAR DB 'Zero: $'EVENCHAR DB ' Even: $'ODDCHAR DB ' Odd: $'CR DB 0DH,0AH,'$' ; 回车换行的ASCII码DATA ENDSSTACK SEGMENT STACK 'STACK' ;堆栈段DB 100 DUP(?)STACK ENDSCODE SEGMENT ;代码段ASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACK BEGIN:PUSH DSXOR AX,AXPUSH AX ;返回DOSMOV AX,DATAMOV DS,AX ;给DS真正赋值MOV CX,COUNTSHR CX,1 ;相当于除2, 正好为BUFF中的数据个数MOV DX,0 ;设定初值:DH及DL分别为等于、大于零的个数MOV AH,0 ;设定初值:AH为小于零的个数LEA BX,BUFF ;把BUFF中的第一个数存到BXAGAIN: CMP WORD PTR [BX],0 ;BUFF中的第一个数与0进行比较JGE POSITIVE ;大于等于0时转POSITIVEINC AH ;统计小于零的个数ADD WORD PTR [BX],1 AND NEGTEVEN,[BX] ;和1与之后的结果加到负偶数中JMP NEXTPOSITIVE: JZ Z ERO ;等于0时转ZERO INC DL ;统计大于零的个数ADD WORD PTR [BX],1 AND POSIEVEN,[BX] ;和1与之后的结果加到正偶数中JMP NEXTZERO: INC DH ;统计等于零的个数NEXT INC BX ;修改地址指针INC BXLOOP AGAIN ;循环判断CX不为0MOV POSI,DL ;保存结果,正数MOV ZERO,DH ;0MOV NEGT,AH ;负数MOV AH,POSIMOV AL,POSIEVENSUB AH,AL ;计算正奇数个数MOV POSIODD,AHMOV AH,NEGTMOV AL,NEGTEVENSUB AH,ALMOV NEGTODD,AH ;计算负奇数个数PRINT: ;打印正数提示符和正数(奇偶)个数MOV AH,09HMOV DX,OFFSET POSICHARINT 21HMOV AH,02HMOV DL,POSIADD DL,30HINT 21HMOV AH,09HMOV DX,OFFSET EVENCHARINT 21HMOV AH,02HMOV DL,POSIEVENADD DL,30HINT 21HMOV AH,09HINT 21HMOV AH,02HMOV DL,POSIODDADD DL,30HINT 21HMOV DX,OFFSET CRMOV AH,09HINT 21H;打印负数提示符和负数(奇偶)个数MOV AH,09HMOV DX,OFFSET NEGTCHARINT 21HMOV AH,02HMOV DL,NEGTADD DL,30HINT 21HMOV AH,09HINT 21HMOV AH,02HMOV DL,NEGTEVENADD DL,30HINT 21HMOV AH,09HMOV DX,OFFSET ODDCHARINT 21HMOV AH,02HMOV DL,NEGTODDADD DL,30HINT 21HMOV DX,OFFSET CRMOV AH,09HINT 21HMOV AH,09HMOV DX,OFFSET ZEROCHARINT 21HMOV AH,02HMOV DL,ZEROADD DL,30HINT 21HCODE ENDSEND BEGIN ;代码段结束结果分析:数据区待统计的数据为:4,0,37,99,-9,-2,-87,0,76,11,0,-34,-11,0,22实验结果如下图所示:本实验意在练习基本的分支、循环结构。

北邮 微机原理实验报告

北邮 微机原理实验报告

北邮微机原理实验报告北邮微机原理实验报告引言:微机原理是计算机科学与技术专业的一门重要课程,通过学习和实践,我们可以深入了解计算机的组成结构和工作原理。

本次实验旨在通过对北邮微机原理实验的探索,加深对计算机硬件和软件的理解,并提升我们的实践能力。

一、实验目的本次实验的目的是熟悉计算机的硬件组成和工作原理,并通过实践操作加深对微机原理的理解。

具体包括以下几个方面:1. 熟悉计算机的硬件组成,包括中央处理器(CPU)、内存、硬盘等;2. 掌握计算机的启动过程和操作系统的加载;3. 理解计算机的指令集和指令执行过程;4. 学习计算机的输入输出设备和外部接口。

二、实验过程1. 实验一:计算机硬件的组装与连接在本实验中,我们需要将计算机的各个硬件组件进行正确的连接和组装。

首先,我们需要将主板与CPU、内存、显卡等硬件设备进行连接。

其次,我们需要将硬盘、光驱等存储设备与主板进行连接。

最后,我们需要将键盘、鼠标、显示器等外部设备与计算机进行连接。

通过这一步骤,我们可以了解计算机硬件的组成结构,并掌握正确的连接方式。

2. 实验二:计算机的启动过程和操作系统的加载在本实验中,我们需要了解计算机的启动过程和操作系统的加载过程。

首先,我们需要按下电源按钮,启动计算机。

然后,计算机会进行自检和硬件初始化,并加载操作系统。

在这个过程中,我们可以观察到计算机的启动画面和加载过程。

通过这一步骤,我们可以深入了解计算机的启动过程和操作系统的加载机制。

3. 实验三:计算机的指令集和指令执行过程在本实验中,我们需要学习计算机的指令集和指令执行过程。

首先,我们需要了解不同类型的指令,包括算术指令、逻辑指令、数据传输指令等。

然后,我们需要通过编写简单的汇编语言程序,来实现对数据的处理和操作。

在这个过程中,我们可以观察到指令的执行过程和结果。

通过这一步骤,我们可以深入理解计算机的指令集和指令执行过程。

4. 实验四:计算机的输入输出设备和外部接口在本实验中,我们需要学习计算机的输入输出设备和外部接口。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

微机原理软件实验报告学院:信息与通信工程学院班级:XXXXXX姓名:XXXXX学号:XXXXXXXX班内序号:XXXXX日期:2017年11月30日目录微机原理软件实验报告.................................................. 错误!未定义书签。

1. 实验一................................................................................. 错误!未定义书签。

2. 实验二 (7)3. 实验三 (13)4. 实验四 (20)5. 实验五 (30)6. 总结及结论 (39)7. 参考文献 (39)实验一DEBUG的使用一、实验目的:1.掌握汇编程序的编辑,编译,连接和执行的全过程;2.学习和掌握用DEBUG调试程序的方法.二、实验内容:2.通过编译,连接形成可执行文件。

3.用DEBUG 将可执行文件调入,并进行调试。

(1)用D 命令观察数据区在内存中的具体内容,记录单元A 和B 的具体地址。

(2)用U 命令对目标代码反汇编,观察反汇编后的结果.注意发现源程序的起始位置, 并记录这个起始地址。

(3)用T 命令作单步跟踪调试.比较每条指令执行后的结果和原来的理解是否一致。

得出程序运行的结果:它们是写在什么单元,具体内容是什么; 并判断结果是否正确。

(4)用E 命令修改单元A,B 的内容,重新执行程序,并记录结果。

(5)退出DEBUG。

三、预习题:1.熟悉常用的DEBUG 命令。

2.阅读并分析程序的功能。

答:程序实现了(A+B)^2的功能。

3.若SS=2000H,SP=FFFFH, 向堆栈中压入4 字节数据后,如何用D 命令显示压入堆栈的内容?答:使用指令“d 2000:0000”即可显示压入堆栈的内容,因为SP+1 会溢出,所以变成0000。

四、实验过程a.通过masm和link命令使得程序编译链接成功。

b.进入debug中,用u命令查看反编译结果。

得出A的地址为:076A:0000,值为14H,即十进制的20D;B的地址为:076A:0001,值为0FH,即十进制的15D。

Y的偏移地址为0002H,Z的偏移地址为0005H。

DATA段基地址为076AH。

SUB1子程序段入口地址为003F。

c.用e命令将A地址和B地址内的值由2AH,32H改为23H,24H,通过d命令重新查看A地址,B地址下的数值,发现改变成功。

d.利用t命令单步调试,可发现,每一步程序的执行,会与寄存器及存储器的内容的变化是一致的。

e.退出debug。

五、实验总结由于之前上《操作系统》时,零散地学过一些汇编相关的内容,所以关于masm、debug 的基本指令的使用还是比较熟悉的,在做实验一的整个过程中也是比较轻松。

也希望自己能保持着这种轻松的状态去应对接下来的实验!实验二分支、循环程序设计一、实验目的1.开始独立进行汇编语言程序设计;2.掌握基本分支,循环程序设计;3.掌握最简单的DOS 功能调用。

二、实验内容1.安排一个数据区,内存有若干个正数,负数和零。

每类数的个数都不超过9。

2.编写一个程序统计数据区中正数,负数和零的个数。

3.将统计结果在屏幕上显示。

4.(选做题)统计出正奇数、正偶数,负奇数、负偶数以及零的个数。

三、预习题1.十进制数0 ~ 9 所对应的ASCII 码是什么?如何将十进制数0 ~ 9 在屏幕上显示出来?答:0~9分别对应ASCII码的30H~39H。

因为屏幕上显示的数字是ASCII码,所以为了将十进制数0~9显示在屏幕上,需在原有的十进制数值基础上加上30H即可。

2.如何检验一个数为正,为负或为零?答:本实验中,判断正、负或零是直接用CMP命令和0比较,然后用je、jg、jl等命令进行判断为正、负或零。

四、实验流程图五、实验源代码六、实验过程及解释本次实验要求统计数据区内正奇数、正偶数、负奇数、负偶数、零的个数,首先将数据区的数值与0比较,按数字的正、负或零的特性分别跳转至处理正数的子程序段、处理负数的子程序段、处理零的子程序段。

其中,在处理正、负数的子程序段,对于正负数进行带符号的除二运算,通过判别余数是否为零判别该数是偶数还是奇数,并且判别后将各个对应的正奇数、正偶数、负奇数、负偶数、零的个数进行统计。

程序在统计完所有类型的数的个数后,会向显存中写入数字,将统计好的数值以可视化形式呈现出来。

编译运行程序结果如下:a.通过masm和link命令使得程序编译链接成功。

b.由运行结果可看到与数据区设置的正奇数、正偶数、负奇数、负偶数、零的个数一致。

七、实验总结这次实验相较于第一次实验而言,程序需要自己独立设计并且首次涉及到了向屏幕打印数据的程序编写。

为了充分理解向屏幕打印数据的细节方面,我没有选择中断的调用去打印数据,而是自己往显存中直接写入数据并且在屏幕上呈现。

为了编程实现字符向屏幕端的打印,我需要理解显存的数据存储,如一个ASCII码在屏幕端的显示需要两个字节,屏幕通常一行是显示80个字符,也即一行对应160个字节,同时要使得数据呈现时比较美观,还需要自己设计换行等数值的运算,这些都花了我很多时间去调试,不过这也使得我更完整地理解了显存的工作原理,为之后实验打下了基础。

实验三代码转换程序设计一、实验目的1.掌握几种最基本的代码转换方法;2.运用子程序进行程序设计。

二、实验内容1.从键盘上输入若干两位十进制数,寻找其中的最小值,然后在屏幕上显示出来。

2.两个十进制数之间的分隔符,输入结束标志自定,但要在报告中说明。

3.对输入要有检错措施,以防止非法字符输入,并有适当的提示。

4.将整个程序分解为若干模块,分别用子程序实现.在报告中要给出模块层次图。

三、预习题1.如何将输入的两个字符(0~9)变为十进制或二进制数?答:输入的字符0~9是ASCII码表示的,对应于30H~39H,通过减去30H,可以转换为相应的二进制数。

2.如何将选出的最小值(二进制或十进制)变为ASCII 码再进行显示?答:由于在数据区存储的最小数的数值为二进制数,同时要以十进制易于读的形式转化为ASCII码并显示,需要进行除十取商及取余运算,并将取出的二进制形式的商、余数加上30H,转化为对应的ASCII码值。

3.你觉得采用二进制运算还是十进制运算更适合于这个实验?答:由于存储器、寄存器中存储的数据形式都是二进制形式的,所以我觉得采用二进制运算更适于本实验,我在程序的设计、编写中也是采用了二进制运算。

四、程序流程图a. 模块层次图b.完整程序流程图五、程序源代码六、实验过程及解释1.本实验已完成的功能是:a.每次输入一个两位十进制数,按下空格后,会在存储最小值的数据区将刚输入的数值与当前的最小数值进行比对,并时刻在数据区存储当前的最小数。

如果想要向屏幕打印当前所有输入的数字中的最小数的数值时,只需按下回车键,会将当前的最小值打印至屏幕。

b.如果按下错误的按键,屏幕中央会打印出输入错误的提醒,并且这个提醒只会显示几秒钟,类似于弹窗效果,真正起到了提示作用。

2.程序调试结果:a.通过masm和link命令使得程序编译链接成功。

b.正确输入的时候,在此例中,输出了最小数为02,其中02数字的显示为白底蓝字。

c.输入错误时,会在屏幕中间弹出“wrong Input!”的警告,警告保持几秒后自动消失。

七、实验总结本次实验,相较于上一个实验又是一个难度的提升,其中如何得到按键的值,并向屏幕打印出来对应的按键值,还需要了解按键中断触发的工作原理,而这一块在课堂上老师讲解得很浅,还需要自己去查阅相关的资料。

本实验中,我在研读了王爽的《汇编语言》后选中了int16中断的0号功能,关于此功能的调用与使用我也是花了一些时间去琢磨,但此功能在之后的几个实验中都有着极其重要的意义。

此外,还有如何找到最小值,如何在按下不相关按键后提示错误输入并且只显示几秒,这些都用到了一些编程的小技巧,而这些小技巧都是我自己一点一点思索出来的,虽然功能很简单,但是在我看来,这些都是很有趣、很让我满足的。

实验四子程序设计一、实验目的:1.进一步掌握子程序设计方法;2.进一步掌握基本的DOS 功能调用。

二、实验内容:1.从键盘上输入某班学生的某科目成绩.输入按学生的学号由小到大的顺序输入。

2.统计检查每个学生的名次。

3.将统计结果在屏幕上显示。

4.为便于观察,输入学生数目不宜太多,以不超过一屏为宜.输出应便于阅读.尽可能考虑美观。

5.输入要有检错手段。

三、预习题:1.如何确定一个学生在这门科目中的名次?答:此程序显然属于排序问题,从简单的排序算法思考,我首先选定使用冒泡排序算法或是插入排序算法,由于插入排序的特性就如同它所介绍的一样--我们在玩纸牌时,每一次抓牌前的纸牌都是排好序的,每一次插牌后也都是排好序的,按照这个特性去设计程序,可以很好地去贴合程序的设计。

于是最后我选定插入排序去确定学生在科目中的名次。

2.你觉得输入结束后,采用什么方法进行比较以得到学生的名次最为简单?答:因为本实验我所采取的是插入排序,所以最终输入结束后就已经得到了最终学生的名次,所以输入结束后无需再采用别的算法去确定学生名次。

3.准备好模块层次图。

4.给出输出显示的形式。

答:逐行显示,每行依次显示出名次、学号、成绩。

四、程序设计流程图五、程序源代码六.实验过程及解释1.本实验已完成的功能是:a.每次输入一个两位十进制数,按下空格后,会对于存储学号、成绩的数据区进行插入排序,保证每次在数据区存储的数值都是有序的。

如果想要向屏幕打印所有学生的成绩及排名,只需按下回车键,会将当前所有学生的成绩及排名打印至屏幕。

b.如果按下错误的按键,屏幕中央会打印出输入错误的提醒,并且这个提醒只会显示几秒钟,类似于弹窗效果,真正起到了提示作用。

2.程序调试结果:a.通过masm和link命令使得程序编译链接成功。

b.正确输入时的运行结果:如上图所示,输入的学号为01的学生分数为12,学号为02的学生成绩为98,学号为03的学生成绩为97,学号为04的学生成绩为66,学号为05的学生成绩为65,学号为06的学生成绩为78。

经过排序之后可得第一名为学号为02的同学,成绩对应为98,依次逐行显示。

c.错误输入时的运行结果:当错误输入时,在屏幕中间会打印出字幕提示输入错误,保持几秒后消失。

七、实验总结本次实验初次读题时会觉得难度较大,不好入手,不过认真分析后,会发现此次实验主要考核的就是排序的应用。

我们因为在大二已经先修了数据结构这门课,所以对于基本的排序算法有了较好的理解,所以此次实验插入排序的实践上我稍微花了一点时间,在编程中首先需要知道每一次应插入的位置,并且将存储区的数据依次后移腾出应被插入的空间。

相关文档
最新文档