英⽂字母⼤⼩写转换程序设计(2)
摘要 (1)
数制转换 (2)
1 DOS功能调⽤介绍 (2)
2 设计⽅案 (5)
3 总程序 (6)
4 程序流程图及程序设计分析 (13)
4.1主程序流程图 (13)
4.2主程序流程图分析 (14)
4.3⼤⼩写转换⼦程序ABC (14)
4.3.1 ⼦程序ABC (14)
4.3.2 ⼦程序ABC的流程图 (16)
4.3.3 ⼦程序ABC流程图分析 (16)
4.4ASCII码转换⼦程序CBA (17)
4.4.1 ⼦程序CBA (17)
4.4.2 ⼦程序CBA的流程图 (18)
4.4.3 ⼦程序ABC流程图分析 (18)
5 程序运⾏实例 (19)
5.1⼤⼩写转换 (20)
5.2ASCII码转换 (20)
5.3输⼊⾮字符 (21)
5.4调试中出现的错误 (21)
6 ⼼得体会 (23)
参考⽂献 (24)
摘要
汇编语⾔是直接⾯向处理器(Processor)的程序设计语⾔。处理器是在指令的控制下⼯作的,处理器可以识别的每⼀条指令称为机器指令。每⼀种处理器都有⾃⼰可以识别的⼀整套指令,称为指令集。处理器执⾏指令时,根据不同的指令采取不同的动作,完成不同的功能,既可以改变⾃⼰内部的⼯作状态,也能控制其它外围电路的⼯作状态。汇编语⾔的主要特点是可以使⽤助记符来表⽰机器指令的操作码和操作数,可以⽤标号和符号来代替地址、常量和变量。这次课程设计的任务是⽤汇编语⾔进⾏⼀个数制转换,从键盘输⼊⼀串字符(⾮字符则不接受),通过屏幕提⽰菜单选择转换成ASCII码,或者进⾏⼤⼩写转换(原来是⼤写转换成⼩写,⼩写则转换为⼤写)并显⽰。先输⼊要转换的数据,再对数据进⾏检验判断其合法性,对不合法的数据进⾏警报并重新输⼊数据,对合法的数据按照要求进⾏⼤⼩写转换或者转换成ASCII,码,最后显⽰转换后的字符串。
关键词:DOS功能调⽤ ASCII码⼤⼩写转换
数制转换
1 DOS功能调⽤介绍
DOS是⼀个磁盘操作系统,也称为IBM-DOS或者MS-DOS。DOS不仅为⽤户提供了许多使⽤命令,⽽且还有⽤户可以直接调⽤的上百个⼦程序。对这些⼦程序的调⽤,称为系统功能调⽤。这些⼦程序主要完成⼀系列的管理功能。在使⽤时,⽤户不需要了解各种I/O接⼝硬件的详细情况,就能完成对I/O接⼝的控制和管理。为了使⽤⽅便,将所有⼦程序从1号开始顺序编号,
这些编号称为DOS 功能调⽤号。所以在进⾏设计之前,先要弄清楚DOS 功能调⽤。
常⽤的DOS功能调⽤:
1.键盘输⼊并显⽰(1号功能调⽤)
格式: INT 21H
功能:按下任何键,将其对应字符的ASCII码送⼊AL中,并在屏幕上显⽰该字符。如果按下的是Ctrl+Break组合键,则终⽌程序执⾏。1号功能调⽤⽆须⼊⼝参数,出⼝参数在AL中
2.键盘输⼊但不显⽰
格式: MOV AH, 08H
INT 21H
功能:同1号功能调⽤,但字符不在屏幕上显⽰。
3.屏幕显⽰⼀个字符(2号功能调⽤)
格式: MOV DL, ‘字符’
MOV AH, 02H
INT 21H
功能:将置⼊DL寄存器中的字符在屏幕上显⽰输出。
4.打印输出(5号功能调⽤)
格式: MOV DL, ‘字符’
MOV AH, 05H
INT 21H
功能:将置⼊DL寄存器中的字符送打印机接⼝,打印输出。
5.屏幕显⽰
格式: LEA DX, 字符串的偏移地址
MOV AH, 09H
INT 21H
功能:在屏幕上显⽰字符串。
在使⽤9号功能调⽤时,应当注意以下问题。
(1)待显⽰的字符串必须先放在内存⼀数据区(DS段)中,且以‘$’符号作为结束标志。
(2)应当将字符串⾸地址的段基址和偏移地址分别存⼊DS和DX寄存器中。6.字符串输⼊功能调⽤(0AH号功能调⽤)
格式: LEA DX, 已定义缓冲区的偏移地址
MOV AH, 0AH
INT 21H
功能:从键盘接收字符,并存放到内存缓冲区。完成字符串是什么
在使⽤0AH号功能调⽤时,应当注意以下问题。
(1)执⾏前先定义⼀个输⼊缓冲区,缓冲区内第⼀个字节定义为允许最多输⼊的字符个数,字符个数应包括回车符0DH在内,不能为“0”值。第⼆个字节保留,在执⾏程序完毕后存⼊输⼊的实际字符个数。从第三个字节开始存⼊从键盘上接收字符的ASCII码。若实际输⼊的字符个数少于定义的(2)应当将缓冲区⾸地址的段基址和偏移地址分别存⼊DS和DX寄存器中。7.返回DOS操作系统(4CH号功能调⽤)
格式: MOV AH, 4CH
INT 21H
功能:终⽌当前程序的运⾏,并把控制权交给调⽤的程序,即返回DOS系统,屏幕出现DOS提⽰符,如“C: \ >”,等待DOS命令。
8.直接输⼊、输出单字符(6号功能调⽤)
格式: MOV DL, 输⼊/输出标志
MOV AH, 06H
INT 21H
功能:执⾏键盘输⼊操作或屏幕显⽰输出操作,但不检查Ctrl+Break组合键是否按下。执⾏这两种操作的选择由DL寄存器中的内容决定。
(1)当(DL)=0FFH时,执⾏键盘输⼊操作。若标志ZF=0,AL中放⼊字符的ASCII码;若标志ZF=1,表⽰⽆键按下。这种调⽤⽤来检测键盘是否有键按下,但不等待键盘输⼊。
(2)当(DL)≠0FFH时,表⽰将DL中内容送屏幕显⽰输出。
9.检查键盘的⼯作状态(0BH号功能调⽤)
格式: MOV AH, 0BH
INT 21H
功能:检查是否有键盘输⼊,若有键按下,则使AL=0FFH,若⽆键按下,则AL=00H。对于利⽤键盘
操作退出循环或使程序结束之类的操作来说,这种调⽤是很⽅便实⽤的。
2 设计⽅案
本次课程设计的要求是:从键盘输⼊⼀串字符,通过屏幕提⽰菜单选择转换成ASCII码,或者进⾏⼤⼩写转换并显⽰。
设计的基本思路:
⾸先要先完成字符串的输⼊并存在buf1中,然后输⼊⼀个字符通过检验字符来选择跳转到相应的⼦程序中去进⾏ASCII码转换或者进⾏⼤⼩写转换,将转换后的字符串存放到buf2中;转换完成后跳转到输出部分即可完成程序功能;为了程序能重复运⾏,在代码段末尾加⼀条强制跳转语句跳到开头部分。
3 总程序
;*----------------------------------------------------------*
;* 输⼊⼀串字符(⾮字符则不接受) *
;* 原字符存放在buf1中 ,转换后的字符存放在buf2中 *
;
* 按照屏幕菜单选择进⾏ASCII码转换 *
;* 或者进⾏⼤⼩写转换 *
;*----------------------------------------------------------*
DATA SEGMENT ;数据段
input db 0ah,0dh,'if you want to quit ,please press Q/q! '
db 0ah,0dh,'press other key to zhuanhuan',0ah,0dh,'$'
;输⼊提⽰
inputmess db 0ah,0dh,'please input buf1:',0ah,0dh,'$' buf db 100
db ?
db 100 dup(0) ;字符缓冲区
ZHUANHUAN db 0ah,0dh,'if you want to change case press A/a! ' db 0ah,0dh,'if you want to transform to ascii press
B/b!',0ah,0dh,'$' ;转换提⽰
outputmess db 0ah,0dh,'after transform Character String BUF2 :' db 0ah,0dh,'BUF1:$' ;输出提⽰
BUF1 DB 100 dup(0)
chgline db 0ah,0dh,'BUF2:'
BUF2 DB 100 DUP(0)
BUF3 db 0ah,'$'
DATA ENDS
STACK1 SEGMENT STACK
DB 20 DUP(?)
STACK1 ENDS
CODE
SEGMENT ;代码段
ASSUME DS:DATA,SS:STACK1,CS:CODE
START:MOV AX,DATA
MOV DS,AX
AP: LEA DX,input ;输⼊提⽰
MOV AH,9
INT 21h
MOV AH,08h
INT 21h
CMP AL,'Q'
JE exit
CMP AL,'q'
JE exit
PA: LEA DX,inputmess
MOV AH,9
INT 21h
LEA DX,buf
MOV AH,10 ;输⼊字符
INT 21h
LEA di,buf+2 ;将字符存⼊缓冲区buf中
LEA si,buf1
MOV CX,0
next: MOV DL,[di]
INC di
CMP DL,0dh ;判断是否传送完毕
JNE aa
JMP end0
aa: MOV [si],DL ;将缓冲区buf中的内容存⼊buf1中
INC si
INC CX
JMP next
exit: MOV AH,4CH
INT 21H
end0: MOV byte ptr [si],'$'
INC CX
MOV BP,CX
MOV SI,OFFSET BUF1 ;建⽴源地址指针
MOV DI,OFFSET BUF2 ;建⽴⽬标地址指针
MOV CX,BP ;字节数送⼊CX寄存器
LEA DX, ZHUANHUAN ;输出转换信息,进⾏转换选择MOV AH,9
INT 21H
MOV AH,08
INT 21H
CMP AL,'A' ;检验输⼊的字符,输⼊A/a跳到AB进⾏⼤⼩: ;写转换,是B/b跳到BA进⾏ASCII转换
JE AB
CMP AL,'a'
JE AB
CMP AL,'B'
JE BA
CMP AL,'b'
JE BA
AB: CALL ABC ;调⽤⼦程序ABC
JMP L1
BA: CALL CBA ;调⽤⼦程序CBA
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论