您的当前位置:首页江苏大学 《微机原理》课程设计报告

江苏大学 《微机原理》课程设计报告

2021-03-04 来源:爱问旅游网
《微机原理》课程设计报告

班级: 姓名: 学号:

一、目的

结合微机原理课程的学习,进一步巩固所学只是,掌握汇编语言的编程要领,熟悉汇编程序

上机过程以及进行程序调试。

二、设计任务,程序清单,流程图

任务1(具体题目要求): 字符串匹配设计

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

程序清单:

DATA SEGMENT

INPUT1 DB 'INPUT STRING1!',0DH,0AH,'$' INPUT2 DB 'INPUT STRING2!',0DH,0AH,'$' MAT DB 0DH,0AH,'MATCH!$' MISMAT DB 0DH,0AH,'NO MATCH!$' LEN1 DB 20

STRING1 DB 20 DUP(?) LEN2 DB 20

STRING2 DB 20 DUP(?) DATA ENDS

CODE SEGMENT

ASSUME CS:CODE,DS:DATA,ES:DATA MAIN PROC FAR MOV AX,DATA MOV DS,AX MOV ES,AX MOV AH,09H

MOV DX,OFFSET INPUT1 INT 21H

MOV AL,LEN1 MOV BX,OFFSET STRING1 MOV [BX],AL MOV AH,0AH

MOV DX,OFFSET STRING1 INT 21H CALL CRLF MOV AH,09H

MOV DX,OFFSET INPUT2

INT 21H MOV AL,LEN2

MOV BX,OFFSET STRING2

MOV [BX],AL MOV AH,0AH

MOV DX,OFFSET STRING2 INT 21H CALL CRLF CLD

LEA SI,STRING1 LEA DI,STRING2 MOV CX,5

REPE CMPSB JNE NOMAT MOV AH,9

MOV DX,OFFSET MAT INT 21H JMP EXIT NOMAT:MOV AH,9

LEA DX,MISMAT INT 21H EXIT: MOV AH,4CH INT 21H

CRLF PROC NEAR MOV DL,0DH MOV AH,2 INT 21H

MOV DL,0AH MOV AH,2 INT 21H RET

CRLF ENDP MAIN ENDP CODE ENDS END MAIN 流程

图:

开始 段寄存器初始化 显示“请输入字符串1” 使用INT21H的0A号子功能,接收键入字符串1 显示“请输入字符串2” 使用INT21H的0A号子功能,接收键入字符串1 字符串1和串2中所有字符作比较 所有字符相等吗? 显示“NOMATCH” 显示“MATCH” 返回DOS

……. 任务2(具体题目要求)

将键盘输入的小写字母转换为大写字母的设计

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

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

MOV DL,0AH INT 21H ENDM

DATA SEGMENT INPUT1 DB 100 DB 0

DB 100 DUP('$')

MES1 DB 'Please Input a String:',0DH,0AH,'$' MES2 DB 'The Output Is:',0DH,0AH,'$' DATA ENDS

CODE SEGMENT

ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX TISHI: MOV AH,09H

MOV DX,OFFSET MES1 INT 21H INPUT: MOV DX,OFFSET INPUT1 MOV AH,0AH INT 21H CRLF

MOV CX,00H

MOV CL,[INPUT1+1] LEA SI,[INPUT1+2]

NEXT: CMP BYTE PTR [SI],'a' JB CONT

CMP BYTE PTR [SI],'z' JA CONT

SUB BYTE PTR [SI],20H CONT: INC SI

LOOP NEXT TISHI1:MOV AH,09H

MOV DX,OFFSET MES2 INT 21H OUTPUT:LEA DX,[INPUT1+2] MOV AH,09H INT 21H

EXIT: MOV AH,4CH INT 21H CODE ENDS

END START 流程图:

开始 段寄存器初始化 显示“请输入一字符串” 使用INT21H的0A号子功能,接收键入字符串 输入字符串字符个数给CL 指针SI指向输入字符串首地输入是小于‘a’吗? 输入是大于‘z’吗? 将小写转换为大写 SI自加一指向下一字符 CL自减一 CL为0吗? 使用INT21H的09号子功能,输出大写字符串 返回DOS

任务3(具体题目要求) 键盘输入数据并显示的设计

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

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

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

DATA SEGMENT

MES1 DB 'Please Input The number:$' MES2 DB 'The Result Are:$' DATA ENDS

CODE SEGMENT

ASSUME CS:CODE,DS:DATA MAIN PROC FAR

START:MOV AX,DATA MOV DS,AX

TISHI: MOV DX, OFFSET MES1 MOV AH,09H INT 21H CRLF

MOV BX,0 MOV CX,4 INPUT: mov Ah,07H INT 21H

CMP AL,48 JB INPUT CMP AL,57 JNA TRANS CMP AL,97 JB INPUT CMP AL,102 jA INPUT JMP ENG

TRANS : MOV DL,AL MOV AH,02H INT 21H SUB AL,30H JMP FBI

ENG: MOV DL,AL MOV AH,02H INT 21H

SUB AL,57H FBI: CBW

XCHG AX,BX MOV DX,16 MUL DX

XCHG AX,BX ADD BX,AX

LOOP INPUT CRLF

DISP: LEA DX,MES2 MOV AH,09H INT 21H CRLF

MOV CX,16

BINARY :TEST BX,8000H JNZ XONE MOV DL,'0' MOV AH,02H INT 21H JMP NEXT XONE: MOV DL,'l' MOV AH,02H INT 21H NEXT: SHL BX,1 LOOP BINARY CRLF

EXIT: MOV AH,4CH INT 21H MAIN ENDP CODE ENDS END START

流程图:

开始 段寄存器初始化 使用INT21H的07号子功能,接收一个字符给AL AL小于‘0’吗? AL大于9吗? AL小于‘A‘吗? AL大于‘Z‘吗? 使用INT21H的02号子功能,显示输入字符 显示输入字符 AL减57H,将ASCII码转为十进制 AL减30H,将ASCII码转为十进制 显示输出提示 将输入4位ASCII码转换为一个四位十六进制数,放入BX 将BX左移16次分别与8000H运算输出16位二进制数 返回DOS

任务4(具体题目要求)

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

CRLF MACRO

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

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

DATA SEGMENT

MES DB 'INPUT STRING,THE END FLAG IS$!' MES1 DB 'The Data Nunmber Count Is:$' NUM DB 0 DATA ENDS

CODE SEGMENT

ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX TISHI: LEA DX,MES MOV AH,09H INT 21H CRLF

INPUT: MOV Ah,01H INT 21H CMP AL,'$' JZ DISP CMP AL,48 JB NEXT CMP AL,57 JA NEXT INC NUM NEXT: JMP INPUT DISP: CRLF

TISHI1: LEA DX,MES1 MOV AH,09H INT 21H CRLF

MOV AL,NUM MOV BL,AL

MOV CL,4 ROL AL,CL AND AL,0FH ADD AL,30H CMP AL,39H JBE K1 ADD AL,7 K1: MOV DL,AL MOV AH,02H INT 21H

AND BL,0FH ADD BL,30H CMP BL,39H JBE K2 ADD BL,7 K2: MOV DL,BL MOV AH,02H INT 21H MOV DL,'H' MOV AH,02H INT 21H CRLF

EXIT: MOV AH,4CH INT 21H CODE ENDS

END START 流程图: 小于0吗? 大于9吗? 开始 显示提示信息 使用INT21H的01号子功能,接收键入字符 是‘$‘字符? 显示提示信息1 统计字符个数按十六进制显示十六进制表示的个数 计数NUM加一 返回DOS 任务5(具体题目要求)

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

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

DATA SEGMENT

MES DB 'Please Input A Number,Press C To Exit:','$'

MES1 DB 'The Input Is Not A Number,Please Input Again:','$' DATA ENDS

CODE SEGMENT

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

MOV DX, OFFSET MES MOV AH,09H INT 21H CRLF

L3: MOV AH,01H INT 21H CMP AL,'C' JE EXIT

CMP AL,30H JB L2

CMP AL,39H JA L2

AND AL,0FH CMP AL,0 JE EXIT MOV BL,AL

L1: MOV DL,07H MOV AH,02H INT 21H

CALL DELAY DEC BL

JNZ L1 JMP L3 CRLF

EXIT: MOV AH,4CH INT 21H L2: CRLF

MOV DX, OFFSET MES1 MOV AH,09H INT 21H DELAY K2: K1: DELAY CODE

流程图:JMP L3

PROC NEAR

MOV DX ,02FFFH MOV AX,0FFFFH DEC AX NOP

JNZ K1 DEC dx JNZ K2

RET ENDP ENDS

END START

开始 段寄存器初始化 使用INT21H的01号子功能,读入键入字符 三、小结

是∧-C键? 是’0’~‘9’? 对应次数送BL 输出响铃字符 调用延时子程序 次数BL值减一 为0? 返回DOS

因篇幅问题不能全部显示,请点此查看更多更全内容