微机原理课程设计报告(程序)

更新时间:2024-01-02 21:32:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

微机原理课程设计报告

班级:电科1201 姓名:李建 学号:3120504023

课程设计目的

结合微型计算机原理课程的学习,进一步巩固已学的知识,同时针对微型计算机原理知识的具体应用,学会对系统中DOS和BIOS的使用。学会使用全屏幕编辑程序—PE,弄懂汇编程序的上机过程以及如何运用DEBUG软件进行汇编程序的调试。

课程设计内容

1. 字符串匹配设计

为掌握提示信息的设置方法及读取键入信息的方法。编写程序实现两个字符串比较。如相同,则显示“MATCH”,否则,显示“NO MATCH”。 程序流程图

入口 段寄存器及堆栈初始化 显示“请输入字符串1” 使用INT 21H的0AH号子功能,接收键入的字符串 显示“请输入字符串2” 指针SI指向串1的首字符 SI指向的字符和串2中所有字符做比较 相等? SI加1,指向串1中下一字符 串1中的字符取完 显示“NO MATCH” 显示“MATCH” 返回DOS

程序代码为:

DATA SEGMENT

DATA1 DB 40 DB ?

DB 40 DUP(?) DATA2 DB 40 DB ?

DB 40 DUP(?)

DISPP1 DB 'input the first line:$',0DH,0AH,'$' DISPP2 DB 'input the second line:$',0DH,0AH,'$' DISPP3 DB 0DH,0AH,'$'

DISPP4 DB 'MATCH!$',0DH,0AH,'$' DISPP5 DB 'NO MATCH!$',0DH,0AH,'$' DATA ENDS

CASE SEGMENT

ASSUME CS:CASE,DS:DATA START: MOV AX,DATA MOV DS,AX LEA DX,DISPP1 MOV AH,9 INT 21H

MOV DX,OFFSET DATA1 MOV AH,0AH INT 21H CALL ENTER LEA DX,DISPP2 MOV AH,9 INT 21H

MOV DX,OFFSET DATA2 MOV AH,0AH INT 21H CALL ENTER

MOV AL,DATA1+1 MOV AH,0

MOV BL,DATA2+1 MOV BH,0 CMP AL,BL JNZ L2

MOV CL,BL

MOV SI,OFFSET DATA1+2 MOV DI,OFFSET DATA2+2 L1: MOV DX,DS:[SI] CMP DX,DS:[DI] JNE L2

INC DI INC SI LOOP L1 MOV DX,1 JMP L3 L2: MOV DX,0 L3: CMP DX,0 JZ L4

MOV DX,OFFSET DISPP4 MOV AH,9 INT 21H JMP L5

L4: MOV DX,OFFSET DISPP5 MOV AH,9 INT 21H

L5: MOV AH,4CH INT 21H ENTER PROC

LEA DX,DISPP3 MOV AH,9 INT 21H RET ENTER ENDP CASE ENDS

END START 运行结果:

2. 字符和数据的显示设计

为掌握字符和数据的显示方法。编写程序,先显示信息:INPUT STRING,THE END FLAG IS$,再接收字符。如为0-9,则计数器加1,并显示数据;如为非数字,则直接显示,但不计数。 程序代码为:

DATA SEGMENT

DATA1 DB 40 DUP(?)

DISPP1 DB 'input string,the end flag is IS,quit with ctrl-c',0DH,0AH,'$' DISPP2 DB 0DH,0AH,'$'

DISPP3 DB 'the input string is:','$' DATA ENDS

CODE SEGMENT

ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX MOV SI,00H MOV CL,0

MOV BX,OFFSET DATA1 LEA DX,DISPP1 MOV AH,9 INT 21H L1: MOV AH,1 INT 21H CMP AL,03H JZ L4

CMP AL,0DH JZ L3

MOV [BX+SI],AL INC SI

CMP AL,30H JNB kk JMP L1

kk: CMP AL,39H JNA L2 JMP L1 L2: INC CL

JMP L1 L3: LEA DX,DISPP2 MOV AH,9 INT 21H

LEA DX,DISPP3 MOV AH,9 INT 21H ADD CL,30H

MOV [BX+SI+1],CL MOV AL,0AH

MOV [BX+SI+2],AL MOV AL,'$'

MOV [BX+SI+3],AL MOV DX,BX MOV AH,9 INT 21H JMP L4

L4: MOV AH,4CH INT 21H

CODE ENDS END START 运行结果:

3. 接收年、月、日信息并显示的设计

为掌握响铃使用方法,并掌握年、月、日输入方法。编写程序,先显示“WHAT IS THE DATE(MM/DD/YY)?”并响铃一次,然后接收键盘输入的月/日/年信息,并显示。 程序流程图

程序代码为: CRLF MACRO

MOV AH,02H MOV DL,0DH INT 21H

MOV AH,02H MOV DL,0AH INT 21H ENDM

DATA SEGMENT

MESS DB 'PLEASE INPUT MONTH,DAY ,YEAR(MM/DD/YY)',0DH,0AH,'$' MESS1 DB 0DH,0AH,'MONTH ERROR,PLEASE INPUT AGAIN',0DH,0AH,'$'

MESS2 DB 0DH,0AH,'DAY ERROR,PLEASE INPUT AGAIN',0DH,0AH,'$' ERROR DB 0DH,0AH,'ERROR,PLEASE INPUT AGAIN',0DH,0AH,'$' MARK DB ? REG DW ? DATA ENDS

STACK SEGMENT STA DW 32 DUP(?) TOP DW ? STACK ENDS CODE SEGMENT

ASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACK START: MOV AX,DATA MOV DS,AX MOV ES,AX

MOV SP,TOP HEAD: MOV MARK,0 MOV AH,09H

MOV DX,OFFSET MESS INT 21H MOV AH,02H MOV DL,07H

INT 21H CALL GETNUM CMP MARK,01H JE HEAD PUSH DX

CALL GETNUM CMP MARK,01H JNE K1 POP DX JMP HEAD K1: PUSH DX

CALL GETNUM CMP MARK,01H JNE K2 POP DX POP DX JMP HEAD

K2: MOV AX,DX

CALL DISP NOP

MOV AH,02H

MOV DL,'-' INT 21H

POP DX POP AX PUSH DX

MOV REG,AX AND AX,00FFH CMP AX,0012H JBE W1

MOV AH,09H LEA DX,MESS1 INT 21H JMP START

W1: MOV AX,REG CALL DISPP MOV AH,02H MOV DL,'-' INT 21H POP AX

MOV REG,AX AND AX,00FFH CMP AX,31H JBE W2

MOV AH,09H LEA DX,MESS2 INT 21H JMP START

W2: MOV AX,REG CALL DISPP MOV AX,4C00H INT 21H DISPP PROC NEAR MOV BL,AL MOV DL,BL MOV CL,04 ROL DL,CL AND DL,0FH CALL DISPL MOV DL,BL AND DL,0FH CALL DISPL RET

DISPP ENDP

DISPL PROC NEAR ADD DL,30H CMP DL,3AH

JB DDD ADD DL,27H

DDD: MOV AH,02H INT 21H RET

DISPL ENDP

DISP PROC NEAR PUSH BX PUSH CX PUSH DX PUSH AX MOV AL,AH CALL DISPP POP AX CALL DISPP POP DX POP CX POP BX RET DISP ENDP

GETNUM PROC NEAR PUSH CX XOR DX,DX

GGG: MOV AH,01H INT 21H CMP AL,0DH JZ PPP

CMP AL,20H JZ PPP

SUB AL,30H CMP AL,0 JB KKK CMP AL,0AH JB GETS JMP KKK

GETS: MOV CL,04 SHL DX,CL XOR AH,AH ADD DX,AX JMP GGG KKK: PUSH AX PUSH DX

MOV AH,09H

MOV DX,OFFSET ERROR

INT 21H

MOV MARK,01H POP DX POP AX PPP: PUSH DX MOV AH,02H MOV DX,07H INT 21H CRLF

POP DX POP CX

RET GETNUM ENDP CODE ENDS END START 运行结果:

4. 将键盘输入的小写字母转换成大写字母的设计

为了解小写字母的大写字母在计算机内的表示方法,并学习如何进行转换。编写程序,接收键盘字符,并将其中的小写字母转变为大写字母,然后显示在屏幕上。 程序流程图

入口 段寄存器和堆栈初始化 BX指向字符行缓冲区首址 偏移指针SI清0 INT 21H的01H号子功能接收键入字符 是—C键 是回车键 是小写字母 小写字母的ASCII码值转换为 大写字母的ASCII码值 存入字符行缓冲区[BX+SI]单元 SI+1指向下一单元 显示转换后的字符行缓冲区内容 返回DOS

程序代码为: DATA SEGMENT

T1 DB 'INPUT A STRING:','$' T2 DB 'THE RESUIT IS:','$'

D1 DB 100 DUP (?) D2 DB 100 DUP (?)

DISPP1 DB 0DH,0AH,'$' DATA ENDS

CODE SEGMENT

ASSUME CS:CODE,DS:DATA START:

MOV AX,DATA MOV DS,AX

MOV DX,OFFSET T1 MOV AH,9 INT 21H LEA BX,D1 LEA SI,D2 L1: MOV AH,1 INT 21H

MOV [BX],AL INC BX

CMP AL,0DH JZ L2

CMP AL,61H JB L3

CMP AL,7AH JA L3

SUB AL,20H MOV [SI],AL INC SI JMP L4

L3: MOV [SI],AL INC SI L4: JMP L1

L2: MOV BYTE PTR [BX],'$' MOV BYTE PTR [SI],'$' LEA DX,D1 MOV AH,9 INT 21H

CALL ENTER MOV AH,9 LEA DX,T2 INT 21H LEA DX,D2 INT 21H

MOV AH,4CH INT 21H

ENTER PROC LEA DX,DISPP1 MOV AH,9 INT 21H RET

ENTER ENDP CODE ENDS END START 运行结果:

5. 学生成绩名次表设计

为进一步熟悉排序方法。编写程序,将0-100之间的10个成绩存入首地址为1000H的存储区中。1000H+i表示学号为i的学生成绩。编写程序使得在2000H开始的区域排出名次表。2000H+i为学号i的学生的名次。 程序代码为:

CRLF MACRO MOV AH,02H MOV DL,0DH INT 21H

MOV AH,02H MOV DL,0AH INT 21H ENDM

DATA SEGMENT

STUNUM EQU 10

MESS1 DB 'Please input 10 score',0DH,0AH,'$' ERROR DB 'Input error,try again',0DH,0AH,'$' MESS2 DB 'The order is:',0DH,0AH,'$' EMARK DB ? ORG 1000H SCORE DB 10 DUP(?) ORG 2000H SEQU DB 10 DUP(?) DATA ENDS

STACK SEGMENT

STA DW 12 DUP(?) TOP DW ? STACK ENDS

CODE SEGMENT

ASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACK START: MOV AX,DATA

MOV DS,AX MOV ES,AX

MOV SP,TOP MOV AH,09H MOV DX,OFFSET MESS1 INT 21H

MOV SI,OFFSET SCORE MOV CX,STUNUM

MOV EMARK,0 UUU: CALL GETNUM CMP EMARK,01H JE START MOV [SI],DL INC SI LOOP UUU MOV CX,STUNUM MOV DI,OFFSET SEQU VVV: CALL SCAN MOV AL,STUNUM SUB AL,CL INC AL

MOV BX,DX PUSH AX PUSH BX PUSH CX XOR AH,AH MOV BH,0AH DIV BH MOV CL,4 SHL AL,CL ADD AL,AH MOV DH,AL POP CX POP BX POP AX

MOV [DI+BX],DH LOOP VVV MOV AH,09H LEA DX,MESS2 INT 21H

MOV CX,STUNUM MOV SI,OFFSET SEQU WWW: MOV AL,[SI]

CALL DISPI

PUSH DX PUSH AX

MOV AH,02 MOV DL,20H INT 21H

POP AX POP DX

INC SI

LOOP WWW MOV AH,4CH INT 21H

SCAN PROC NEAR PUSH CX MOV CX,STUNUM MOV AL,00H MOV BX,OFFSET SCORE MOV SI,BX CCC: CMP AL,[SI] JAE JJJ

MOV AL,[SI] MOV DX,SI SUB DX,BX JJJ: INC SI LOOP CCC ADD BX,DX MOV BYTE PTR [BX],00H POP CX RET SCAN ENDP

DISPI PROC NEAR PUSH CX

MOV BL,AL MOV DL,BL

MOV CL,04 ROL DL,CL AND DL,0FH CALL DISPL

MOV DL,BL AND DL,0FH CALL DISPL POP CX RET DISPI ENDP

DISPL PROC NEAR

ADD DL,30H MOV AH,02H INT 21H RET

DISPL ENDP

GETNUM PROC NEAR PUSH CX

XOR DX,DX GGG: MOV AH,01H

INT 21H CMP AL,0DH JZ RRR SUB AL,30H JB ERR CMP AL,09H JBE GETS JMP ERR GETS: MOV CL,04

SHL DX,CL XOR AH,AH

ADD DX,AX JMP GGG ERR: MOV AH,09H MOV DX,OFFSET ERROR INT 21H

MOV EMARK,01H RRR: PUSH DX

CRLF POP DX POP CX

RET GETNUM ENDP CODE ENDS

END START 运行结果:

6. 从键盘输入数据并显示设计

为掌握接收键盘数据的方法,并了解将键盘数据显示时须转换为ASCII码的原理。编写程序,将键盘接收到的四位十六进制数据转换为等值的二进制数,再显示在终端上。 程序流程图

入口 段寄存器和堆栈初始化 显示“请输入十六进制数” 调用GETNUM,接收键入数值,保存在BX中 计数值16送CX BX中内容循环左移1位 BL送DL,屏蔽掉DL高7位 DL加30H,变成二进制数对应字符的SCASCII码 显示 CX减1为0? 返回DOS

程序代码为:

DATA SEGMENT

CUE DB 'PLEASE INPUT SIXTEEN DATA',0DH,0AH,'$' CHA DB 0DH,0AH,'CHANGE NUM :',0DH,0AH,'$' DATA ENDS CODE SEGMENT

ASSUME CS:CODE,DS:DATA START:MOV AX,0 MOV AX,DATA MOV DS,AX

MOV DX,OFFSET CUE ;显示输入十六进制数 MOV AH,9 INT 21H CALL SHOW MOV AH,4CH INT 21H

SHOW PROC NEAR MOV CL,4 MOV CH,4 MOV BX,0

LP1: MOV AH,01H INT 21H

SUB AL,'0' ;存放差值 CMP AL,9 JNG LP

SUB AL,7

LP: ROL BX,CL ;十六进制数存放到BX中 OR BL,AL DEC CH JNZ LP1

MOV DX,OFFSET CHA MOV AH,9 INT 21H MOV CX,16

LP2: SHL BX,1 ;二进制转化 JC LP3 MOV DL,0 JMP NEXT LP3: MOV DL,1 NEXT: ADD DL,'0' MOV AH,2 INT 21H LOOP LP2 RET

SHOW ENDP CODE ENDS END START

运行结果

课程设计心得体会

通过对这程序的制作,使我对汇编语言的基本知识的使用更加熟练,同时也增加了我对汇编语言的一些认识,在作业完成过程中通过和同学的交流,也增加了合作的技巧。通过查阅资料也学到了一些课本上没有的东西,拓宽了自己的知识面,增加了学好汇编语言的信心。

在这次课程设计中,我真正体会到了合作的重要性,遇到很多问题时,当我看书查资料不能解决时,这是去找同学讨论一下,收获很大,可以使很多问题迎刃而解,直到问题最终解决。

本程序还存在不少缺点和不足,但通过这次课程设计的却找出了自己在学习上的不足,对以后的学习也有指导作用。我相信在以后的学习中会克服这些不足,达到熟练掌握汇编语言的目的!

本文来源:https://www.bwwdw.com/article/vlxx.html

Top