当前位置:文档之家› 华工微机实验报告-实验四-子程序的调用

华工微机实验报告-实验四-子程序的调用

华工微机实验报告-实验四-子程序的调用
华工微机实验报告-实验四-子程序的调用

实验报告课程名称微型计算机原理及其应用

实验项目子程序设计

学生姓名朱轲信

学生学号201530281598

专业/班级信息工程冯秉铨实验班

实验成绩

电子与信息学院实验中心制

二〇一七年版

预习报告

一、实验目的

1、学习子程序的定义和调用方法。

2、掌握子程序、子程序嵌套的结构。

3、掌握子程序的程序设计、编制及调试方法。

二、实验设备

微机一台、TDS-MD微机一台

三、实验内容及步骤

程序采用菜单式选择,可接收用户输入的命令(1~5),各命令如下:

按1键完成字符串小写字母变大写字母

用户输入一由英文大小写字母或数字0~9组成的字符串(以回车结束),程序逐个检查字符串中各字符,将原串中小写字母变成大写字母,其它字符不变,并在屏幕上显示。用户按任一键,重做,按ESC键,返回主菜单。

按2键完成找最大值(二选一)

1、接收用户输入的可显示字符串(以回车结束),程序将其中ASCII 码值最大的字符显示出来。

2、接收用户输入若干无符号8位数(以空格或逗号为分隔符,以回车结束),程序将其中最大的数显示出来。用户按任一键,重做,按ESC 键,返回主菜单。

按3键完成排序(二选一)

1、接收用户输入的可显示字符串,以回车结束。程序按ASCII码值大小由大到小排序并输出显示。

2、接收用户输入若干个有符号8位数(以空格逗号为分隔符,以回车结束)。程序将其中最大的数显示出来。用户按任一键,重做,按ESC 键,返回主菜单。

按4键显示时间

首先提示用户对时,即用户输入时,分,秒(以空格或冒号分隔,以回车结束),然后,在屏幕上不断显示时间,格式为:××(时):××(分):××(秒),最好定点显示。用户按任一键,重新对时,按ESC 键,返回主菜单。

按5键,结束程序运行,返回系统提示符。

四、流程图与程序代码

流程图:

流程图1—主菜单

流程图2--过程一流程图3—过程二

流程图4—过程三 流程图5—过程四 代码:

STACK SEGMENT STACK 'STACK' DW 100 DUP(?) TOP LABEL WORD STACK ENDS

DATA SEGMENT ORG 3500H

;数据段主要保存一些字符串以及定义一些字符串变量 COPYRIGHT

DB

'-------ALL

PROGRAMED

BY

@MRZHU--------',0DH,0AH,'$'

COMMON DB 'Please input 1 to 5 to select a function',0DH,0AH,'$'

S1 DB '1.Input a string,then convert the small letters to big letters',0DH,0AH,'$'

S2 DB '2.Find the biggest-ASCII-code character',0DH,0AH,'$'

S3 DB '3.Sort the character by ASCII code by decreasing order',0DH,0AH,'$'

S4 DB '4.display the ticking time',0DH,0AH,'$'

S5 DB '5.Exit the program',0DH,0AH,'$'

CR_LF DB 0DH,0DH,'$'

IN_MAIN DB 'Now input a number(1-5): ','$'

MAIN_ERROR DB 0DH,0AH,'ERROR:Please input a correct number;',0DH,0AH,'$'

PRO_1_S1 DB 0DH,0AH,'Now input a string(number or letter):',0DH,0AH,'$'

PRO_1_S2 DB 0DH,0AH,'The string has been changed to: ','$' PRO_2_S1 DB 0DH,0AH,'Now input a string(any symbol): ',0DH,0AH,'$'

PRO_2_S2 DB 0DH,0AH,'The biggest-ASCII-code symbol is: ','$'

PRO_3_S1 DB 0DH,0AH,'Now input a string(any symbol): ',0DH,0AH,'$'

PRO_3_S2 DB 0DH,0AH,'The string has been sorted: ','$' PRO_4_S1 DB 0DH,0AH,'Setting time (XX:XX:XX ): ',0DH,0AH,'$'

PRO_4_S2 DB 0DH,0AH,'SETTING DONE! ',0DH,0AH,'$'

PRO_4_S3 DB 0DH,0AH,'TIME_NOW(Press any key to stop): ',0DH,0AH,'$'

PRO_4_ERROR_LEN DB 0DH,0AH,'!!ERROR(Length overflow): Please input in the correct format!',0DH,0AH,'$' PRO_4_ERROR_NOT_NUM DB 0DH,0AH,'!!ERROR(Not number or not ":"): Please input in the correct format!',0DH,0AH,'$' PRO_4_ERROR_NUM_OVER DB 0DH,0AH,'!!ERROR(Number overflow): Please input the correct number!',0DH,0AH,'$' PRO_END_S DB 0DH,0AH,'Press any key to continue except

ESC',0DH,0AH,'$'

STRING1 DB 50

DB ?

DB 50 DUP(?)

STRING2 DB 50

DB ?

DB 50 DUP(?)

STRING3 DB 50

DB ?

DB 50 DUP(?)

STRING4 DB 50

DB ?

DB 50 DUP(?)

DATA ENDS

CODE SEGMENT

MAIN PROC FAR

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

START:

MOV AX,STACK

MOV SS,AX

MOV SP,OFFSET TOP

PUSH DS

SUB AX,AX

PUSH AX ;初始化堆栈

MOV AX,DATA

MOV DS,AX

MENU:

MOV DX,OFFSET COPYRIGHT

MOV AH,9

INT 21H

MOV DX,OFFSET COMMON

MOV AH,9

INT 21H

MOV DX,OFFSET S1

MOV AH,9

INT 21H

MOV DX,OFFSET S2

MOV AH,9

INT 21H

MOV DX,OFFSET S3

MOV AH,9

INT 21H

MOV DX,OFFSET S4

MOV AH,9

INT 21H

MOV DX,OFFSET S5

MOV AH,9

INT 21H

MOV DX,OFFSET CR_LF

MOV AH,9

INT 21H

IN_A_NUM:

MOV DX,OFFSET IN_MAIN

MOV AH,9

INT 21H ;显示主菜单信息

MOV AH,01H

INT 21H ;输入一个字符

CMP AL,'1'

JE P1

CMP AL,'2'

JE P2

CMP AL,'3'

JE P3

CMP AL,'4'

JE P4

CMP AL,'5'

JE P5_EXIT ;判断输入的字符并跳转

MOV DX,OFFSET MAIN_ERROR

MOV AH,9

INT 21H

JMP IN_A_NUM ;其他字符时输出提醒并跳转到重新输入P1:

CALL PRO_1

MOV DX,OFFSET CR_LF

MOV AH,9

INT 21H ;换行

JMP MENU

P2:

CALL PRO_2

MOV DX,OFFSET CR_LF

MOV AH,9

INT 21H ;换行

JMP MENU

P3:

CALL PRO_3

MOV DX,OFFSET CR_LF

MOV AH,9

INT 21H ;换行

JMP MENU

P4:

CALL PRO_4

MOV DX,OFFSET CR_LF

MOV AH,9

INT 21H ;换行

JMP MENU

P5_EXIT:

RET ;返回DOS

MAIN ENDP ;MAIN段结束

PRO_1 PROC NEAR ;过程一

PRO_1_START:

MOV DX,OFFSET PRO_1_S1

MOV AH,9

INT 21H ;输出提示语

MOV DX,OFFSET STRING1

MOV AH,0AH

INT 21H ;把STRING1的字符串首地址给DX,输入一个字符串

MOV CX,0

MOV CL,STRING1[1]

MOV BX,1

LOOP1: ;循环,将小写字母改为大写

INC BX

MOV AL,STRING1[BX]

CMP AL,61H

JB NEXT1

CMP AL,7AH

JA NEXT1

SUB AL,20H

MOV STRING1[BX],AL

NEXT1:

LOOP LOOP1

INC BX

MOV STRING1[BX],'$'

MOV DX,OFFSET PRO_1_S2

MOV AH,9

INT 21H ;输出提示的句子

MOV DX,OFFSET STRING1[2]

MOV AH,9

INT 21H ;输出改变后的字符串

MOV DX,OFFSET CR_LF

MOV AH,9

INT 21H ;换行

MOV DX,OFFSET PRO_END_S ;输出通用结束提示语

MOV AH,9

INT 21H

MOV AH,01H

INT 21H ;输入一个字符,实现跳转的判断

CMP AL,1BH

JE NEXT1_2

JMP PRO_1_START ;如果是ESC则不跳转到子程序开头,是则跳转

NEXT1_2:

RET

PRO_1 ENDP

PRO_2 PROC NEAR ;过程二

PRO_2_START:

MOV DX,OFFSET PRO_2_S1 ;输出提示语

MOV AH,9

INT 21H

MOV DX,OFFSET STRING2 ;把STRING2的字符串首地址给DX,接收一个字符串

MOV AH,0AH

INT 21H

MOV CX,0

MOV CL,STRING2[1]

MOV BX,1

MOV AL,0

LOOP2:

INC BX

CMP AL,STRING2[BX]

JAE NEXT2_1 ;AL大于等于字符ASCII值时跳转

MOV AL,STRING2[BX]

NEXT2_1:

LOOP LOOP2

INC BX

MOV SI,BX ;把BX的值放到SI,也就是指向回车的位置

MOV BL,AL ;把AL放到BL,防止中断指令时破坏AL

MOV DX,OFFSET PRO_2_S2

MOV AH,9

INT 21H ;输出提示语

MOV DL,BL

MOV AH,2

INT 21H ;显示最大ASCII的字符

MOV DX,OFFSET PRO_END_S ;输出通用结束提示语

MOV AH,9

INT 21H

MOV AH,01H

INT 21H ;输入一个字符,实现跳转的判断

CMP AL,1BH

JE NEXT2_2

JMP PRO_2_START ;如果是ESC则不跳转到子程序开头,是则跳转

NEXT2_2:

RET

PRO_2 ENDP

PRO_3 PROC NEAR ;过程三

PRO_3_START:

MOV DX,OFFSET PRO_3_S1 ;输出提示语

MOV AH,9

INT 21H

MOV DX,OFFSET STRING3 ;把STRING3的字符串首地址给DX,接收一个字符串

MOV AH,0AH

INT 21H

MOV CX,0

MOV CL,STRING3[1] ;把字符串里字符个数赋给CX

DEC CX ;实际比较的次数为CX-1

CMP CX,0

JE NO_SORTED

LOOP3_1: ;下面的LOOP3_1是冒泡排序

MOV BX,CX ;把CX的值存到BX,防止内层循环破坏CX MOV SI,2

LOOP3_2:

MOV AL,STRING3[SI]

CMP AL,STRING3[SI+1]

JAE NEXT3_1

XCHG AL,STRING3[SI+1]

XCHG AL,STRING3[SI]

NEXT3_1:

INC SI

LOOP LOOP3_2

MOV CX,BX

LOOP LOOP3_1

NO_SORTED:

MOV BX,0

MOV BL,STRING3[1];

ADD BL,2

MOV STRING3[BX],'$' ;将$存入改变后的字符串以作结束标志MOV DX,OFFSET PRO_3_S2 ;输出提示语

MOV AH,9

INT 21H

MOV DX,OFFSET STRING3[2] ;输出改变后的字符串

MOV AH,9

INT 21H

MOV DX,OFFSET PRO_END_S ;输出通用结束提示语

MOV AH,9

INT 21H

MOV AH,01H

INT 21H ;输入一个字符,实现跳转的判断

CMP AL,1BH

JE NEXT3_2

JMP PRO_3_START ;如果是ESC则不跳转到子程序开头,是则跳转

NEXT3_2:

RET

PRO_3 ENDP

PRO_4 PROC NEAR ;过程四

PRO_4_START:

MOV DX,OFFSET PRO_4_S1 ;输出提示语

MOV AH,9

INT 21H

MOV DX,OFFSET STRING4 ;把STRING4的字符串首地址给DX,接收一个字符串

MOV AH,0AH

INT 21H

MOV BX,0

MOV BL,STRING4[1];

ADD BL,2

MOV STRING4[BX],'$' ;将$存入改变后的字符串以作结束标志CALL PRO_4_IFERROR ;调用判断子程序来判断是否输入了正确的格式

CMP BX,0

JE PRO_4_ERROR_1 ;BX=0则为长度溢出

CMP BX,1

JE PRO_4_ERROR_2 ;BX=1则输入的字符有误

JMP PRO_4_NO_ERROR

PRO_4_ERROR_1:

MOV DX,OFFSET PRO_4_ERROR_LEN ;输出提示语

MOV AH,9

INT 21H

JMP PRO_4_START

PRO_4_ERROR_2:

MOV DX,OFFSET PRO_4_ERROR_NOT_NUM ;输出提示语

MOV AH,9

INT 21H

JMP PRO_4_START

PRO_4_NO_ERROR: ;下面各段把时间的ASCII转为无符号数,并判断

MOV BH,STRING4[2] ;对时的处理

MOV BL,STRING4[3]

SUB BH,30H

SUB BL,30H

MOV AL,BH

MOV DL,10

MUL DL

MOV BH,AL ;BH乘以10

ADD BH,BL ;BH+BL->BH将ASCII转换成无符号数

CMP BH,0

JB PRO_4_EOOOR_NUM_HR

CMP BH,24

JA PRO_4_EOOOR_NUM_HR

JMP PRO_4_NOERROR_NUM_HR

PRO_4_EOOOR_NUM_HR:

MOV DX,OFFSET PRO_4_ERROR_NUM_OVER ;输出提示语

MOV AH,9

INT 21H

JMP PRO_4_START

PRO_4_NOERROR_NUM_HR:

MOV CH,BH ;把BH值放入CH,即设置时的入口参数

MOV BH,STRING4[5] ;对分的处理

MOV BL,STRING4[6]

SUB BH,30H

SUB BL,30H

MOV AL,BH

MOV DL,10

MUL DL

MOV BH,AL ;BH乘以10

ADD BH,BL ;BH+BL->BH将ASCII转换成无符号数

CMP BH,0

JB PRO_4_EOOOR_NUM_MIN

CMP BH,60

JA PRO_4_EOOOR_NUM_MIN

JMP PRO_4_NOERROR_NUM_MIN

PRO_4_EOOOR_NUM_MIN:

MOV DX,OFFSET PRO_4_ERROR_NUM_OVER ;输出提示语

MOV AH,9

INT 21H

JMP PRO_4_START

PRO_4_NOERROR_NUM_MIN:

MOV CL,BH ;把BH值放入CL,即设置分的入口参数

MOV BH,STRING4[8] ;对秒的处理

MOV BL,STRING4[9]

SUB BH,30H

SUB BL,30H

MOV AL,BH

MOV DL,10

MUL DL

MOV BH,AL ;BH乘以10

ADD BH,BL ;BH+BL->BH将ASCII转换成无符号数CMP BH,0

JB PRO_4_EOOOR_NUM_SEC

CMP BH,60

JA PRO_4_EOOOR_NUM_SEC

JMP PRO_4_NOERROR_NUM_SEC

PRO_4_EOOOR_NUM_SEC:

MOV DX,OFFSET PRO_4_ERROR_NUM_OVER ;输出提示语

MOV AH,9

INT 21H

JMP PRO_4_START

PRO_4_NOERROR_NUM_SEC:

MOV DH,BH ;把BH值放入DH,即设置秒的入口参数MOV DL,0 ;初始化1/100秒

MOV AH,2DH

INT 21H ;设置时间

MOV DX,OFFSET PRO_4_S2 ;输出提示语

MOV AH,9

INT 21H

MOV DX,OFFSET PRO_4_S3 ;输出提示语

MOV AH,9

INT 21H

LOOP4_1: ;循环显示时间

MOV AH,2CH

INT 21H ;获取系统时间,CH:CL:DH:DL H:M:S:1/100S

Time_set: ;十六进制转ASCII码

MOV AX,0 ;时

MOV AL,CH

MOV BL,10

DIV BL

ADD AL,30H ;时的高位

ADD AH,30H ;时的低位

MOV STRING4[2],AL

MOV STRING4[3],AH

MOV AX,0 ;分

MOV AL,CL

MOV BL,10

DIV BL

ADD AL,30H ;高位

ADD AH,30H ;低位

MOV STRING4[5],AL

MOV STRING4[6],AH

MOV AX,0 ;秒

MOV AL,DH

MOV BL,10

DIV BL

ADD AL,30H ;高位

ADD AH,30H ;低位

MOV STRING4[8],AL

MOV STRING4[9],AH

MOV DX,OFFSET STRING4[2]

MOV AH,9

INT 21H

MOV DL,0DH ;换行,便于下次显示

MOV AH,02H

INT 21H

MOV AH,0BH

INT 21H

CMP AL,0

JE LOOP4_1

MOV DX,OFFSET PRO_END_S ;输出通用结束提示语

MOV AH,9

INT 21H

MOV AH,01H

INT 21H ;输入一个字符,实现跳转的判断

CMP AL,1BH

JE NEXT4_10

JMP PRO_4_START ;如果是ESC则不跳转到子程序开头,是则跳转

NEXT4_10:

RET

PRO_4 ENDP

PRO_4_IFERROR PROC NEAR

MOV BX,2

CMP STRING4[1],8

JZ NEXT4_1

MOV BX,0 ;用BX保存错误类型,并返回

RET

NEXT4_1:

CMP STRING4[2],30H ;检查第一个数字

CMP STRING4[2],39H

JA NEXT4_2_NO_NUM

JMP NEXT4_2

NEXT4_2_NO_NUM:

MOV BX,1

RET

NEXT4_2:

CMP STRING4[3],30H ;检查第二个数字JB NEXT4_3_NO_NUM

CMP STRING4[3],39H

JA NEXT4_3_NO_NUM

JMP NEXT4_3

NEXT4_3_NO_NUM:

MOV BX,1

RET

NEXT4_3:

CMP STRING4[4],3AH ;检查引号

JE NEXT4_4

MOV BX,1

RET

NEXT4_4:

CMP STRING4[5],30H ;检查第三个数字JB NEXT4_5_NO_NUM

CMP STRING4[5],39H

JA NEXT4_5_NO_NUM

JMP NEXT4_5

NEXT4_5_NO_NUM:

MOV BX,1

RET

NEXT4_5:

CMP STRING4[6],30H ;检查第四个数字JB NEXT4_6_NO_NUM

CMP STRING4[6],39H

JMP NEXT4_6

NEXT4_6_NO_NUM:

MOV BX,1

RET

NEXT4_6:

CMP STRING4[7],3AH ;检查引号

JE NEXT4_7

MOV BX,1

RET

NEXT4_7:

CMP STRING4[8],30H ;检查第五个数字JB NEXT4_8_NO_NUM

CMP STRING4[8],39H

JA NEXT4_8_NO_NUM

JMP NEXT4_8

NEXT4_8_NO_NUM:

MOV BX,1

RET

NEXT4_8:

CMP STRING4[9],30H ;检查第六个数字JB NEXT4_9_NO_NUM

CMP STRING4[9],39H

JA NEXT4_9_NO_NUM

JMP NEXT4_9

NEXT4_9_NO_NUM:

MOV BX,1

RET

NEXT4_9:

RET

PRO_4_IFERROR ENDP

CODE ENDS

END MAIN ;程序结束

微机系统实验报告

西安电子科技大学 实验报告

实验一汇编语言编程实验 一、实验目的 (1)掌握汇编语言的编程方法 (2)掌握 DOS 功能调用的使用方法 (3)掌握汇编语言程序的调试运行过程 二、实验设备 PC 机一台。 三、实验内容 1. 将指定数据区的字符串数据以ASCII码形式显示在屏幕上,并通过DOS功能调用完成必要提示信息的显示。 2. 在屏幕上显示自己的学号姓名信息。 3. 循环从键盘读入字符并回显在屏幕上,然后显示出对应字符的ASCII码,直到输入”Q”或“q”时结束。 4. 自主设计输入显示信息,完成编程与调试,演示实验结果。 四、实验源码 DA TA SEGMENT DISCHA DB'WangHan 14030188004',0AH,0DH,'$' TAB DB' ',0AH,0DH,'$' BLANK DB' $' DA TA ENDS STACK SEGMENT STACK ENDS CODE SEGMENT ASSUME CS:CODE,DS:DA TA,SS:STACK START: MOV AX,SEG DISCHA MOV DS,AX MOV DX,OFFSET DISCHA MOV AH,09H INT 21H NEXT: MOV AH,01H INT 21H CMP AL,'Q' JE ENDSS

CMP AL,'q' JE ENDSS MOV BL,AL MOV AX,SEG BLANK MOV DS,AX MOV DX,OFFSET BLANK MOV AH,09H INT 21H MOV BH,0AH MOV DL,BL MOV CL,04H SHR DL,CL CMP DL,BH JNL Q3 JMP Q2 Q1: ADD DL,07H Q2: ADD DL,30H MOV AH,02H INT 21H MOV DL,BL MOV DH,0FH AND DL,DH CMP DL,BH JNL Q3 JMP Q4 Q3: ADD DL,07H Q4: ADD DL,30H MOV AH,02H INT 21H MOV AX,SEG TAB MOV DS,AX MOV DX,OFFSET TAB MOV AH,09H INT 21H MOV CX,0009H LOOP NEXT

微机组装实验报告

学生姓名班级学号 所在院系专业 日期 2013年12月16日

计,但也需要使用一定的力量,用户需要特别注意。除此之外,很多P4主板同时还具备了专为CPU 供电的4针供电接口,防呆式设计可以让我们很方便地进行连接。)7. 机箱连线的安装(几乎所有的机箱前面板都有电源键,重启键,电源指示灯等,要想正常工作就必须把机箱内部的连接正确插接在主板上。)8.显卡的安装(当前主流显卡大多采用PCI-E 接口设计,这个与主板上灰褐色的插槽相对应,显卡安装时,应该先试着把有金手指的那面插入,然后双手平行向下按下。)9.硬盘的安装(硬盘的安装位置要看准了,它通常在机箱内部的3.5英寸驱动器安装位上。)10.灌区的安装(首先拆掉5英寸的驱动挡板,然后把光驱内部平行送入。)11.数据线的连接(硬盘和灌区等IDE 设备的连接就稍微复杂一点,连接数据线之前要注意:如果只有一个硬盘和光驱,最好将这两个设备都设置为主盘,如果有两个,需要把多出来的那个硬盘或光驱设置为从盘。)12.电源线的连接(硬盘,光驱,软驱及他们与主板之间的数据连接好以后,要保证这些设备正常运行,当然少不了为他们连接电源线。)13. 机箱挡板的安装14.机箱的外部连接 开机检测 、管路敷设技术,要求技术交底。管线敷设技术中包含线槽、管架等多项方式,为解决高中语文电气课件中管壁薄、接口不严等问题,合理利用管线敷设技术。线缆敷设原则:在分线盒处,当不同电压回路交叉时,应采用金属隔板进行隔开处理;同一线槽内,强电回路须同时切断习题电源,线缆敷设完毕,要进行检查和检测处理。、电气课件中调试试方案,编写重要设备高中资料试卷试验方案以及系统启动方案;对整套启动过程中高中资料试卷电气设备进行调试工作并且进行过关运行高中资料试卷技术指导。对于调试过程中高中资料试卷技术问题,作为调试人员,需要在事前掌握图纸资料、设备制造厂家出具高中资料试卷试验报告与相关技术资料,并且了解现场设备高中资料试卷布置情况与有关高中资料试卷电气系统接线等情况,然后根据规范与规程规定,制定设备调试高中资料试卷方案。、电气设备调试高中资料试卷技术误高中资料试卷保护装置动作,并且拒绝动作,来避免不必要高中资料试卷突然停机。因此,电力高中资料试卷保护装置调试技术,要求电力保护装置做到准确灵活。对于差动保护装置高中资料试卷调试技术是指发电机一变压器组在发生内部故障时,需要进行外部电源高中资料试卷切除从而采用高中资料试卷主要保护装置。

计算机操作系统 实验报告

操作系统实验报告 学院:计算机与通信工程学院 专业:计算机科学与技术 班级: 学号: 姓名: 指导教师: 成绩: 2014年 1 月 1 日

实验一线程的状态和转换(5分) 1 实验目的和要求 目的:熟悉线程的状态及其转换,理解线程状态转换与线程调度的关系。 要求: (1)跟踪调试EOS线程在各种状态间的转换过程,分析EOS中线程状态及其转换的相关源代码; (2)修改EOS的源代码,为线程增加挂起状态。 2 完成的实验内容 2.1 EOS线程状态转换过程的跟踪与源代码分析 (分析EOS中线程状态及其转换的核心源代码,说明EOS定义的线程状态以及状态转换的实现方法;给出在本部分实验过程中完成的主要工作,包括调试、跟踪与思考等) 1.EOS 准备了一个控制台命令“loop ”,这个命令的命令函数是 ke/sysproc.c 文件中的ConsoleCmdLoop 函数(第797行,在此函数中使用 LoopThreadFunction 函数(第755 行)创建了一个优先级为 8 的线程(后面简称为“loop 线程”),该线程会在控制台中不停的(死循环)输出该线程的ID和执行计数,执行计数会不停的增长以表示该线程在不停的运行。loop命令执行的效果可以参见下图: 2. 线程由阻塞状态进入就绪状态 (1)在虚拟机窗口中按下一次空格键。 (2)此时EOS会在PspUnwaitThread函数中的断点处中断。在“调试”菜单中选择“快速监视”,在快速监视对话框的表达式编辑框中输入表达式“*Thread”,然后点击“重新计算”按钮,即可查看线程控制块(TCB)中的信息。其中State域的值为3(Waiting),双向链表项StateListEntry的Next和Prev指针的值都不为0,说明这个线程还处于阻塞状态,并在某个同步对象的等待队列中;StartAddr域的值为IopConsoleDispatchThread,说明这个线程就是控制台派遣线程。 (3)关闭快速监视对话框,激活“调用堆栈”窗口。根据当前的调用堆栈,可以看到是由键盘中断服务程序(KdbIsr)进入的。当按下空格键后,就会发生键盘中断,从而触发键盘中断服务程序。在该服务程序的最后中会唤醒控制台派遣线程,将键盘事件派遣到活动的控制台。 (4)在“调用堆栈”窗口中双击PspWakeThread函数对应的堆栈项。可以看到在此函数中连续调用了PspUnwaitThread函数和PspReadyThread函数,从而使处于阻塞状态的控制台派遣线程进入就绪状态。 (5)在“调用堆栈”窗口中双击PspUnwaitThread函数对应的堆栈项,先来看看此函数是如何改变线程状态的。按F10单步调试直到此函数的最后,然后再从快速监视对

南理工微机实验报告

《微机原理与接口技术》课程 实验报告 班级:9131042101

实验一:系统认识与显示 一、实验目的 (1)掌握TD系列微机原理及接口技术教学实验系统的操作,熟悉Wmd86联机集成开发调试软件的操作环境。 (2)掌握汇编语言中与数据有关的不同的寻址方式。 (3)掌握在PC机上以十六进制形式显示数据的方法。 二、实验设备 PC机一台、微机原理实验仪一套 三、实验内容 编写程序,将31H~3FH共16个数写入内存3000H开始的16个存储单元中,将数据传送到4000H开始的16个存储单元中,并显示出来。 四、实验过程 1.运行Wmd软件,进入Wmd集成开发环境。 2.编写实验程序,并进行编译、链接和加载,观察运行结果。 五、实验程序 STACKK SEGMENT STACK DW 256 DUP(?) STACKK ENDS DATA SEGMENT DATA ENDS CODE SEGMENT ASSUME CS:CODE,SS:STACKK START: PUSH DS XOR AX,AX MOV DS,AX MOV SI,3000H MOV CX,10H MOV AL,30H L1: MOV [SI],AL INC SI INC AL LOOP L1 MOV SI,3000H MOV DI,4000H MOV CX,10H REP MOVSB MOV BX,4010H MOV [BX],'$'

MOV DX,4000H MOV AH,9H INT 21H MOV AX,4C00H INT 21H CODE ENDS END START 六、实验结果 实验二:数码转换程序实验 一、实验目的 (1)掌握不同进制数及编码互相转换的程序设计方法,加深对数制转换的理解。(2)熟悉程序调试的方法。 二、实验设备 PC机一台、TD-PITE实验装置一套 三、实验内容 编写程序,将输入的数据0FFH,2AH,0C5H转换为十进制,并显示出来。 四、实验过程 1.运行Wmd软件,进入Wmd集成开发环境。 2.编写实验程序,并进行编译、链接和加载,观察运行结果。 五、实验程序 DATA SEGMENT ARRAY1 DB 0FFH,2AH,0C5H ARRAY2 DB 20 DUP (?)

微机原理实验报告

汇编语言程序设计实验 一、实验内容 1.学习并掌握IDE86集成开发环境的使用,包括编辑、编译、链接、 调试与运行等步骤。 2.参考书例4-8,P165 (第3版161页)以单步形式观察程序的 执行过程。 3.修改该程序,求出10个数中的最大值和最小值。以单步形式观 察,如何求出最大值、最小值。 4.求1到100 的累加和,并用十进制形式将结果显示在屏幕上。 要求实现数据显示,并返回DOS状态。 二、实验目的 1.学习并掌握IDE86集成开发环境的使用 2.熟悉汇编语言的基本算法,并实际操作 3.学会利用IDE86进行debug的步骤 三、实验方法 1.求出10个数中的最大值和最小值 (1)设计思路:利用冒泡法,先对数据段的10个数字的前2个比 较,把二者中大的交换放后面。在对第二个和第三个数比较,把 二者中较大的交换放后面,依此类推直到第十个数字。这样第十 位数就是10个数里面最大的。然后选出剩下9个数字里面最大 的,还是从头开始这么做,直到第九个数字。以此类推直到第一 个数字。

(2)流程图 2.求1到100 的累加和,并用十进制形式将结果显示在屏幕上。 要求实现数据显示,并返回DOS状态

(1)设计思路:结果存放在sum里面,加数是i(初始为1),进行 100次循环,sum=sum+I,每次循环对i加1. (2)流程图: 四、 1.求出10个数中的最大值和最小值

DSEG SEGMENT NUM DB -1,-4,0,1,-2,5,-6,10,4,0 ;待比较数字 DSEG ENDS CODE SEGMENT ASSUME DS:DSEG,CS:CODE START:MOV AX,DSEG MOV DS,AX LEA SI,NUM MOV DX,SI MOV CL,9 ;大循环计数寄存器初始化 NEXT1:MOV BL,CL ;大循环开始,小循环计数器初始化MOV SI,DX NEXT2:MOV AL,[SI+1] CMP [SI],AL ;比较 JGGONE ;如果后面大于前面跳到小循环末尾CHANGE:MOV AH,[SI] ;交换 MOV [SI+1],AH MOV [SI],AL JMP GONE GONE:add SI,1 DEC BL JNZ NEXT2

微机汇编语言编程系统实验报告

微机系统实验报告 实验一汇编语言编程实验 一、实验目的 (1)掌握汇编语言的编程方法 (2)掌握DOS功能调用的使用方法 (3)掌握汇编语言程序的调试运行过程 二、实验设备 PC机一台。 三、实验内容 (1)将指定数据区的字符串数据以ASCII码形式显示在屏幕上,并通过DOS功能调用完成必要提示信息的显示。 (2) 在屏幕上显示自己的学号姓名信息。 (3)循环从键盘读入字符并回显在屏幕上,然后显示

出对应字符的ASCII码,直到输入“Q”或“q”时结束。 (4)自主设计输入显示信息,完成编程与调试,演示实验结果。 考核方式:完成实验内容(1)(2)(3)通过, 完成实验内容(4)优秀。 实验中使用的DOS功能调用:INT 21H 表3-1-1 显示实验中可使用DOS功能调用

四、实验步骤 (1)运行QTHPCI软件,根据实验内容编写程序,参考程序流程如图3-1-1所示。 (2)使用“项目”菜单中的“编译”或“编译连接”命令对实验程序进行编译、连接。

(3)“调试”菜单中的“进行调试”命令进入Debug调试,观察调试过程中数据传输指令执行后各寄存器及数据区的内容。按F9连续运行。 (4)更改数据区的数据,考察程序的正确性。 五、实验程序 DATA SEGMENT BUFFER DB '03121370konglingling:',0AH,0DH,'$' BUFFER2 DB 'aAbBcC','$' BUFFER3 DB 0AH,0DH,'$' DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX mov ah,09h mov DX,OFFSET BUFFER int 21h MOV SI,OFFSET BUFFER2

第四组微机实验报告

实验七 8253定时实验报告 骆卫勇32号朱腾辉30号 一、实验目的与要求 了解8253的内部结构、工作原理;了解8253与8088的接口逻辑;熟悉8253的控制寄存器和初始化编程方法,熟悉8253的6种工作模式。 二、实验设备 STAR系列实验仪一套、PC机一台 三、实验内容 1、编写程序:使用8253的计数器0和计数器1实现对输入时钟频率的两级分频,得到一个周期为1秒的方波,用此方波控制蜂鸣器,发出报警信号,也可以将输入脚接到逻辑笔上来检验程序是否正确。 2、连接线路,验证8253的功能,熟悉它的使用方法。 四、实验原理图 8253控制字: 五、实验步骤

1、连线说明: 2、下面2个编程题由老师做实验前抽选1个,按题目要求完成汇编程序编程,并编译、链接、运行,如能成功运行请叫老师至本组实验台前检查运行结果。8253端口地址为0B000H~0B003H。 (1)使用8253的计数器0和计数器1实现对输入时钟频率的两级分频,得到一个周期为[组号最末一位]秒的方波,用此方波控制蜂鸣器,发出报警信号,同时观察逻辑笔的灯闪烁周期是否为组号最末一位。 (2)使用8253的计数器0工作在方式3实现对输入时钟频率分频得到1kHz 的方波,计数器0的输出端接计数器1的输入端,计数器1工作在方式0实现[组号]秒数后逻辑笔的灯闪烁指示为电平由低跳为高电平。 实验程序如下: .model tiny .data .stack 100 .code Start:mov dx ,0b003h Mov al ,35h Out dx,al Mov ax,00h Mov dx,0b000h Out dx,ax Mov ax,10h

微机原理实验报告

西安交通大学实验报告 课程_微机与接口技术第页共页 系别__生物医学工程_________实验日期:年月日 专业班级_____组别_____交报告日期:年月日 姓名__ 学号__报告退发 ( 订正、重做 ) 同组人_教师审批签字 实验一汇编语言程序设计 一、实验目的 1、掌握Lab6000p实验教学系统基本操作; 2、掌握8088/8086汇编语言的基本语法结构; 3、熟悉8088/8086汇编语言程序设计基本方法 二、实验设备 装有emu8086软件的PC机 三、实验内容 1、有一个10字节的数组,其值分别是80H,03H,5AH,FFH,97H,64H,BBH,7FH,0FH,D8H。编程并显示结果: 如果数组是无符号数,求出最大值,并显示; 如果数组是有符号数,求出最大值,并显示。 2、将二进制数500H转换成二-十进制(BCD)码,并显示“500H的BCD是:” 3、将二-十进制码(BCD)7693转换成ASCII码,并显示“BCD码7693的ASCII是:” 4、两个长度均为100的内存块,先将内存块1全部写上88H,再将内存块1的内容移至内存块2。在移动的过程中,显示移动次数1,2 ,3…0AH…64H(16进制-ASCII码并显示子

程序) 5、键盘输入一个小写字母(a~z),转换成大写字母 显示:请输入一个小写字母(a~z): 转换后的大写字母是: 6、实现4字节无符号数加法程序,并显示结果,如99223344H + 99223344H = xxxxxxxxH 四、实验代码及结果 1.1、实验代码: DATA SEGMENT SZ DB 80H,03H,5AH,0FFH,97H,64H,0BBH,7FH,0FH,0D8H;存进数组 SHOW DB 'THE MAX IS: ','$' DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA ;把数据的基地址赋给DS MOV DS,AX MOV DX,OFFSET SHOW ;调用DOS显示字符串 MOV AH,09H INT 21H MOV SI ,OFFSET SZ ;数组的偏移地址赋给SI MOV CX,10 ;存进数组的长度给CX MOV DH,80H ;将数组的第一个数写进DH NEXT: MOV BL,[SI] ;将数组的第一个数写进BL CMP DH,BL ;比较DH和BL中数的到校 JAE NEXT1 ;如果DH中的数大于BL中,将跳转到NEXT1 MOV DH,BL ;如果DH中的数小于BL中,将BL中的数赋给DH NEXT1: INC SI ;偏移地址加1 LOOP NEXT;循环,CX自减一直到0,DH中存数组的最大值 ;接下来的程序是将将最大值DH在屏幕上显示输出 MOV BX,02H NEXT2: MOV CL,4 ROL DH,CL ;将DH循环右移四位

华科_计算机系统实验报告

课程实验报告课程名称:计算机系统基础 专业班级: 学号: 姓名: 指导教师: 报告日期:年月日 计算机科学与技术学院

目录 实验1: (1) 实验2: (7) 实验3: (24) 实验总结 (34)

实验1:数据表示 1.1 实验概述 实验目的:更好地熟悉和掌握计算机中整数和浮点数的二进制编码表示。 实验目标:加深对数据二进制编码表示的了解。 实验要求:使用有限类型和数量的运算操作实现一组给定功能的函数。 实验语言:c。 实验环境:linux 1.2 实验内容 需要完成bits.c中下列函数功能,具体分为三大类:位操作、补码运算和浮点数操作。 1)位操作 表1列出了bits.c中一组操作和测试位组的函数。其中,“级别”栏指出各函数的难度等级(对应于该函数的实验分值),“功能”栏给出函数应实现的输出(即功能),“约束条件”栏指出你的函数实现必须满足的编码规则(具体请查看bits.c中相应函数注释),“最多操作符数量”指出你的函数实现中允许使用的操作符的最大数量。 你也可参考tests.c中对应的测试函数来了解所需实现的功能,但是注意这些测试函数并不满足目标函数必须遵循的编码约束条件,只能用做关于目标函数正确行为的参考。 表1 位操作题目列表

2)补码运算 表2列出了bits.c中一组使用整数的补码表示的函数。可参考bits.c中注释说明和tests.c中对应的测试函数了解其更多具体信息。 表2 补码运算题目列表 3)浮点数操作 表3列出了bits.c中一组浮点数二进制表示的操作函数。可参考bits.c中注释说明和tests.c中对应的测试函数了解其更多具体信息。注意float_abs的输入参数和返回结果(以及float_f2i函数的输入参数)均为unsigned int类型,但应作为单精度浮点数解释其32 bit二进制表示对应的值。 表3 浮点数操作题目列表

微机实验报告

实验报告 课程名称微型计算机系统原理及应用(第五版)实验课时 实验项目汇编语言实现c=a+b 实验时间 1 指导老师实验成绩 实验目的(本次上机实验所涉及并要求掌握的知识点)熟练掌握编写汇编语言源程序的基本方法和基本框架熟练使用debug调试程序 掌握用Dos功能调用,实现字符的输入与显示 汇编语言实现c=a+b 实验环境DosBox 0.74 实验内容汇编语言程序上机——通过键盘输入两个数(两个数相加不超9),两数相加后输出在屏幕上步骤: 汇编语言的汇编过程 程序运行步骤及生成的文件 (1)编辑程序(try1.asm文件) myfile.asm 编辑程序 汇编程序 链接程序 myfile.crf otherfiles.obj myfile.lst myfile.obj myfile.map myfile.exe 编辑汇编链接 无错 编辑程序 EDIT 可执行文件 EXE 二进制目标文件 OBJ 源程序 ASM 有错

在dos界面下输入try1 *.asm可以看到d盘中的masm文件夹下有try1.asm文件 (2)汇编程序 给list文件命名:try1 引用文件名可以默认, 会发现无警告性错误,也无致命性错误 在无错的情况下汇编成二进制文件try1.obj

(3)链接程序 (4)执行程序 总结(对上机实验结果进行分析,上机心得体会及改进意见通过本次上机,我学习到了如下内容: (1)我对汇编语言的汇编与执行一个程序有了一定了解 首先用notepad(不只是notepad) 编辑程序,将其放于masm文件夹下。然后,在dos环境下通过“masm 文件名.asm”命令生成汇编语言源程序文件(ASM文件)。源程序不能被计算机直接执行,所以要经过汇编程序加以翻译,这个翻译过程称为编译过程或汇编过程,就是把源程序文件翻译成二进制代码所表示的目标文件——OBJ文件。若源程序中有语法错误,则汇编结束后,汇编程序将指出源文件中的语法错误,就需要重新使用编辑程序来修正源程序中的语法错误,直至得到无误的ASM文件和OBJ文件。若无错,OBJ文件虽然已是二进制机器指令码的形式,但计算机仍不能直接执行,还必须用“link 文件名”命令把目标文件与库文件或其它目标文件进行链接和在内存中重新定位,生成可直接执行文件(EXE文件)。这时的EXE文件才可以由DOS装入内存储器并运行。通过“文件名.exe”命令即可运行程序。 (2)我对常用的dos功能调用有了一定了解 1号调用——单字符调用 通过键盘输入字符,将字符的ASCII码送入寄存器AL中,并在屏幕上显示该字符 2号调用——单字符显示 将DL寄存器中的字符送显示器显示 9号调用——显示字符串 将当前内存缓冲区中以‘$’结尾的字符串送显示器显示。 0a号调用——回车 0d号调用——换行 存在的问题: 分别输入两个数后,必须要分别将各自的高位屏蔽,如果不屏蔽结果就输出符号(错误的),但是我想既然是两个加起来不大于9的数相加,那是否屏蔽高位应该没有影响吧?这里有疑问

微机原理与单片机实验报告

北京联合大学信息学院实验报告 课程名称:微型计算机原理学号: 姓名: 2012 年 6 月 9 日

目录 实验1 EMU8086模拟器的使用 (3) 实验2 数据传送指令的使用 (5) 实验3 多位十六进制加法运算实验 (9) 实验5 循环程序实验 (11) 实验6 由1 到100 求和实验 (13) 实验7 求表中正数_负数_0 的个数实验 (14) 实验8 数据排列实验(冒泡排序) (16) 实验9 系统功能调用(大小写转换) (18) 实验10 阶乘(递归运算) (20) 实验11 ProteusIO工程文件的建立 (21) 实验12 IO口读写实验(245、373) (22) 实验13 8255 接口实验 (24) 实验14 声光报警 (25) 实验总结 (28)

实验1 EMU8086模拟器的使用 一实验要求 利用EMU8086模拟器环境,完成创建源程序文件,运行调试,实验结果的查看二实验目的: 熟悉EMU8086实验环境 三EMU8086环境: 1 模拟器编辑窗口 2 模拟器调试窗口

四实验内容 实验内容1:新建文件。 运行emu8086 1. 新建文件:单击“新建”按钮,选择COM模板,在模拟器编辑窗口中输入如下程序代码: MOV AX, 1020H MOV BX, 2030H MOV AX, BX ADD AX, BX MOV [BX], AX MOV [2032H], AX HLT 2. 编译:单击“编译”按钮,对程序段进行编译; 3. 保存:编译通过,单击“完成”按钮,将其以文件名“EXP1”保存在本地磁盘上。 4. 仿真:单击“仿真”按钮,打开模拟器调试窗口和源文件窗口。 5.在模拟器调试窗口中的寄存器组区,查看数据寄存器AX,BX,CX,DX;段寄存器CS,ES,SS,DS;指令指针寄存器IP;指针寄存器SP,BP;变址寄存器SI,DI;标志寄存器的值。 6.单击“单步前”按钮,单步执行程序,并观察每次单步执行后,相关寄存器值的变化。 7.单击“重载”按钮,将程序重载,并调整指令运行步进时延为400毫秒,单击“全速”按钮,运行程序, 8.程序运行之后,在程序调试窗口中,选择[view]/[memory],查看模拟器环境中,内存单元0700:0100开始的连续10个单元的内容 9.将“存储器”中的地址改为0700:2030,查看开始的四个字节的内容,并思考其内容与程序

华中科技大学计算机操作系统实验报告

实验目的 掌握Linux操作系统的使用方法; 了解Linux系统内核代码结构; 掌握实例操作系统的实现方法。 一、实验要求 1、掌握Linux操作系统的使用方法,包括键盘命令、系统调用;掌握在Linux 下的编程环境。 ●编一个C程序,其内容为实现文件拷贝的功能; ●编一个C程序,其内容为分窗口同时显示三个并发进程的运行结 果。要求用到Linux下的图形库。 2、掌握系统调用的实现过程,通过编译内核方法,增加一个新的系统调用。 另编写一个应用程序,调用新增加的系统调用。 实现的功能是:文件拷贝; 3、掌握增加设备驱动程序的方法。通过模块方法,增加一个新的设备驱动 程序,其功能可以简单。 实现字符设备的驱动; 4、了解和掌握/proc文件系统的特点和使用方法 ●了解/proc文件的特点和使用方法 ●监控系统状态,显示系统中若干部件使用情况 ●用图形界面实现系统监控状态。 5、设计并实现一个模拟的文件系统(选作) 二、实验一 1、编一个C程序,其内容为实现文件拷贝的功能 要实现文件拷贝功能,主要用到的函数是fopen、fputc、fgetc。 主要用到的头文件: #include #include 设计思路:由scanf函数获取2个文件名,根据其文件名和路径分别打开该2个文件,设置一个循环,从源文件复制1个字节到目 的文件,直到源文件指针到文件尾,最后关闭2个文件。 在可能出错的地方需要加上相应的报错代码,并输出错误信息,以方便调试。 理清楚设计思路后,首先搭建linux下编程环境。 安装gcc:sudo apt-get install build-essential 安装codeblocks:sudo apt-get install codeblocks 在集成开发环境Code::Blocks IDE下根据需求写出相应的源代码copy.c,将程序编译并生成exe可执行文件。 然后手动创建一个测试文件test.txt ,运行copy.exe文件,并输入

微机实验报告

《微机实验》报告 实验名称:keilc的使用与汇编语言上机操作 一、任务要求 实验目的:熟悉keilc环境,通过在keilc环境下调试字节拆分、合并程序、数据块清 零程 序、加法程序,掌握汇编语言程序的调试方法,加深对bcd码、ascii码、堆栈、寄存 器、数据指针、汇编语言指令、机器码等基本概念的理解,为后续程序编制和调试打下基础。 实验内容: 1.掌握keilc环境的使用 1)字节拆分、合并:调试e421.asm程序,观察相关寄存器和单元的内容。 2)数据块填充:调试fill.asm程序,观察相关寄存器和单元的内容。 2. 编写两个十六位数的加法程序。 有两个十六位无符号数,分别存放在从20h和30h开始的数据区中,低八位先存,高八 位在后,和存于r3(高八位)和r4(低八位),进位位存于r2。 二、设计思路 实验1中的两个实验,已经给出了程序代码,,无需再进行设计。下面阐述实验2的设计 思路: 对于该程序,在处理低位相加时,直接采用指令add,然后存数,在处理高位时,考虑 到可能存在进位,所以在相加时,应使用指令addc将被加数、加数以及低位到高位的进位相 加然后存数。 此外,在处理该问题时,还应考虑到两个十六位相加可能会出现第十七位,所以要另外 安排一个地址单元用来存放最高位的数。 三、资源分配 两个十六位无符号数,分别存放在从20h和30h开始的数据区中; 和存于r3(高4八位)和r4(低八位); 进位位存于r2。 四、流程图 四、源代码(含文件头说明、资源使用说明、语句行注释) file name: test2.asm description: 两个十六位数的加法程序 date: 2012/09/26 designed by: zhangbo source used: 20h: 加数a的低位 21h: 加数a的高位 30h: 加数b的低位 31h: 加数b的高位 r4: 和的低位 r3: 和的高位 r2: 和的进位 org 0000h ljmp main org 0000h main: clr c ;将进位位清零 mov 20h,#10h 六、程序测试方法与结果、软件性能分析

微机原理实验报告软件实验1-4

微机原理实验报告 学院:算机科学与软件教育学院 1. 掌握存储器读写方法 2. 了解存储器的块操作方法 二、实验原理 存储器读写和块操作 三、实验设备仪器及材料 计算机,WA VE 6000软件 四、实验过程 S1.asm 代码流程图 data segment Block db 256 dup(55h) data ends code segment assume cs:code, ds:data start proc near mov ax, data mov ds, ax mov bx, offset Block ; 起始地址 mov cx, 256 ; 清256 字节Again: mov [bx], byte ptr 0 inc bx ; 地址+1 Loop Again ; 记数减一jmp $ ;死循环code ends end start

五、实验步骤 (1) 进入Wave6000,输入程序并检查,保存程序。 (2) “编译”程序。 (3) “全速执行”程序。 (4) “暂停”程序运行,在“数据窗口(MEMOREY)”查看0400H起始的单元内容,并记录。 (5) 在指令“jmp $”处设断点。“全速执行”程序。 (6) 在“数据窗口(MEMOREY)”查看0400H起始的单元内容,记录并分析实验结果。 六、实验结果及总结 运行前:运行后: 2、调试:如何将存储器块的内容置成某固定值(例全填充为0FFH)? 总结:通过本实验,我了解到单片机读写存储器的读写方法,同时也了解到单片机编程,调试方法。学会内存的移动方法,也加深对存储器读写的认识。

微机原理实验报告 学院:算机科学与软件教育学院 实验 课程 名 微机原理实验成绩实验 项目名称实验二、二进制到BCD码转换 指导老 师 1. 了解BCD值和ASCII值的区别。 2. 了解如何将BCD值转换成ASCII值。 3. 了解如何查表进行数值转换及快速计算。 二、实验原理 ASCII码表 三、实验设备仪器及材料 计算机,WA VE 6000软件 data segment Result db 3 dup(?) data ends code segment assume cs:code, ds:data start proc near mov ax, data mov ds, ax mov ax, 123 mov cl, 100 div cl mov Result, al ; 除以 100, 得百位数 mov al, ah mov ah, 0 mov cl, 10 div cl mov Result+1, al ; 余数除以 10, 得十位数 mov Result+2, ah ; 余数为个位 数 jmp $ code ends end start 代码流程图

四川大学微机原理实验报告..

微机原理实验报告 学院: 专业班级: 姓名 学号

实验一汇编语言编程基础 1.3汇编语言程序上机操作和调试训练 一.功能说明 运用8086汇编语言,编辑多字节非压缩型BCD数除法的简单程序,文件名取为*.ASM。 运用MASM﹒EXE文件进行汇编,修改程序中的各种语法错误,直至正确,形成*.OBJ文件。 运用LINK.EXE文件进行连接,形成*.EXE文件。 仔细阅读和体会DEBUG调试方法,掌握各种命令的使用方法。 运用DEBUG。EXE文件进行调试,使用单步执行命令—T两次,观察寄存器中内容的变化,使用察看存储器数据段命令—D,观察存储器数据段内数值。 再使用连续执行命令—G,执行程序,检查结果是否正确,若不正确可使用DEBUG的设置断点,单步执行等功能发现错误所在并加以改正。 二.程序流程图 设置被除数、商的地址指针 设置单位除法次数计数器 取被除数一位作十进制调整 作字节除法、存商 N 被除数各位已除完? Y 显示运算结果 结束 三.程序代码 修改后的程序代码如下: DATA SEGMENT A D B 9,6,8,7,5 B DB 5 C DB 5 DUP (0) N EQU 5 DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA,ES:DATA START: MOV AX,DATA MOV DS,AX

MOV ES,AX CLD LEA SI,A LEA DI,C MOV CX,N MOV AH,0 LP1: LODSB AAD DIV B STOSB LOOP LP1 MOV CX,N LEA DI,C LP2: MOV DL,[DI] ADD DL,30H MOV AH,2 INT 21H INC DI LOOP LP2 MOV AH,4CH INT 21H CODE ENDS END START 四.实验感想和收获 通过这次试验,我对微机原理上级试验环境有了初步的认识,可以较为熟练地对汇编语言进行编译,汇编及连接,同时也学会了用DEBUG调试程序,收获很大。 在这次试验中我也遇到了一些困难。在刚开始我发现自己无法打开MASM.EXE,计算机提示是由于版本不兼容。我这才想起来我的操作系统是64位的,和该软件版本不兼容。不过我并没有放弃,经过我的摸索之后,我发现用DOSBOX这个程序可以解决我的电脑运行不了该程序的问题。在解决了第一个难题后,我开始着手改正试验1.3中的语法错误和逻辑错误,但是无论我怎么修改却始终都无法通过编译,并且基本上每句话都有编译错误。根据我多年编程的经验来看,这应该是中文输入法在搞鬼,之后我耐心地把程序重新输了一遍,果然通过了编译,并且之后的连接也进行的很顺利。在用DEBUG调试时发现得出的结果也很正确。 尽管这次的实验内容非常简单,仅仅是教会我们一些基本的操作,但我却明显感觉到了汇编语言和C语言等高级语言所不同的地方。越是底层,基础的东西就越不人性化,用C语言一行代码就能实验的功能在汇编语言中可能要花上数十行。看来汇编语言的学习不是几周就能速成的,必须要有长年累月的积淀才能掌握。

微机系统的组装与配置实验报告

微机系统的组装与配置实验报告

计算机学院综合性实验 实验报告 课程名称微机与外设维护维修技术 实验学期 2015 至 2016 学年第 2 学期 学生所在院系计算机学院 年级 2013 专业班级计 学生姓名学号 2013 任课教师 实验成绩 计算机学院制

一、硬件拆卸部分 1、主板的型号及功能、性能说明: 主板是电脑系统中最大的一块电路板,主板上布满了各种电子元件、插槽、接口等。它为CPU、内存和各种功能(声、图、通信、网络、TV、SCSI等)卡提供安装插座(槽);为各种磁、光存储设备、打印机和扫描仪等I/O设备以及数码相机、摄像头、调制解调器等多媒体和通讯设备提供接口,实际上电脑通过主板将CPU等各种器件和外部设备有机地结合起来形成一套完整的系统。 主板的标准结构是根据主板上各元器件的布局排列方式、主板的尺寸大小及形状、所使用的电源规格等。 目前市场上PC的主板主要有ATX、Micro ATX和BTX等结构。 2、CPU的型号及功能、性能说明: 中央处理器(CPU)是一块超大规模集成电路芯片,它是整个计算机系统的核心。CPU主要包括运算器、控制器和寄存器三个部件。这三个部件相互协调,使他们可以进行分析、判断、运算并控制计算机各部分协调工作。其中运算器主要完成各种算术运算和逻辑运算;而控制器是指挥中心,控制运算器及其他部件工作,它能对指令进行分析,作出相应的控制;寄存器用来暂时存放运算中的中间结果或数据。 CPU的性能指标: 字长或位数; 主频、外频、FSB频率; 高速缓冲存储器; 指令扩展技术; CPU的制造工艺; CPU的核心代号; 超线程技术; 多核心技术; 虚拟化技术; 可信执行技术。 3、硬盘的型号及功能、性能说明: 硬盘主要是有固定面板、控制电路板、磁头组、盘面组、主轴电机、接口、及其附件组成。其中磁头组和盘片组件是构成硬盘的核心,它们被封装在硬盘的净化腔体内,包括浮动磁头组件、磁头驱动机构、盘片组、主轴驱动装置级读写控制电路几个部分。 温切斯特硬盘的特点:磁盘旋转,磁头径向运动,磁头悬浮在磁片上方,用磁存储信息。 磁盘技术: RAID技术(廉价磁盘冗余阵列),使用磁盘驱动器的方法,是将一组磁盘驱动器用某种逻辑方式联系起来,作为逻辑上的一个大容量磁盘驱动器来使用。(RAID0、RAID1、RAID0+1、RAID3、RAID5模式);

微机实验报告一

实验名称Keil的使用与汇编语言上机操作成绩______________ 一、任务要求 1?掌握Keil环境的使用 1)字节拆分、合并:调试e421.asm程序,观察相关寄存器和单元的内容。 2)数据块填充:调试fill.asm程序,观察相关寄存器和单元的内容。 2.编写多个十六位数的加法程序 有4个十六位无符号数,连续存放在20H开始的片上数据区中,低八位先存,高 八位在后。要求:和存于R3 (高八位)和R2 (低八位),进位位存于R4。 二、设计思路 实验一已给出程序代码,不需要设计,下面阐明实验二,编写多个十六位数的加法 程 序的设计思路。 十六位数相加,先是低八位相加,低八位相加不用考虑进位,所以,此时用ADD 指 令,但因为在每次循环时都有CLR C操作,所以也可以用ADDC指令。而且题目中要求将和的低八位存于R2,所以将每次低八位相加的和存于R2,然后从R2中取值求和。 低八位相加后高八位相加,因为必须处理低位相加的进位问题,所以必须用ADDC 指令。而且因为要求高位和存于R3,所以将每次计算的和存于R3,每次从R3中取数跟新 的高八位相加 另外考虑到高位进位的问题,所以必须安排一个地址单元或者寄存器存放最高位

正是因为每次循环中,进位都会被处理,所以每次循环开始要CLR C。 三、资源分配 4个十六位无符号数,连续存放在20H开始的片上数据区中,低八位先存,高八位在后。 和存于R3 (高八位)和R2 (低八位),进位位存于R4。 R0和R1作为数据指针,存放低八位和高八位的地址。 循环次数存于R5。 四、流程图

Cyj ■ ■* YES R4—A 进位存于KH 五、源代码 (含文件头说明、语句行注 四个十六位数的加法程序 File n ame: 3.asm Descriptio n: 四个十六位数的加法程序 Date: 2016/09/23 Desig ned by: 陈钰 軌元初始賦值 RO —20H 指針賦初值 NO R2*-(20H) (2111) R4—QOH 寄存器 赋值

微机原理实验四实验报告

实验报告

实验四 8251可编程串行口与PC机通信实验一、实验要求 利用实验箱内的8251A芯片,实现与PC机的通信。 二、实验目的 1.掌握8251A芯片结构和编程方法; 2.了解实现串行通信的硬件环境,数据格式和数据交换协议; 3.了解PC机通信的基本要求。 三、实验原理 (一)8251A芯片工作方式配置: 1. 8个数据位; 2.无奇偶校验位; 3.1个停止位; 4.波特率因子设为16; 5. 波特率设为9600。 (二)8251A主要寄存器说明 图4-1 模式字 图4-2 命令字

CO MMAN D I NSTR UCT ION FO RMA T 图4-3 状态字 (三)8251编程 对8251 的编程就是对8251 的寄存器的操作,下面分别给出8251 的几个寄存器的格式。(1)方式控制字 方式控制字用来指定通信方式及其方式下的数据格式,具体各位的定义如图4-4所示。 图4-4 方式控制字说明 (2)命令控制字 命令控制字用于指定8251 进行某种操作(如发送、接收、内部复位和检测同步字符等)或处于某种工作状态,以便接收或发送数据。图4-5 所示的是8251 命令控制字各位的定义。 图4-5命令控制字说明 (3)状态字 CPU 通过状态字来了解8251 当前的工作状态,以决定下一步的操作,8251 的状态字如 图4-6所示。 图4-6 状态字说明 四、实验电路连接: 1.CS8251接228H,CS8279已固定接至238H; 2.扩展通信口18中的232RXD连8251RXD ,232TXD连8251TXD;

3.计算机的两个RS232通信口,一个连至仿真机通信口,一个连至扩展通信口18(所有通信口均为DB9)。注意:RS232通信口必须在设备断电状态下插拔! 图4-7 连线图 五、实验内容及要求 1. 将例程从PDF文档中导入到WMD86软件编辑环境中,调试通过。使用软件自带的示波器,观察Txd管脚的输出,验证结果的正确性。将结果截图保存,贴入实验报告。 2.剔除例程中冗余部分,实现对例程的精简和优化。将精简内容与相应理由写入实验报告。 3.将自己学号的后三位数字通过RS232端口的Txd管脚输出。使用软件自带的示波器,观察Txd管脚的输出,验证结果的正确性。将结果截图保存,贴入实验报告。 4.通过读状态寄存器的方法,获得发送移位寄存器是否为空的信息,实现学号后三位数字的循环发送。将结果截图保存,贴入实验报告。 5.给每帧数据间添加固定的时间间隔,时间间隔为10000个指令周期。将结果截图保存,

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