欢迎来到沃文网! | 帮助中心 分享知识,传播智慧!
沃文网
全部分类
  • 教学课件>
  • 医学资料>
  • 技术资料>
  • 学术论文>
  • 资格考试>
  • 建筑施工>
  • 实用文档>
  • 其他资料>
  • ImageVerifierCode 换一换
    首页 沃文网 > 资源分类 > DOC文档下载
    分享到微信 分享到微博 分享到QQ空间

    代码转换程序设计.doc

    • 资源ID:1162299       资源大小:176.59KB        全文页数:24页
    • 资源格式: DOC        下载积分:10积分
    快捷下载 游客一键下载
    账号登录下载
    微信登录下载
    三方登录下载: QQ登录 微博登录
    二维码
    微信扫一扫登录
    下载资源需要10积分
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP,下载更划算!
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    代码转换程序设计.doc

    1、目 录摘 要11 设计任务及分析21.1 设计任务要求21.2 设计系统分析21.3方案比较及认证22 方案设计32.1 方案原理32.2指令功能32.3 主程序流程图53 源程序73.1主程序设计73.2子程序大小写字母转换及流程图123.3子程序ASCII码转换CBA及流程图144 程序运行及调试164.1大小写转换174.2 ASCII码转换174.3 输入非字符184.4调试中出现的错误184.5结果分析205 心得体会21参考文献22本科生课程设计成绩评定表摘 要汇编语言是直接面向处理器(Processor)的程序设计语言。处理器是在指令的控制下工作的,处理器可以识别的每一条指令称为

    2、机器指令。每一种处理器都有自己可以识别的一整套指令,称为指令集。处理器执行指令时,根据不同的指令采取不同的动作,完成不同的功能,既可以改变自己内部的工作状态,也能控制其它外围电路的工作状态。汇编语言的主要特点是可以使用助记符来表示机器指令的操作码和操作数,可以用标号和符号来代替地址、常量和变量。这次课程设计的任务是用汇编语言进行一个数制转换,从键盘输入一串字符(非字符则不接受),通过屏幕提示菜单选择转换成ASCII码,或者进行大小写转换(原来是大写转换成小写,小写则转换为大写)并显示。先输入要转换的数据,再对数据进行检验判断其合法性,对不合法的数据进行警报并重新输入数据,对合法的数据按照要求进

    3、行大小写转换或者转换成ASCII,码,最后显示转换后的字符串。关键词:DOS功能调用 大小写转换 ASCII码1 设计任务及分析1.1 设计任务要求(1)用汇编语言编写一个字母和数制之间的转换程序,设计出友好的交互界面;(2)实现小写字母和大写字母之间的相互转换;附加功能:将字符转换成其相应的ASCII码;(3)撰写课程设计说明书。内容包括:摘要、目录、正文、参考文献、附录(程序清单)。正文部分包括:设计任务及要求、方案比较及论证、软件设计说明(软件思想,流程,源程序设计及说明等)、程序调试说明和结果分析、课程设计收获及心得体会。1.2 设计系统分析DOS是一个磁盘操作系统,也称为IBM-DO

    4、S或者MS-DOS。DOS不仅为用户提供了许多使用命令,而且还有用户可以直接调用的上百个子程序。对这些子程序的调用,称为系统功能调用。这些子程序主要完成一系列的管理功能。在使用时,用户不需要了解各种I/O接口硬件的详细情况,就能完成对I/O接口的控制和管理。为了使用方便,将所有子程序从1号开始顺序编号,这些编号称为DOS功能调用号。所以在进行设计之前,先要弄清楚DOS 功能调用。1.3 方案比较及认证方案一:通过运用汇编语言提供的基本指令,加上运用适当的循环方式,按照要求设计指令来达到满足要求的目的。这种方式比较容易理解和编程,是考虑到程序可能有许多重复的地方,运用这种直接的方法就可能造成代码

    5、很多的结果。方案二:通过运用DOS函数调用,运用汇编语言提供的各种现成的函数来满足要求,也可以自己定义函数来达到某种要求,在重复使用时不用造重新编写,只需一个调用,大大简化了程序,这种方法更加简洁方便,所以选用这种方法。2 方案设计2.1 方案原理本次课程设计的要求是:从键盘输入一串字符,通过屏幕提示菜单选则进行大小写转换或者转换成相应的ASCII码并显示。设计的基本思路:首先要先完成字符串的输入并存在buf1中,然后输入一个字符通过检验字符来选择跳转到相应的子程序中去进行ASCII码转换或者进行大小写转换,将转换后的字符串存放到buf2中;转换完成后跳转到输出部分即可完成程序功能;为了程序能

    6、重复运行,在代码段末尾加一条强制跳转语句跳到开头部分。2.2 指令功能(1)键盘输入并显示(1号功能调用)格式:INT 21H功能:按下任何键,将其对应字符的ASCII码送入AL中,并在屏幕上显示该字符。如果按下的是CtrlBreak组合键,则终止程序执行。1号功能调用无须入口参数,出口参数在AL中(2)键盘输入但不显示格式:MOV AH, 08HINT 21H功能:同1号功能调用,但字符不在屏幕上显示。(3)屏幕显示一个字符(2号功能调用)格式:MOV DL, 字符 MOV AH, 02HINT 21H功能:将置入DL寄存器中的字符在屏幕上显示输出。(4)打印输出(5号功能调用)格式:MOV

    7、 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 功能:从键盘接收字符,并存放到内存缓冲区。 在

    8、使用0AH号功能调用时,应当注意以下问题。 1)执行前先定义一个输入缓冲区,缓冲区内第一个字节定义为允许最多输入的字符个数,字符个数应包括回车符0DH在内,不能为“0”值。第二个字节保留,在执 行程序完毕后存入输入的实际字符个数。从第三个字节开始存入从键盘上接收字符的ASCII码。若实际输入的字符个数少于定义的 2)应当将缓冲区首地址的段基址和偏移地址分别存入DS和DX寄存器中。(7)返回DOS操作系统(4CH号功能调用) 格式:MOV AH, 4CH INT 21H 功能:终止当前程序的运行,并把控制权交给调用的程序,即返回DOS系统,屏幕出现DOS提示符,如“C: ”,等待DOS命令。(8

    9、)直接输入、输出单字符(6号功能调用) 格式:MOV DL, 输入/输出标志 MOV AH, 06H INT 21H 功能:执行键盘输入操作或屏幕显示输出操作,但不检查CtrlBreak组合键是否按下。执行这两种操作的选择由DL寄存器中的内容决定。 1)当(DL)0FFH时,执行键盘输入操作。若标志ZF0,AL中放入字符的ASCII码;若标志ZF1,表示无键按下。这种调用用来检测键盘是否有键按下,但不等待键盘输入。 2)当(DL)0FFH时,表示将DL中内容送屏幕显示输出。(9)检查键盘的工作状态(0BH号功能调用) 格式:MOV AH, 0BH INT 21H 功能:检查是否有键盘输入,若有

    10、键按下,则使AL0FFH,若无键按下,则AL00H。对于利用键盘操作退出循环或使程序结束之类的操作来说,这种调用是很方便实用的。2.3 主程序流程图远程转移是段间的转移,目的地址与JMP指令所在地址不在同一段内。执行该指令时要修改CS和IP的内容。间接转移指令的目的地址可以由存储器或寄存器给出。段内间接转移 JMP WORD PTR OPRD ;IP=EA (由OPRD的寻址方式确定)。JMP WORD PTRBX IP=(DS)*16+(BX)JMP WORD PTR BX IP=(BX)段间间接转移 JMP DOWRD PTR OPRD;IP=EA,CS=EA+2该指令指定的双字节指针的第

    11、一个字单元内容送IP,第二个字单元内容送CS。JMP DWORD PTR BX+SI根据题目的要求和选择的指令,首先设计出主程序,其流程图如图2-1:开始输出字符串输入提示符将字符输入缓冲区,再传入buf1LEA DI,buf+2 LEA SI,buf1 CX置0将di赋给DL DI加1movsi,dl si,cx加1传送完成? N Y 建立目标、源地址指针 Y输出信息进行转换选择输入字符 判断是否为A/a Y判断是否为B/b N调用子程序ABC N调用子程序CBA进行ASCII转换 Y 输出 输出图2-1 主程序的流程图 3 源程序3.1 主程序设计根据课题的要求,首先设计友好的人机交互页面

    12、,编辑提示语,然后编辑自己所需的函数,通过DOS调用现成的以及自己编辑的函数,来满足题目要求。主程序如下: ;* 输入一串字符(非字符则不接受) * ;* 原字符存放在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

    13、,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)

    14、chgline db 0ah,0dh,BUF2:BUF2 DB 100 DUP($)BUF3 db 0ah,$DATA ENDS STACK1 SEGMENT STACK DB 20 DUP($)STACK1 ENDSCODE ;代码段SEGMENT ASSUME DS:DATA,SS:STACK1,CS:CODESTART:MOV AX,DATA MOV DS,AXAP: LEA DX,input ;输入提示 MOV AH,9 INT 21h MOV AH,08h INT 21h CMP AL,Q JE exit CMP AL,q JE exitPA: LEA DX,inputmess MO

    15、V AH,9INT 21h LEA DX,buf MOV AH,10 ;输入字符 INT 21h LEA di,buf+2 ;将字符存入缓冲区buf中 LEA si,buf1 MOV CX,0next: MOV DL,di INC di CMP DL,0dh ;判断是否传送完毕 JNE aa JMP end0aa: MOV si,DL ;将缓冲区buf中的内容存入buf1中 INC si INC CX JMP next exit: MOV AH,4CH INT 21Hend0: MOV byte ptr si,$ INC CX MOV BP,CX MOV SI,OFFSET BUF1 ;建立源

    16、地址指针 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进行大小: JE AB CMP AL,a JE AB CMP AL,B JE BA CMP AL,b JE BAAB: CALL ABC ;调用子程序ABC JMP L1BA: CALL CBA ;调用子程序CBA JMP L1ABC PROC ;子程序ABC AC: PUSH SI ;进栈 PU

    17、SH DI PUSH CX PUSH AX MOV AL,SI CMP AL,$ JE L1 ;判断大小写并进行大小写转换 CMP AL,a JL DBA CMP AL,z JL JK JMP PA JK: SUB AL,20H MOV DI,AL JMP AA0DBA: CMP AL, Z JL KK JMP PA KK: CMP AL,A JG LL JMP PA LL:ADD AL,20H MOV DI,ALAA0: INC SI INC DI DEC CX JNZ AC POP CX ;出栈 POP DI POP SIPOP AX RET ABC ENDP CBA PROC ;完成字符

    18、转换成ASCII的子程序 AD: PUSH SI ;进栈 PUSH DI PUSH CX PUSH AX MOV AL,SI CMP AL,$ JE L1 CMP AL,a JL ABD CMP AL,z JLE HW JMP PAHW: CBW MOV BL,10H ;将小写字母转换成ASCII DIV BL ADD AL,30H MOV DI,AL INC DI ADD AH,30H MOV DI,AH JMP BB0ABD: CMP AL ,Z JLE HO JMP PA HO: CMP AL,A JGE MO JMP PA MO: CBW MOV BL,10H ;将大写字母转换成ASC

    19、II码 DIV BL ADD AL,30H MOV DI,AL INC DI ADD AH,30H MOV DI,AHBB0: INC SI INC DI DEC CX JNZ AD POP CX ;出栈 POP DI POP SI POP AX RET CBA ENDPL1: LEA DX,OUTPUTMESS ;实现输出 MOV AH,9 INT 21H LEA DX,buf1 MOV AH,9 INT 21h LEA DX,chgline MOV AH ,9 INT 21h LEA dx,BUF3 MOV ah,9 INT 21h mov cl,100 mov si,0qinlin: m

    20、ov al,$ mov BUF2si,al inc si loop qinlin JMP APCODE ENDS END START把程序输入到emu8086中去,运行程序,打开屏幕界面,按照提示语的要求,输入相应的字符,按字母A/a或B/b来达到不同的目的。3.2 子程序大小写字母转换及流程图首先在屏幕上输出显示字符串输入提示符,再进行字符串的输入,输入字符串完成后在屏幕上输出转换信息:(选择输入A/a进行大小写转换或者输入B/b进行ASCII转换),接着输入一个字符,判断输入字符A/a还是B/b跳转到进行相应的转换(在子程序中判断是否有非字符,若有非字符则重新输入,没有则进行转换),转换完

    21、成后跳转到输出部分进行输出,程序结束。程序开始先取buf1中的字符,判断是否为字符,如果不是字符则不符合要求就不进行转换直接跳转到PA重新输入字符buf1;如果是字符则进行大小写转换,转换后的字符存储在字符串buf2中;之后SI、DI加1,CX减1,判断CX是否为零;如果CX为零说明完成转换,此时可以将SI、DI、CX、AX出栈,子程序结束;跳转到L1进行输出。否则继续取下一个字符进行转换,直至转换完成。ABC PROC ;子程序ABC AC: PUSH SI ;进栈 PUSH DI PUSH CX PUSH AX MOV AL,SI CMP AL,$ JE L1 ;判断大小写并进行大小写转换

    22、 CMP AL,a JL DBA CMP AL,z JL JK JMP PA JK: SUB AL,20H MOV DI,AL JMP AA0DBA: CMP AL, Z JL KK JMP PA KK: CMP AL,A JG LL JMP PA LL:ADD AL,20H MOV DI,ALAA0: INC SI INC DI DEC CX JNZ AC POP CX ;出栈 POP DI POP SIPOP AX RET ABC ENDP大小写字母转换流程图如图3-1:开始AX、CX、SI、DI入栈取buf1中的字符是否为字符?进行大小写转换SI、DI加1 ,CX减1CX是否为0?AX、

    23、CX、SI、DI出栈结束跳转到PA重新输入 N Y 图3-1 大小写字母转换流程图3.3 子程序ASCII码转换CBA及流程图CBA PROC ;完成字符转换成ASCII的子程序 AD: PUSH SI ;进栈 PUSH DI PUSH CX PUSH AX MOV AL,SI CMP AL,$ JE L1 CMP AL,a JL ABD CMP AL,z JLE HW JMP PAHW: CBW MOV BL,10H ;将小写字母转换成ASCII DIV BL ADD AL,30H MOV DI,AL INC DI ADD AH,30H MOV DI,AH JMP BB0ABD: CMP A

    24、L ,Z JLE HO JMP PA HO: CMP AL,A JGE MO JMP PA MO: CBW MOV BL,10H ;将大写字母转换成ASCII码 DIV BL ADD AL,30H MOV DI,AL INC DI ADD AH,30H MOV DI,AHBB0: INC SI INC DI DEC CX JNZ AD POP CX ;出栈 POP DI POP SI POP AX RET CBA ENDPASCII码转换子程序CBA流程图如图3-2:开始SI、DI、CX、AX入栈取buf1中的字符跳转到PA重新输入判断是否为字符 N N N 将字符转换成ASCII码 YSI加

    25、1,DI加1,CX减1 CX是否为0? N YSI、DI、AX、CX、出栈结束 图3-2 ASCII码转换子程序CBA流程图4 程序运行及调试根据题目要求:键盘输入一串字符(非字符则不接受),通过屏幕提示菜单选择转换成ASCII码,或者进行大小写转换(原来是大写转换成小写,小写则转换为大写)并显示。所以可能有三种处理结果:(1)输入字符串后进行大小写转换后输出显示在屏幕上;(2)输入字符串后将字符串转换成ASCII码输出显示在屏幕上;(3)输入的串中含有非字符,则不进行转换输出,跳到程序PA处重新输入字符。4.1 大小写转换当输入字符串为:WEIJIyuanli并且输入字符A/a进行大小写转换

    26、时得出结果如图4-1: 图4-1字母大小写转换图4.2 ASCII码转换当输入字符串为:daXUE,并且在下一步输入B/b将输入的字符转换成ASCII码输出得到的结果如图4-2:图4-2 字母转换为ASCII码4.3 输入非字符当输入的字符串为WUHAN888含有非字符时,字符串不进行转换,直接跳转到程序PA处,提示重新输入字符buf1,结果如图4-3:图4-3 出入非法字符4.4 调试中出现的错误(1)当判断字符串含有非字符时,直接跳转到重新输入的PA处,程序会发生如下错误:跳转时相对跳出范围N字节;所以要使用无条件转移指令JMP来解决这个问题;在其他处发生此类错误也是用同样的的解决方法。错

    27、误程序: ABD: CMP AL ,Z JG PA CMP AL,A修改后的程序: ABD: CMP AL ,Z JLE HO JMP PA HO: CMP AL,A(2)在实现输出L1部分处,输出buf1和转换后的buf2后,程序会输出处会有一小段乱码;解决的办法是:在输出结尾处增加输出换行buf3即可解决。错误程序: L1: LEA DX,OUTPUTMESS ;实现输出 MOV AH,9 INT 21H LEA DX,buf1 MOV AH,9 INT 21h LEA DX,chgline MOV AH ,9 INT 21h(3)调用子程序ABC或者CBA后已经完成了一种转换,需要跳转到

    28、输出部分L1实现输出,所以在调用完子程序后必须加一条无条件转换语句JMP,否则程序会继续执行到其他部分。错误程序: AB: CALL ABC ;调用子程序ABC修改后的程序: AB: CALL ABC ;调用子程序ABC JMP L1(4) 在输入字符是,输入的字符长度小于前面所输的字符长度时,会出现错误,即结果会显示上一次字符输入的部分结果,原因是buf2没有清空。如图4-4:解决方法是加一个buf2的指令段,如下所示:qinlin: mov al,$ mov BUF2si,al inc si loop qinlin 图4-4 第二次结果出错4.5 结果分析通过对程序的修改,在最初设计的程序

    29、上加上一部分指令,解决初始程序中的bug即不足,从而完善了程序,满足了要求。5 心得体会经过了将近两周的时间,我终于能写心得体会了,这也意味着我的课程设计基本结束了。在这两周的时间里,刚开始几天有3门专业课要考试,期间有一门自控要考试,都要花一些时间来复习,所以用来做课设的时间就相对来说没那么多了。从最初给大家分号题目,同时自己也分到了题目,看到题目和要求后,第一感觉觉得应该没有大问题,这些知识课本里面应该都学过,接着就是选择要用的指令了,虽然以前基本上都是直接使用mov等指令,基本上没用过DOS调用,但是出于编写程序的简洁明了,同时也是为了更进一步的学习汇编语言,本次课设还是选择了使用我不太

    30、熟悉的DOS功能调用,也算是挑战一下自己。 虽然这已经不是我第一次编写汇编程序,也不是第一次使用emu8086这个软件,但是通过本次课设我还是学到了很多的东西。以前编写程序时一般都是直接使用mov等指令,很少用到DOS调用,本次课设中初次采用这种指令,在编辑以及使用时还是遇到了很多的问题,还翻了学过的课本甚至是上网查一些资料,最初设计的程序有好几个小的漏洞及bug,在仔细分析的基础上,又加了一些指令在最初设计的程序上,经过在emu8086上的调试,最终实现了功能。通过对这程序的制作,使我对汇编语言的基本知识的使用更加熟练,同时也增加了我对汇编语言的一些认识,在作业完成过程中通过和同学的交流,也

    31、增加了合作的技巧。通过查阅以下资料也学到了一些课本上没有的东西,拓宽了自己的知识面,增加了学好汇编语言的信心。总之,本次课程设计我的收货是巨大的,不仅巩固了学过的微机原理知识,而且还熟练掌握了DOS调用。锻炼了自己独自发现问题,处理问题,到最后解决问题的能力。培养了独自学习的能力。不仅如此,本次课程设计还让我收获到了很多其他同学收获不到的东西。作为学习委员,本次课程设计由我提前联系了陈老师,通过跟老师的沟通了解本次课设对同学们的要求,负责安排教室组织大家集中在一起让老师给同学们当面提出本次课设的要求及安排,给同学们分配题目啊,帮助同学们解决遇到的困难啊等等,这些都是对自己很好的一个锻炼,同时也增强了自己跟老师还有同学们的交流,对自己的帮助很大。希望以后多经历一些类似事,从而更好的锻炼自己!参考文献1 彭虎,周佩玲,傅忠谦.微机原理与接口技术.电子工业出版社,20082 王萍.微机原理应用实践. 机械工业出版社,2001


    注意事项

    本文(代码转换程序设计.doc)为本站会员(精***)主动上传,沃文网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知沃文网(点击联系客服),我们立即给予删除!




    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服点击这里,给沃文网发消息,QQ:2622162128 - 联系我们

    版权声明:以上文章中所选用的图片及文字来源于网络以及用户投稿,由于未联系到知识产权人或未发现有关知识产权的登记,如有知识产权人并不愿意我们使用,如有侵权请立即联系:2622162128@qq.com ,我们立即下架或删除。

    Copyright© 2022-2024 www.wodocx.com ,All Rights Reserved |陕ICP备19002583号-1

    陕公网安备 61072602000132号     违法和不良信息举报:0916-4228922