班级: 姓名: 学号:
一、目的
结合微机原理课程的学习,进一步巩固所学只是,掌握汇编语言的编程要领,熟悉汇编程序
上机过程以及进行程序调试。
二、设计任务,程序清单,流程图
任务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
因篇幅问题不能全部显示,请点此查看更多更全内容