当前位置:文档之家› 北京邮电大学微机原理与接口技术软件件实验报告

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

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

信息与通信工程学院

微机原理软件实验报告

班级:学号:姓名:序号:时间: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 DW 4,0,37,99,-9,-2,-87,0,76,11,0,-34,-11,0,22 ;待判断数据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 ENDS

STACK SEGMENT STACK 'STACK' ;堆栈段

DB 100 DUP(?)

STACK ENDS

CODE SEGMENT ;代码段

ASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACK

BEGIN:

PUSH DS

XOR AX,AX

PUSH AX ;返回DOS

MOV AX,DATA

MOV DS,AX ;给DS真正赋值

MOV CX,COUNT

SHR CX,1 ;相当于除2, 正好为BUFF中的数据个数

MOV DX,0 ;设定初值:DH及DL分别为等于、大于零的个数

MOV AH,0 ;设定初值:AH为小于零的个数

LEA BX,BUFF ;把BUFF中的第一个数存到BX

AGAIN: CMP WORD PTR [BX],0 ;BUFF中的第一个数与0进行比较JGE POSITIVE ;大于等于0时转POSITIVE

INC AH ;统计小于零的个数

ADD WORD PTR [BX],1

AND NEGTEVEN,[BX] ;和1与之后的结果加到负偶数中

JMP NEXT

POSITIVE: JZ ZERO ;等于0时转ZERO

INC DL ;统计大于零的个数

ADD WORD PTR [BX],1

AND POSIEVEN,[BX] ;和1与之后的结果加到正偶数中

JMP NEXT

ZERO: INC DH ;统计等于零的个数

NEXT INC BX ;修改地址指针

INC BX

LOOP AGAIN ;循环判断CX不为0

MOV POSI,DL ;保存结果,正数

MOV ZERO,DH ;0

MOV NEGT,AH ;负数

MOV AH,POSI

MOV AL,POSIEVEN

SUB AH,AL ;计算正奇数个数

MOV POSIODD,AH

MOV AH,NEGT

MOV AL,NEGTEVEN

SUB AH,AL

MOV NEGTODD,AH ;计算负奇数个数

PRINT: ;打印正数提示符和正数(奇偶)个数MOV AH,09H

MOV DX,OFFSET POSICHAR

INT 21H

MOV AH,02H

MOV DL,POSI

ADD DL,30H

INT 21H

MOV AH,09H

MOV DX,OFFSET EVENCHAR

INT 21H

MOV AH,02H

MOV DL,POSIEVEN

ADD DL,30H

INT 21H

MOV AH,09H

MOV DX,OFFSET ODDCHAR

INT 21H

MOV AH,02H

MOV DL,POSIODD

ADD DL,30H

INT 21H

MOV DX,OFFSET CR

MOV AH,09H

;打印负数提示符和负数(奇偶)个数

MOV AH,09H

MOV DX,OFFSET NEGTCHAR

INT 21H

MOV AH,02H

MOV DL,NEGT

ADD DL,30H

INT 21H

MOV AH,09H

MOV DX,OFFSET EVENCHAR

INT 21H

MOV AH,02H

MOV DL,NEGTEVEN

ADD DL,30H

INT 21H

MOV AH,09H

MOV DX,OFFSET ODDCHAR

INT 21H

MOV AH,02H

MOV DL,NEGTODD

ADD DL,30H

INT 21H

MOV DX,OFFSET CR

MOV AH,09H

INT 21H

MOV AH,09H

MOV DX,OFFSET ZEROCHAR

MOV AH,02H MOV DL,ZERO ADD DL,30H

INT 21H CODE

ENDS

END BEGIN ;代码段结束

结果分析:

数据区待统计的数据为:

4,0,37,99,-9,-2,-87,0,76,11,0,-34,-11,0,22 实验结果如下图所示:

本实验意在练习基本的分支、循环结构。关键的点在于和0比较,区分正负和零,然后在正数和负数中判断奇偶,这里巧妙地使用了和1与之后结果加和到偶数中,最后利用统计的数的个数减去偶数得奇数的方法。使得程序更加流畅和简洁,思路也更清晰。

五、实验总结

汇编程序同高级语言一样,在写代码前都要对实验做分析,设计好思路,这样写代码时思路才比较清晰,代码也比较容易写和查找错误。此次实验主要是循环和分支,也是用汇编语言编写的第一个程序,让我熟悉了汇编语言的基本写法,对很多理论课学到的知识都有了更深的了解。了解了怎样利用判别条件在不同的分支中跳转,循环的判别及循环过程。总而言之,此次实验收获还是很多的,

不仅加深了对这两种结构的了解,提升了自己设计程序的能力,并且也提升了自己排除bug 的能力,进一步熟悉了第一个实验的整个流程。

实验三代码转换程序设计

一、实验目的:

1.掌握几种最基本的代码转换方法;

2.运用子程序进行程序设计.

二、实验内容:

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

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

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

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

三、预习题:

1.如何将输入的两个字符(0 -- 9)变为十进制或二进制数?

答:两字符减去0的ASCII码(30H)后,高位数乘以十加上低位数,即变为十进制数。

2.如何将选出的最小值(二进制或十进制)变为 ASCII 码再进行显示?

答:本次实验是直接读入并存储数字的ASCII码,比较其大小,然后直接输出ASCII 码。

3.你觉得采用二进制运算还是十进制运算更适合于这个实验?

答:相比二进制,采用十进制运算更简洁,但需要和ASCII码进行转换。可直接使用数字对应的ASCII比较,分别比较十位和个位,最后直接输出字符即可。

四、实验过程:

模块层次图:

流程图:

代码:

DATA SEGMENT ;数据段 INPUT DB 100 DUP(?)

MINTMP DB '9'-30H,'9'-30H ; 置最小值的初始值为99 COUNT DB 0D

IFERROR DB 0D; 用于判断调用输入子程序是否有错 WELCOME DB 'Please input numbers:','$' ;提示信息字符串 OUTTIP DB 'Minimum is :','$' CR DB 0DH,0AH,'$'; 回车换行

ERROR1 DB 'ERROR:Character is not valid!','$'

;各种错误输入提示 ERROR2 DB 'ERROR:Number must contains two digits!','$' ERROR3 DB 'ERROR:Number is empty!','$' ERROR4 DB 'ERROR:Need separate char!','$' DATA ENDS

STACK SEGMENT STACK 'STACK' ;堆栈段

DB 100 DUP(?)

STACK ENDS

CODE SEGMENT ;代码段

ASSUME CS:CODE,DS:DATA,SS:STACK,ES:DATA BEGIN PROC FAR

PUSH DS ;返回DOS

XOR AX,AX

PUSH AX

MOV AX,DATA ;真正给DS赋值

MOV DS,AX

MOV DX,OFFSET WELCOME; 调用欢迎提示CALL PRINT ;调用子程序

MOV DX,OFFSET CR; 回车换行

CALL PRINT

CALL MAIN; 获取用户输入

CMP IFERROR,0; 判断输入过程是否有错

JNZ BACK; 错误则直接返回DOS

MOV DX,OFFSET CR; 回车换行

CALL PRINT

CALL FINDMIN; 查找最小数

MOV DX,OFFSET OUTTIP; 调用输出提示

CALL PRINT

MOV AH,02H

MOV DL,MINTMP; 输出最小值的十位

ADD DL,30H

INT 21H

MOV AH,02H

MOV DL,MINTMP[1]; 输出最小值的个位

ADD DL,30H

INT 21H

BEGIN ENDP

;获取输入,出口参数为IFERROR,表示是否有错

MAIN PROC

PUSH AX; 保存现场

PUSH BX

PUSH CX

PUSH DX

PUSH DI

MOV DI,0; 数组偏移地址

MOV CX,0; 标识数字的位数

GETLOOP:

MOV AH,01H; 从键盘读取一个字符

INT 21H

CMP AL,0DH; 和回车比较

JE EXIT1; 是回车则结束输入

CMP CX,0; 数字位数为空

JE CMPSPACE0

CMP CX,1; 数字位数为1

JE CMPSPACE1

CMP CX,2; 数字位数为2

JE CMPSPACE2

CMPSPACE0: CMP AL,20H

JE GETLOOP; 数字位数为0且输入空格则忽略,继续输入

JMP ASCBIN; 不是空格就读取该字符

CMPSPACE1: CMP AL,20H

JE ERR2; 数字位数为1且输入空格则位数不是两位数出错

JMP ASCBIN; 否则读取该字符

CMPSPACE2: CMP AL,20H

JNE ERR4; 数字位数为2后,不输入空格则分隔符错误

XOR CX,CX; 输入空格则清零重新计数

JMP GETLOOP

ASCBIN: SUB AL,30H; 化为二进制数字

JL ERR1; 小于则无效字符

CMP AL,9; 和9比较

JG ERR1; 大于9则是无效字符

MOV INPUT[DI],AL; 保存输入的数

INC COUNT; 统计输入的数字个数,为判断是否输入为两位数

INC DI; 向后移动数组

INC CX

JMP GETLOOP

ERR1: MOV IFERROR,1; 输出错误1

MOV DX,OFFSET ERROR1

CALL PRINT

JMP RETURN

ERR2: MOV IFERROR,1; 输出错误2

MOV DX,OFFSET ERROR2

CALL PRINT

JMP RETURN

ERR3: MOV IFERROR,1; 输出错误3

MOV DX,OFFSET ERROR3

CALL PRINT

JMP RETURN

ERR4: MOV IFERROR,1; 输出错误4

MOV DX,OFFSET ERROR4

CALL PRINT

JMP RETURN

EXIT1: MOV BL,COUNT; 判断输入数的个数是否为零CMP BL,0

JE ERR3;输入数目为0则输出错误并退出

AND BL,01H; 判断数字是否为两位数

CMP BL,0

JNE ERR2;输入数字个数为奇数则出错RETURN: POP DI; 恢复现场

POP DX

POP CX

POP BX

POP AX

RET

MAIN ENDP

;回车换行输出字符串,入口参数为DX

PRINT PROC

PUSH AX

MOV AH,09H

INT 21H

POP AX

RET

PRINT ENDP

;查找最小的数子程序

FINDMIN PROC

PUSH DI; 保护现场

PUSH AX

PUSH CX

MOV DI,-2; 数组下标

MOV CL,COUNT; 把数组长度移入CX

MOV AL,CL

CBW

MOV CX,AX

LOP: ADD DI,2

CMP CX,DI; 是否已经比较完毕

JE EXIT2; 如果比较完毕所有数则退出

MOV AH,INPUT[DI];否则接着比较,移入十位数

MOV AL,INPUT[DI+1]; 移入个位数

CMP AH,MINTMP; 比较十位数,MINTMP低地址为十位

JA LOP ;如果MINTMP小,则直接比较下一个数

JE HIGHEQU

;如果十位数相等,比较个位数,再否则十位大就直接存储STOMIN: MOV MINTMP,AH

MOV MINTMP[1],AL

JMP LOP

HIGHEQU: CMP AL,MINTMP[1]; 比较个位数

JNB LOP; 个位数比MINTMP大则跳到下一个数

JMP STOMIN; 否则将当前数写入为MINTMP

EXIT2: POP CX

POP AX

POP DI

RET

FINDMIN ENDP

CODE ENDS

END BEGIN

结果分析:

实验以空格为分隔符,空格的个数不限制,以回车为输入结束标志符。对输入的数字进行了位数和范围的严格限制,即必须是两位数字,如果数字小于10,需要补齐零。 第一次不输入数字,直接回车后,提示错误,输入不能为空; 第二次输入数据1,提示错误,要求输入必需为2位数字; 第三次输入字符$,提示错误,要求输入为数字;

第四次输入123,提示错误,所输入数据两位后必需有空隔;

正确输入待比较数据:01 23 66 09 82 56,找到最小数为01,结果正确。

五、实验总结

这次实验主要是如何分析、如何调用子程序,用子程序使得整个代码思路比较清晰,代码也不容易出错,修改bug 的时候比较好查找。

在实验中,以数组方式进行存储数据,每两个BYTE 存储一个输入的两位数,存储格式为字符ASCII 码,比较数字大小时,采用分别比较高位ASCII 码和低位ASCII 码的方式,

从而不用在输入时将字符存储为数字,输出时也不用再进行逆转换,程序效率大为提高。

实验中遇到了很多问题,在同学的帮助下,解决了很多问题,了解了主函数和子函数的调用,每次遇到bug 时,要是直接看代码找不到问题所在,就用debug 查找,进一步熟悉

了debug的使用,也从DS、IP、CS、AX、BX等寄存器的变化更好的理解了代码,更好的理解了汇编的过程,都是不小的进步,对以后的实验也有帮助。

实验四子程序设计

一、实验目的:

1.进一步掌握子程序设计方法;

2.进一步掌握基本的 DOS 功能调用.

二、实验内容:

1.从键盘上输入某班学生的某科目成绩.输入按学生的学号由小到大的顺序输入.

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

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

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

能考虑美观.

5.输入要有检错手段.

三、预习题:

1.如何确定一个学生在这门科目中的名次?

答:有两种基本思路:一是抽取每个学生的成绩和其他所有学生的成绩进行比较,然后统计比其分数高的学生,得出该学生的名次;二是把学生成绩存入连续内存区域,即数组方式,取得每个学生的成绩偏移量,即成绩偏移地址。然后比较偏移地址所指的成绩的大小,交换数据区的值的位置,完成排序。

2.你觉得输入结束后,采用什么方法进行比较以得到学生的名次最为简单?

答:采用冒泡排序法可获得较好的时间和空间性能。冒泡法平均时间性能O(N2)。相比于直接比较,性能有所改善。但相对于快速排序、归并排序等优化的算法的时间复杂度O(N*log2N)还不够好。但后两者使用汇编实现代码的复杂度和编程要求要高。考虑到学生人数比较少,使用冒泡法是比较简洁的,时间性能是可以接受的。

3.准备好模块层次图.

答:如下图所示实验过程中的模块层次图

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

答:以列表显示输出,依次为排名、学号、成绩。

四、实验过程:

模块层次图:

流程图:

代码:

DATA SEGMENT ;数据段

ID DB 400 DUP(?);存储学号,每个16固定个BYTE ,存储为字符串 MARK DB 20 DUP(?); 存储分数,每个1BYTE ,存储为二进制数 RANK DB 20 DUP(?); 存储排名,每个1BYTE ,存储为二进制数 RANKTMP DB 20 DUP(?); 排序时指针临时区 MTMP DB ?; 记录成绩的临时区

COUNTB DB ?; 记录总的学生的个数,存为8位 COUNTW DW ?; 记录总的学生个数,存为16位 CHEOK DB ?;

输入检查标志位 ERROR DB ?; 记录错误号

TMP DB 2 DUP(?); 开辟两个内存临时存储区,用作判断和计数

CR DB 0DH,0AH,'$'; 回车换行

TAB DB 09H,09H,'$';输出TAB键

ERR0 DB 'Input cannot be empty!','$'

ERR2 DB 'Character is invalid!','$'

ERR4 DB 'Mark is invalid!','$'

ERR6 DB 'Input is invalid!','$'

ERRLIST DW ERR0,ERR2,ERR4,ERR6

TIP0 DB 'Please re-input:','$'

TIP1 DB 'Please input number of students:','$'

TIP2 DB 'Please input ID and MARK:','$'

PRTIP DB '--------------RESULT---------------','$'

PRINFO DB 'ID',09H,09H,'MARK',09H,09H,'RANK','$' PRPRE1 DB 'ID : ','$'

PRPRE2 DB 'MARK: ','$'

BUFF DB 16; 定义输入缓冲区,最长的字符长度

PRES DB ?; 存储实际输入了多少个字符

CHAR DB 16 DUP(?); 实际可存储有效字符16个DATA ENDS

CODE SEGMENT ;代码段

;打印提示字信息的宏,形参为PARA

PRINTTIP MACRO PARA

PUSH AX

PUSH DX

MOV AH,09H

MOV DX,OFFSET PARA

INT 21H

POP DX

POP AX

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

(此文档为word格式,下载后您可任意编辑修改!) 昆明学院课程设计(大作业)

目录 1题目分析 (5) 2基本理论 (5) 3 总体设计 (6) 3.1 本程序的功能结构图 (6) 3.2字符输入及存储设计 (8) 3.3加、减、乘、除法运算的判断设计 (8) 3.4加、减、乘、除法运算的设计 (9) 4实验器材 (10) 5方法步骤 (11) 6成效分析 (11) 6.1运行界面分析 (11) 6.2调试过程及分析 (13) 7心得体会 (14) 8参考文献 (14) 9附录 (14) 课程设计(大作业)报告 一、题目分析 本次设计的简单计算器,主要是为了解决数学中的加、减、乘、除四则运算 的问题。重点和难点主要包括以下几个方面: (1)利用BIOS调用中INT 16H调用中的子程序完成清屏、设置显示方式、设置窗口等操作。

(2)利用INT 21H DOS系统功能调用中的键盘输入接收十进制操作数和运算符由程序完成字符转换为二进制数,并存储起来。 (3)根据运算符完成运算,由程序在屏幕上显示运算结果。 1、十进制数转换为二进制数过程如下: (1)将BX清0. (2)从键盘接收一个按键的ASCII送AL中,并判断是否为0到9之间的字符,若不是转退出;否则将AL中内容减30H,转换为相应数字的二 进制数,并扩展到AX中,然后将BX中内容乘以10后,再加上AX中 的内容。 (3)转(2)继续执行 因此程序退出后,BX中的内容即为所输入十进制数的二进制值。 例如:首先将BX清0后,先输入数字“5”,则(AL)=35H,属于0 到9之间的数字,减30H后,(AL)=05H,扩展后,(AX)=0005H,BX 乘以10后,加上AX中的内容,(BX)=0005H。 然后输入数字“8”,则(AL)=38H,属于0到9 之间的数字,减30H 后,(AL)=38H,扩展后,(AX)=0008H,(BX)乘以10后,加上AX 中的内容,(BX)=0037H,为十进制数“58”的二进制值。 十进制数显示过程如下(被显示的数据<9999): (1)将被显示的内容送入BX中; (2)BX除以1000,余数送BX,商在AL中,范围为0~9; (3)显示AL中的内容; (4)(BX)除以100,余数送BX,商在AL中,范围为0~9; (5)显示AL中的内容。以此类推,直到分离出个位数字为止。 在这里有一个特殊问题需要讨论:例如“53”这个十进制数,除以1000除以100的商都为0,不应显示。为了能够实现高位的“0”不显示,程序中设置一个标志M,初始值都设置为1。若M=1且商为0,则这个0不现实;若M=1且商不为0,则说明这是第一个非0数字,开始显示,并将M设置为0;若M=0,则商值都显示。如果结果本身就是0,则个位的0显示。 二、基本理论 本次汇编语言课程设计的最终目的是要实现一个简单计算器,要求编写一个程序,每运行一次可执行程序,可以实现数的加减乘除四则运算。比如,十进制数的加减乘除四则运算。我们曾经学习过两个具体数字进行加减法运算,但是对于简单计算器用汇编语言实现难点在于这两个要做运算的数是未知的,是由自己调用中断输入到屏幕上并要用程序存储起来的数,然后才能对这两个数进行运

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

微机原理与接口技术软件实验报告

实验B 分支、循环程序设计 一、实验目的 1.开始独立进行汇编语言程序设计; 2.掌握基本分支,循环程序设计; 3.掌握最简单的DOS功能调用。 二、实验任务及内容 1.安排一个数据区,内存有若干个正数,负数和零。每类数的个数都不超过9。 2.编写一个程序统计数据区中正数,负数和零的个数。 3.将统计结果在屏幕上显示。 4. 选作题: 统计出正奇数,正偶数,负奇数,负偶数以及零的个数.

四、源程序 DISPSTR MACRO STR ;打出字符串(属于DOS功能调用)MOV AH,9 MOV DX,SEG STR MOV DS,DX MOV DX,OFFSET STR INT 21H ENDM DISPNUM MACRO NUM ;打出数字(属于DOS功能调用)MOV AH,2 MOV DL,NUM ADD DL,30H ;加30H变为ASCII码 INT 21H ENDM DATA SEGMENT NUM DB 3,2,7,0,1,0,-5,-4,0 COUNT EQU $-NUM ;统计数据个数 ZEROS DB 0 ;各类数初值均为0 PLUSES DB 0 MINUSES DB 0 EVENMINUSES DB 0 ODDMINUSES DB 0 EVENPLUSES DB 0 ODDPLUSES DB 0 ZEROSTR DB 0DH,0AH,'ZERO:$' ;待输出字符串

PLUSSTR DB 0DH,0AH,'PLUS:$' MINUSSTR DB 0DH,0AH,'MINUS:$' EVENMINUSSTR DB 0DH,0AH,'EVENMINUS:$' ODDMINUSSTR DB 0DH,0AH,'ODDMINUS:$' EVENPLUSSTR DB 0DH,0AH,'EVENPLUS:$' ODDPLUSSTR DB 0DH,0AH,'ODDPLUS:$' DATA ENDS STACK SEGMENT STACK 'STACK' DB 100 DUP(?) STACK ENDS CODE SEGMENT ASSUME CS:CODE, DS:DATA, SS:STACK START PROC FAR PUSH DS ;初始化 MOV AX,0 PUSH AX MOV AX,DATA MOV DS,AX MOV CX,COUNT ;CX控制循环次数 MOV SI,OFFSET NUM ;SI指向数据的偏移地址 LOOP1: CMP BYTE PTR[SI],0 ;将SI指向的内容与0比较大小JZ ZERO ;等于0跳转 JG PLUS ;大于0跳转 INC MINUSES ;负数加一 SHR BYTE PTR[SI],1 ;判断是负奇数还是负偶数 JNC EVENMINUS ;是负偶数跳转 INC SI ;SI指针后移 INC ODDMINUSES ;负奇数加一 RETURN: LOOP LOOP1 ;循环直至CX=0 JMP DISP ;循环结束后跳转至打出结果 ZERO: INC ZEROS INC SI JMP RETURN ;返回循环体 PLUS: INC PLUSES SHR BYTE PTR[SI],1 JNC EVENPLUS

北邮微机原理中断程序报告

北京邮电大学实验报告 题目:微机原理软件实验 学院:信息与通信工程 专业:信息工程______ 中断实验报告 一、实验目的 1、初步掌握中断程序的设计方法; 2、初步掌握修改 DOS 系统中断,以适应实际使用的方法。

二:实验要求 编一程序,在显示器上显示时、分、秒。 1:借用计数器8253的Timer0作为中断源,通过8259A下向CPU发中断,每10ms 产生一次中断。 2:在中断服务程序中管理刷新时、分、秒。 3:输入文件名(如:CLK)后清屏显示 Current time is XX:XX:XX(时分秒键盘输入) 打回车,时、分、秒开始计时,时钟不停的刷新。 4:当键入CTRL+C时,停止计时,返回系统,且系统正常运行不死机。 提示: 1、8253的初始化程序段可借用。 2、口地址为40H、41H、42H、43H,控制字为36H=00110110B 3、时间常数TC=11932:1.1932MHz/11932=100Hz,输出方波频率为100Hz,其周期为1000/100=10ms 三:设计思路 这个实验需要用到中断控制器8259A和计数器8253。我们先初始化8253的工作方式,利用工作方式3来计数时间,让其分频后产生100hz的方波,每100个周期即为1s,将这个方波作为中断源,通过8259A每10ms向CPU发出一次中断。然后我们将子程序Timer0的地址(CS以及IP)设置为中断向量,每次中断即执行这个子程序,在这个之程序中编写相应代码,看时间是否到1S,没到则跳出中断,等待下一次(1ms之后)中断到来,到1S则让时间+1并且重置计数值,再加上相应的时间显示程序,这样即可实现时间的自动增加与显示,可以当做一个计时器来用,这即是这个工程的主体部分。 除此之外,还需要一部分程序来实现键盘输入相应时间,这里要注意时间的每一位都有取值方面的要求,这里就要通过一系列的CMP/JMP指令的组合来达到正确输入的效果,将顺序输入的时间存储起来,配合Timer0子程序即可输出当前设置的时间并且实现时间刷新。当然,如果选择不输入时间直接回车的话,程序可以从0开始计时,可以当成一个秒表。 还有一些细节的设计如在计时过程中输入S可以重新设置时间,Ctrl+C可以退出这些也是利用CMP/JMP组合来实现。最后整个程序可以实现以下功能:可以设置开始时间然后自动计时,也可以当做秒表来使用,可以正常退出。 四:实验流程

微机原理与接口技术硬件实验报告

微原硬件实验报告 班级:07118 班 学号:070547 班内序号:26 姓名:杨帆

实验一熟悉实验环境及IO的使用 一,实验目的 1. 通过实验了解和熟悉实验台的结构,功能及使用方法。 2. 通过实验掌握直接使用Debug 的I、O 命令来读写IO 端口。 3. 学会Debug 的使用及编写汇编程序 二,实验内容 1. 学习使用Debug 命令,并用I、O 命令直接对端口进行读写操作, 2.用汇编语言编写跑马灯程序。(使用EDIT 编辑工具)实现功能 A.通过读入端口状态(ON 为低电平),选择工作模式(灯的闪烁方式、速度 等)。 B.通过输出端口控制灯的工作状态(低电平灯亮) 三,实验步骤 1.实验板的IO 端口地址为EEE0H 在Debug 下, I 是读命令。(即读输入端口的状态---拨码开关的状态) O 是写命令。(即向端口输出数据---通过发光管来查看) 进入Debug 后, 读端口拨动实验台上八位拨码开关 输入I 端口地址回车 屏幕显示xx 表示从端口读出的内容,即八位开关的状态ON 是0,OFF 是 1 写端口 输入O 端口地址xx (xx 表示要向端口输出的内容)回车 查看实验台上的发光二极管状态,0 是灯亮,1 是灯灭。 2. 在Debug 环境下,用a 命令录入程序,用g 命令运行 C>Debug -a mov dx, 端口地址 mov al,输出内容 out dx, al

mov ah, 0bh int 21h or al, al jz 0100 int 20h -g 运行查看结果,修改输出内容 再运行查看结果 分析 mov ah, 0bh int 21h or al, al jz 0100 int 20h 该段程序的作用 3.利用EDIT 工具编写汇编写跑马灯程序程序 实现功能 A.通过读入端口状态(ON 为低电平),选择工作模式(灯的闪烁方式、速度等)。 B.通过输出端口控制灯的工作状态(低电平灯亮) C>EDIT 文件名.asm 录入程序 按Alt 键打开菜单进行存盘或退出 编译文件 C>MASM 文件名.asm 连接文件 C>LINK 文件名.obj 运行文件或用Debug 进行调试。 四,程序流程图

北邮微原硬件实验

信息与通信工程学院 微原硬件实验报告 姓名: 班级: 学号: 班内序号: 【一.基本的I/O实验】 实验一 I/O地址译码 一、实验目的 掌握I/O地址译码电路的工作原理。 二、实验原理和内容 1、实验电路如图1-1所示,其中74LS74为D触发器,可直接使用实验台 上数字电路实验区的D触发器,74LS138为地址译码器。译码输出端Y0~Y7在实验台上“I/O地址“输出端引出,每个输出端包含8个地址,Y0:

280H~287H,Y1:288H~28FH,……当CPU执行I/O指令且地址在280H~2BFH范围内,译码器选中,必有一根译码线输出负脉冲。 例如:执行下面两条指令 MOV DX,2A0H OUT DX,AL(或IN AL,DX) Y4输出一个负脉冲,执行下面两条指令 MOV DX,2A8H OUT DX,AL(或IN AL,DX) Y5输出一个负脉冲。 图1-1 利用这个负脉冲控制L7闪烁发光(亮、灭、亮、灭、……),时间间隔通过软件延时实现。 2、接线: Y4/IO地址接 CLK/D触发器 Y5/IO地址接 CD/D触发器 D/D触发器接 SD/D角发器接 +5V Q/D触发器接 L7(LED灯)或逻辑笔 三、硬件接线图及软件程序流程图 1.硬件接线图 2.软件程序流程图

四、源程序 DATA SEGMENT DATA ENDS STACK SEGMENT STACK 'STACK' DB 100H DUP(?) STACK ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACK ;基本框架;延时子程序 DELAY1 PROC NEAR MOV BX,500H PUSH CX LOOP2: MOV CX,0FFFH WAIT1: LOOP WAIT1 DEC BX JNZ LOOP2 POP CX RET DELAY1 ENDP START: MOV CX,0FFFFH ;L7闪烁控制 LOOP1: MOV DX,2A0H ;灯亮 OUT DX,AL CALL DELAY1 MOV DX,2A8H ;灯灭 OUT DX,AL CALL DELAY1 LOOP LOOP1 ;循环闪烁 CODE ENDS END START 五、实验结果 灯L7闪烁 实验二简单并行接口 一、实验目的 掌握简单并行接口的工作原理及使用方法。(选择273进行实验)二、实验原理和内容

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

微机原理软件实验报告

实验二分支,循环程序设计 一、预习题: 1.十进制数0 -- 9 所对应的ASCII 码是什么? 如何将十进制数0 -- 9 在屏幕上显示出来? 答:要屏显0-9的数码,可以调用02h中断,然后将要显示的数码的ASCII码存进DL 里,然后执行INT 21H就可以打印字符。当然,若不只一个数,调用09h中断(显示字符串)更好,但要将DS:DXZ指向要显示的数字在内存中的首地址,并要求以$结束。 2.如何检验一个数为正,为负或为零? 你能举出多少种不同的方法? 答:CMP X,0 检验标志位CF CF=1,X为负数 CF=0接着检验ZF:ZF=1,X为零,ZF=0,X为正数 二、实验目的: 1.开始独立进行汇编语言程序设计; 2.掌握基本分支,循环程序设计; 3.掌握最简单的DOS 功能调用. 三、实验内容: 1.安排一个数据区,内存有若干个正数,负数和零.每类数的个数都不超过9. 2.编写一个程序统计数据区中正数,负数和零的个数. 四、实验源代码 assume cs:code,ds:data data segment buff db 1,2,3,4,5,-1,-2,-3,0,0 ;安排的数据区 string db '>0:' plus db 0 ;用变量plus来存储正数的个数 db 0ah,0dh string1 db '=0:' zero db 0 ;用变量zero来存储零的个数 db 0ah,0dh string2 db '<0:' minus db 0 ;用变量minus来存储负数的个数 db '$' data ends code segment start:movax,data movds,ax mov cx,10 ;初始化,并将CX赋为10,因为共有10个数 mov dx,0 ;将计数器dx,ah初始化为0 mov ah,0 lea bx,buff compare:cmp byte ptr [bx],0 ;取出一个数与0进行比较 jgeplu ;大于等于0,跳至plu执行 inc ah ;小于0,用ah暂存小于0的个数,ah+1 jmp next ;比完后进行下一个数的比较

北邮微原硬件实验报告

2013年微机原理硬件实验报告 学院:信息与通信工程学院班级:2011211104 姓名:

实验一 I/O地址译码 一.实验目的 掌握I/O地址译码电路的工作原理。 二.实验原理和内容 1.实验电路如图1-1所示,其中74LS74为D触发器,可直接使用实验台上数字电路实验区的D触发器,74LS138为地址译码器。 译码输出端Y0~Y7在实验台上“I/O地址“输出端引出,每个输出端包含8个地址,Y0:280H~287H,Y1:288H~28FH,……当CPU执行I/O指令且地址在280H~2BFH范围内,译码器选中,必有一根译码线输出负脉冲。 例如:执行下面两条指令 MOV DX,2A0H OUT DX,AL(或IN AL,DX) Y4输出一个负脉冲,执行下面两条指令 MOV DX,2A8H OUT DX,AL(或IN AL,DX) Y5输出一个负脉冲。 原理:地址2A0H的A5,A4,A5为100,在输入或输出时,IOW或I OR为0,使得74LS138被选中,经过译码,在Y4口输出负脉冲。其他同理。 图1-1 利用这个负脉冲控制L7闪烁发光(亮、灭、亮、灭、……),时间间隔通过软件延时实现。 2.接线:Y4/IO地址接CLK/D触发器

Y5/IO 地址 接 CD/D 触发器 D/D触发器 接 SD/D 角发器 接 +5V Q /D 触发器 接 L7(L ED 灯)或 逻辑笔 三.程序流程图 四.源程序 DA TA ?SE GMENT D ATA ??ENDS ST ACK SE GME NT ST ACK 'STA CK' DB 100H DU P(?) STA CK ENDS 否

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

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

实验报告一:I/0地址译码和简单并行接口 ——实验一&实验二 一、实验目的 掌握I/O地址译码电路的工作原理;掌握简单并行接口的工作原理及使用方法。 二、实验原理及内容 a) I/0地址译码 1、实验电路如图1-1所示,其中74LS74为D触发器,可直接使用实验台上数 字电路实验区的D触发器,74LS138为地址译码器。译码输出端Y0~Y7在实验台上“I/O地址“输出端引出,每个输出端包含8个地址,Y0:280H~ 287H,Y1:288H~28FH,……当CPU执行I/O指令且地址在280H~2BFH范围内,译码器选中,必有一根译码线输出负脉冲。 例如:执行下面两条指令 MOV DX,2A0H OUT DX,AL(或IN AL,DX) Y4输出一个负脉冲,执行下面两条指令 MOV DX,2A8H OUT DX,AL(或IN AL,DX) Y5输出一个负脉冲。 利用这个负脉冲控制L7闪烁发光(亮、灭、亮、灭、……),时间间隔经过软件延时实现。 2、接线: Y4/IO地址接 CLK/D触发器

Y5/IO地址接 CD/D触发器 D/D触发器接 SD/D触发器接 +5V Q/D触发器接L7(LED灯)或逻辑笔 b) 简单并行接口 1、按下面图4-2-1简单并行输出接口电路图连接线路(74LS273插通 用插座,74LS32用实验台上的“或门”)。74LS273为八D触发器, 8个D输入端分别接数据总线D0~D7,8个Q输出端接LED显示电 路L0~L7。 2、编程从键盘输入一个字符或数字,将其ASCⅡ码经过这 个输出接口输出,根据8个发光二极管发光情况验证正确 性。 3、按下面图4-2-2简单并行输入接口电路图连接电路 (74LS244插通用插座,74LS32用实验台上的“或门”)。 74LS244为八缓冲器,8个数据输入端分别接逻辑电平开关 输出K0~K7,8个数据输出端分别接数据总线D0~D7。 4、用逻辑电平开关预置某个字母的ASCⅡ码,编程输入这 个ASCⅡ码,并将其对应字母在屏幕上显示出来。 5、接线:1)输出 按图4-2-1接线(图中虚线为实验所需接线,74LS32为实验 台逻辑或门) 2)输入 按图4-2-2接线(图中虚线为实验所需接线,74LS32为实 验台逻辑或门) 三、硬件连线图 1、I/O地址译码

北邮《微机原理与接口技术》阶段作业汇总

《微机原理与接口技术》作业汇总 1.若欲使RESET有效,只要A即可。 A.接通电源或按RESET键 2.8086微处理器中的ES是D寄存器 D.附加数据段 3.8086 微处理器中BP 寄存器是A A.基址指针寄存器 4.8086/8088 微处理器中的BX是A A.基址寄存器 5.8086/8088微处理器顺序执行程序时,当遇到C指令时, 指令队列会自动复位,BIU会接着往指令队列中装入新的程序段指令。C.JCXZ 6.8086微处理器读总线周期中地址信号AD15~AD0在A期间处于高阻。 A.T2 7.8086/8088 微处理器引脚中B信号线能够反映标志寄 存器中断允许标志IF的当前值。 B.S5 8.访问I/O端口可用地址线有B条。B.16 9.8086/8088 微处理器可访问内存储器地址为A A.00000~FFFFFH 10.字符串操作时目标串逻辑地址只能由B提供 B.ES、DI 11.8086/8088微处理器中堆栈段SS作为段基址,则偏移 量为B。 B.SP 12.若有两个带有符号数ABH和FFH相加,其结果使F 中CF和OF位为C。 C.1;0 13.8086微处理器内部通用寄存器中的指针类寄存器是B。 B.BP 14.8086/8088微处理器内部能够计算出访问内存储器的20位物理地址的附加机构是。B.BIU中的地址加法器15.当标志寄存器TF=1时,微处理器内部每执行完一条 指令便自动进行一次B。B.内部中断 16.8086/8088微处理器内部寄存器中的累加器是A寄存 器。 A.16位数据寄存器 17.8086微处理器中的BIU和EU是处于B的工作状态 B.并行 18.8086中指令队列和堆栈特点分别是C C.先进先出;后进先出 19.微型计算机各部件之间是用A连接起来的。 A.系统总线 20.若把组成计算机中的运算器和控制器集成在一块芯片 上称为C。 C.微处理器 21.相联存储器是指按C进行寻址的存储器。 C.内容指定方式 22.单地址指令中为了完成两个数的算术运算,除地址码 指明的一个操作数外,另一个数常需采用D。 D.隐含寻址方式 23.某存储器芯片的存储容量为8K×12位,则它的地址 线为C。 C.13 24.下列8086指令中,格式错误的是C。 C.MOV CS,2000H 25.寄存器间接寻址方式中,操作数处在C。C.主存单元 26.某计算机字长16位,其存储容量为2MB,若按半字 编址,它的寻址范围是C。 C.2M 27.某一RAM 芯片,其容量为1024×8位,其数据线和 地址线分别为C。 C.8,10 28.CPU在执行OUT DX,AL指令时,A寄存器的内容 送到数据总线上。 A.AL 29.计算机的存储器系统是指D。 D.cache,主存储器和外存储器 30.指令MOV AX, [3070H]中源操作数的寻址方式为C C.直接寻址 31.EPROM是指D D.光擦可编程的只读存储器 32.指令的寻址方式有顺序和跳跃两种方式,采用跳跃寻 址方式,可以实现D.程序的条件转移成无条件转移33.8086 CPU对存贮器操作的总线周期的T1状态, AD0~AD15引脚上出现的信号是A。A.地址信号 34.堆栈是按D组织的存储区域。D.先进后出原则 35.8086/8088中源变址寄存器是A。A.SI 36.8086/8088中SP是D寄存器。D.堆栈指针寄存器 37.8086/8088中FR是A寄存器。A.标志寄存器 38.8086/8088中IP是C寄存器。C.指令指针寄存器 39.假设AL寄存器的内容是ASCII码表示的一个英文字 母,若为大写字母,将其转换为小写字母,否则不变。 试问,下面哪一条指令可以实现此功能A。 A.ADD AL, 20H 40.逻辑右移指令执行的操作是A。 A.符号位填0,并 顺次右移1位,最低位移至进位标志位 41.假设数据段定义如下: DSEG SEGMENT DAT DW 1,2,3,4,5,6,7,8,9,10 CNT EQU ($-DAT)/2 DSEG ENDS 执行指令MOV CX,CNT后,寄存器CX的内容是D D.4 42.在下列段寄存器中,代码寄存器是B。B.CS 43.在执行POP[BX]指令,寻找目的操作数时,段地 址和偏移地址分别是B。B.在DS和BX中 44.设DS=5788H,偏移地址为94H,该字节的物理地址 是B。B.57914H 45.设AX=1000H NEG AX

微波仿真实验报告(北邮)

北京邮电大学 微波仿真实验报告实验名称:微波仿真实验

姓名:刘梦颉 班级:2011211203 学号:2011210960 班内序号:11 日期:2012年12月20日 一、实验目的 1、熟悉支节匹配的匹配原理。 2、了解微带线的工作原理和实际应用。 3、掌握Smith图解法设计微带线匹配网络。 4、掌握ADS,通过SmithChart和Momentum设计电路并仿真出结果。 二、实验要求 1、使用软件:ADS 2、实验通用参数: FR4基片:介电常数为4.4,厚度为1.6mm,损耗角正切为0.02 特性阻抗:50欧姆 3、根据题目要求完成仿真,每题截取1~3张截图。

三、实验过程及结果 第一、二次实验 实验一: 1、实验内容 Linecal的使用(工作频率1GHz) a)计算FR4基片的50欧姆微带线的宽度 b)计算FR4基片的50欧姆共面波导(CPW)的横截面尺寸(中心信号线 宽度与接地板之间的距离) 2、相关截图 (a)根据实验要求设置相应参数

(b)根据实验要求设置相应参数 实验二 1、实验内容 了解ADS Schematic的使用和设置2、相关截图:

打开ADS软件,新建工程,新建Schematic窗口。 在Schematic中的tools中打开lineCalc,可以计算微带线的参数。 3、实验分析 通过在不同的库中可以找到想要的器件,比如理想传输线和微带线器件。在完成电路图后需要先保存电路图,然后仿真。在仿真弹出的图形窗口中,可以绘制Smith图和S参数曲线图。

实验三 1、实验内容 分别用理想传输线和微带传输线在FR4基片上,仿真一段特性阻抗为50欧姆四分之波长开路线的性能参数,工作频率为1GHz。观察Smith圆图变化。 2、相关截图 (1)理想传输线

北邮微原软件实验报告

2013年微机原理软件实验报告 学院:信息与通信工程学院 班级:2011211104 姓名:

实验二分支,循环程序设计 一.实验目的: 1.开始独立进行汇编语言程序设计; 2.掌握基本分支,循环程序设计; 3.掌握最简单的DOS 功能调用 二.实验内容: 1.安排一个数据区,内存有若干个正数,负数和零.每类数的个数都不超过9. 2.编写一个程序统计数据区中正数,负数和零的个数. 3.将统计结果在屏幕上显示. 三.预习题 1.十进制数0 -- 9 所对应的ASCII 码是什么? 如何将十进制数0 -- 9 在屏幕上显示出来? 0-9的ACSII码为,30h,31h,32h,34h,35h,36h,37h,38h,39h, 将要显示的数加上30h,得到该数的ACSII码,再利用DOS功能调用显示单个字符 2.如何检验一个数为正,为负或为零? 你能举出多少种不同的方法? 利用cmp指令,利用TEST指令,将该数与0相与,将该数与0相减,观察标志位。

四.程序流程图

五.源程序 DATA SEGMENT ;数据段 NUM DB 1,2,-2,3,-3,5,2,4,-6,-11,100,0,0,34,-55,-33,0 ;待处理数据COUNT EQU $-NUM ;数据个数 MINUS DB 0 ;小于零的个数 ZERO DB 0 ;等于零的个数 PLUS DB 0 ;大于零的个数 RESULT DB 'NEGNUM=',?,0AH,0DH,'ZERONUM=',?,0AH,0DH,'POSNUM=',?,0AH,0DH,'$' ;结果显示字符串 DATA ENDS STACK SEGMENT STACK 'STACK' ;堆栈段 DW 50 DUP(?) STACK ENDS CODE SEGMENT ;代码段 ASSUME CS:CODE,DS:DATA,SS:STACK START: MOV AX,DATA MOV DS,AX MOV CX,COUNT MOV SI,OFFSET NUM AGAIN: MOV AL,[SI] ;循环比较 CMP AL,0 JGE NEXT1 INC MINUS JMP DONE NEXT1: JZ NEXT2 INC PLUS JMP DONE NEXT2: INC ZERO DONE: INC SI LOOP AGAIN ;返回结果 MOV DI,OFFSET RESULT MOV AL,MINUS ADD AL,30H MOV BYTE PTR[DI+7],AL MOV AL,ZERO ADD AL,30H MOV BYTE PTR[DI+18],AL MOV AL,PLUS ADD AL,30H MOV BYTE PTR[DI+28],AL

8086软硬件实验报告(微机原理与接口技术上机实验)

实验一实验环境熟悉与简单程序设计 实验目的 (1)掌握DEBUG调试程序的使用方法。 (2)掌握简单程序的设计方法。 实验内容 编程将BH中的数分成高半字节和低半字节两部分,把其中的高半字节放到DH中的低4位(高4位补零),把其中的低半字节放到DL中的低4位(高4位补零)。如: BH=10110010B 则运行程序后 DH=00001011B DL=00000010B 实验准备 (1)熟练掌握所学过的指令。 (2)根据实验内容,要求预先编好程序。 实验步骤 (1)利用DEBUG程序输入、调试程序。 (2)按下表要求不断地修改BH的内容,然后记录下DX的内容。 实验报告 (1)给出程序清单。 (2)详细说明程序调试过程。

程序: CODE SEGMENT START : MOV BH,00111111B MOV AL,BH MOV CL,4 SHR AL,CL MOV DH,AL MOV AL,BH AND AL,00001111B MOV DL,AL MOV CL,0 CODE ENDS END START

实验二简单程序设计 实验目的 (3)掌握DEBUG调试程序的使用方法。 (4)掌握简单程序的设计方法。 实验内容 试编写一个汇编语言程序,要求实现功能:在屏幕上显示:Hello world My name is Li Jianguo 参考程序如下:(有错) data segment out1 db 'Hello world' ax db 'My name is Li Jianguo' data ens code segment assume cs:code;ds:data lea dx,out1 mov ah,2 int 21h mov dl,0ah mov ah,2

北邮电磁场与微波实验天线部分实验报告二

北邮电磁场与微波实验天线部分实验报告二

信息与通信工程学院电磁场与微波实验报告

实验二网络分析仪测试八木天线方向图 一、实验目的 1.掌握网络分析仪辅助测试方法; 2.学习测量八木天线方向图方法; 3.研究在不同频率下的八木天线方向图特性。 注:重点观察不同频率下的方向图形状,如:主瓣、副瓣、后瓣、零点、前后比等; 二、实验步骤: (1) 调整分析仪到轨迹(方向图)模式; (2) 调整云台起点位置270°; (3) 寻找归一化点(最大值点); (4) 旋转云台一周并读取图形参数; (5) 坐标变换、变换频率(f600Mhz、900MHz、1200MHz),分析八木天线方向图特性; 三、实验测量图 不同频率下的测量图如下: 600MHz:

900MHz:

1200MHz:

四、结果分析 在实验中,分别对八木天线在600MHz、900MHz、1200MHz频率下的辐射圆图进行了测量,发现频率是900MHz的时候效果是最好的,圆图边沿的毛刺比较少,方向性比较好,主瓣的面积比较大。 当频率为600 MHz的时候,圆图四周的毛刺现象比较严重,当频率上升到1200MHz时,辐射圆图开始变得不规则,在某些角度时出现了很大的衰减,由对称转向了非对称,圆图边缘的毛刺现象就非常明显了,甚至在某些角度下衰减到了最小值。 从整体来看,八木天线由于测量的是无线信号,因此受周围环境的影响还是比较大的,因此在测量的时候周围的人应该避免走动,以减小对天线电磁波的反射从而减小测量带来的误差使得圆图更接近真实情况。 由实验结果分析可知:最大辐射方向基本在90°和270°这条直线上,图中旁瓣均较小,及大部分能量集中在主瓣。 八木天线由于测量的是无线信号,因此受周围环境的影响还是比较大的,因此在测量的时候应当尽量保持周边环境参数一定,以减小对天线电磁波的反射从而减小测量带来的误差使得圆图更接近真实情况。 五、实验总结

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

微机原理与汇编语言 实验报告 姓名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) .code start: mov ax, @data mov ds, ax mov dx, offset inf1 ;将屏幕输入的十进制数(存放于ibuf)转化为二进制数存储于ax 中 mov ah, 09h int 21h mov dx, offset ibuf mov ah, 0Ah int 21h mov cl, ibuf+1 mov ch, 0 mov si, offset ibuf+2 mov ax, 0 loop1: mov dx, 10 mul dx and byte ptr [si], 0Fh add al, [si] 从键盘输入一个十进制数,并将其转换为二进制数,存放在AX中 开始 结束 素、、 (CX)-1=0 累加循环次数送CX(MOV CX,AX)AX清0(AX中存放累加和) BX送1(BX存放每次循环累加的数,每循环一次,BX值加1) ADD AX,BX INC BX 累加和(在AX中)转换为十进制数并 显示 Y N

北邮—微机原理与接口技术(1)

微机原理与接口技术硬件实验报告

目录 1.实验一微机实验平台介绍及IO的使用 (3) 1.1.实验目的 (3) 1.2.实验内容及要求 (3) 1.3.实验环境及背景 (3) 1.4.实验步骤 (4) 1.4.1.使用debug的I、O命令读写端口 (4) 1.4.2.使用文本编辑器edit和编译器masm (5) 1.5.思考题 (11) 1.6.心得体会 (11) 参考资料 (12) 声明与致谢 (12)

1.实验一微机实验平台介绍及IO的使用 1.1.实验目的 1.1.1通过实验了解和熟悉实验台的结构,功能及使用方法; 1.1.2通过实验掌握直接使用debug的I、O命令来读写IO端口; 1.1.3学会debug的使用及编写汇编程序。 1.2.实验内容及要求 1.2.1学习使用debug命令,并用I、O命令直接对端口进行读写操作, 1.2.2用汇编语言编写跑马灯程序。(可以使用EDIT编辑工具。)要求实现以下两个功能:A.通过读入端口状态(ON为低电平),选择工作模式(灯的闪烁方式、速度等);B.通过输出端口控制灯的工作状态(低电平灯亮)。 1.2.3使用时要注意,电源打开时不得插拔电缆及各种器件,一定要在断电的情况下连接电路,否则可能会烧坏整个实验系统。 1.3.实验环境及背景 我们使用PCI_IDE50扁平电缆将PC机与实验扩展模块连接起来。在扩展实验平台上,有八个发光二极管、八个拨码开关。读取拨码开关和写发光二极管的端口地址已经被做成了0E8E0h。连接的PC机上安装有DOS操作系统,并有MASM5开发工具。

图1扩展实验模块 1.4.实验步骤 1.4.1.使用debug的I、O命令读写端口 进入DOS,在命令行模式下输入命令debug,用-a选项写入下列程序:CODE (debug mode) MOV DX, E8E0 MOV AL, FE OUT DX, AL MOV AH, 0B INT 21 OR AL, AL JZ 0100 INT 20 输入结束后,直接输入回车即可推出-a。然后,用-g选项运行程序,查看结果。发现最右边的LED亮,其他不亮。修改输出内容,再运行查看结果,可以发现:当输出位对应为1时,灯灭;输出为0时,灯亮。 下面,我们来分析一下以下这段程序的作用。

北京理工大学自动化专业微机原理硬件软件实验

微机原理与接口技术 硬件实验报告 班级: 姓名: 学号: 实验一: 8259中断控制器实验 一、实验目的 1. 掌握8259的工作原理。 2. 掌握编写中断服务程序的方法。 3. 掌握初始化中断向量的方法。 二、实验内容 用单脉冲发生器的输出脉冲为中断源,每按一次产生一次中断申请,点亮或熄灭发光二极管。 三、实验设备 微机实验教学系统实验箱、8086CPU模块 四、连线 ①单脉冲发生器输出P+与8259的IR0相连 ②8259的片选CS8259与CS0相连 ③8259的INT与8086的INT相连 ④8259的INTA与8086的INTA相连 ⑤CS273与CS1相连 ⑥00与LED1相连 其它线均已连好如下图: 五、实验步骤 (1)连线。 (2)编辑程序,编译链接后,调试程序。 (3)调试通过后,在中断服务程序内设置断点,运行程序,当接收到中断请求后,程序停在中断服务程序内的断点处。 (4)撰写实验报告。

六、实验源程序 CODE SEGMENT PUBLIC ASSUME CS:CODE ORG 100H START: MOV DX,4A0H ;写ICW1 MOV AX,13H OUT DX,AX MOV DX,4A2H ;写ICW2 MOV AX,80H ;IR0的中断向量码为80H OUT DX,AX MOV AX,01 OUT DX,AX ;一般嵌套,非缓冲,非自动EOI MOV AX,0 ;写OCW1 OUT DX,AX ;允许中断 ;中断向量存放在(0000H:0200H)开始的四个单元里 MOV AX,0 MOV DS,AX MOV SI,200H ;中断类型号为80H MOV AX,OFFSET HINT ;中断服务程序的入口地址 MOV DS:[SI],AX ADD SI,2 MOV AX,CS MOV DS:[SI],AX STI ;开中断,设置IF=1 JMP $ ;原地跳转 HINT: ;中断服务程序 XOR CX,0FFH ;CX取反 MOV DX,4B0H ;CS273接口的地址,与8个LED灯相连 MOV AX,CX ;输出高低电平控制LED灯的亮灭 OUT DX,AX MOV DX,4A0H ;OCW2的地址 MOV AX,20H ;一般EOI命令,全嵌套方式 OUT DX,AX IRET ;中断返回 CODE ENDS END START 七、实验思考题 1.将P+连线连接到IR1—IR7任意一个;重新编写程序。 将P+接到IR1,在原程序的基础上,把写ICW2的控制字改为81H,再把中断向量的入口地址改为0204H即可。程序如下: CODE SEGMENT PUBLIC ASSUME CS:CODE

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

北京邮电大学 微机原理软件实验·第三次实验

题目一: 一、实验目的 1、初步掌握中断程序的设计方法; 2、初步掌握修改DOS 系统中断,以适应实际使用的方法。 二、实验内容 编一程序,在显示器上显示时、分、秒。借用计数器8253的Timer0作为中断源,通过8259A向CPU发中断,每10ms产生一次中断。在中断服务 程序中管理刷新时、分、秒。 要求: 1、输入文件名(如:CLK)后清屏后显示: 2、Current time is: xx:xx:xx(时分秒键盘输入) 3、打回车,时、分、秒开始计时。时钟不停的刷新。 4、当键入CTRL+C时,停止计时,返回系统,且系统正常运行不死机。 提示: 8253的初始化程序段可借用。口地址为40H、41H、42H、43H,控制字为36H=00110110B,时间常数TC=11932:1.1932MHz/11932=100Hz, 输出方波频率为100Hz,其周期为1000/100=10ms。 三、设计思路 1、程序流程图 开始 定义数据段和堆栈段 保存源中断向量 将timer子程序地址设 置为中断向量 设置8253工作状态, 使其输出方波100Hz 设置8259A工作状态 输出一条提示信息, 要求用户设定时间 判断设定时间是 否符合规范否 输出一条 错误信息 是 显示字符串:“Now the time is:” 判断内存中的时 间是否被修改 是 重新在屏幕上打印时 间 否 判断键盘缓冲区有无 按键按下 回车是否按下是秒表功能 否 判断“S”是 否按下 是 否 判断Ctrl+C 是否按下 是 退出程序 否

2、中断子程序流程图 子程序开始 记下进入中断 的次数 判断次数 是否为100 是 计数清零,修 改内存中存储 的时间 查看是否 否 有进位 进位调整 结束 3、可能用到的指令 ①STI 置中断允许位. CLI 清中断允许位. 格式:CLI STI 功能:开关中断允许标志,用于在程序中防止中断嵌套,设置中断。 ②STOS(STOre into String) 存入串指令 格式:STOS DST STOSB //存放字节串( DI ) = AL STOSW //存放字串( DI ) = AX 执行操作:把AL或AX中的内容存放由DI指定的附加段的字节或字 单元中,并根据DF值修改及数据类型修改DI的内容。 字节操作:((DT))←(AL),(DI)←(DI)±1

相关主题
文本预览
相关文档 最新文档