视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
汇编语言程序设计-代码转换
2025-10-02 04:35:02 责编:小OO
文档
课 程 设 计 任 务 书

专 业

计算机科学与技术班 级

姓 名

设 计 起 止 日 期

设计题目:  代码转换

设计任务(主要技术参数):

[1]硬件环境: CPU:1.6GH以上 

内存:4GB以上

[2]软件环境: 操作系统:Microsoft Windows xp

运行环境:TE.EXE

            MASM.EXE

            LINK.EXE

            DEBUG.EXE

[3]设计任务:本程序分为3个部分,运行程序,首先会显示主界面,用户可依据提示选择不同的编号,实现不同的功能:小写字母向大写字母的转换;大写字母向小写字母的转换;二进制数向十六进制数的转换;

指导教师评语:

成绩:      签字:

年   月   日

1 .课程设计的目的

本课程设计是在学完教学大纲规定的全部内容、完成所有实践环节的基础上,旨在深化学生学习的汇编语言课程基本知识,进一步掌握汇编语言程序设计方法,提高分析问题、解决问题的综合应用能力。

2  设计方案论证

2.1开发环境

软件环境:操作系统:Windows  xp 

硬件环境:处理器:英特尔 第三代酷睿 i3-3110M @ 2.40GHz 双核

          内存:4GB(三星 DDR3 1333MHz)

          主硬盘:希捷 ST500LM012 HN-M500MBB (500GB/5400转/分)

          显示器:三星 SEC39(14 英寸)

MASM开发环境:Masm是汇编编译器,是微软公司开发的汇编开发环境,拥有可   视化的开发界面,使开发人员不必再使用DOS环境进行汇编的开发的优点,支持伪指令和宏汇编,最后编译生成obj文件,通过link工具连接成可执行文件exe。

使用步骤为:a使用编辑软件TE.EXE进行源程序的编写。

            b使用汇编软件MASM.EXE对源程序汇编。

            c使用连接软件LINK.EXE对目标文件进行连接。

            d使用调试软件DEBUG.EXE对可执行程序进行调试。

2.2 总体设计功能

本程序分为3个部分,运行程序,首先会显示主界面,用户可依据提示选择不同的编号,实现不同的功能:小写字母向大写字母的转换;大写字母向小写字母的转换;二进制数向十六进制数的转换;

2.3详细设计功能

2.3.1大小写字母间的转换

当用户选择编号1,便选择了这一个功能。通过判断标识符,程序跳转到标识符所在的位置。通过改变ASSIC码值,实现大小写字母间的转换。显示转换后的字母,然后跳转到主菜单。

2.3.2二进制与十六进制数间的转换

当用户选择编号3,便选择了这一个功能。根据提示首先输入一个数字表示二进制的位数,在程序中有变量记录二进制的位数。再根据提示输入一个二进制数。其转换的主要思想是二进制数的每位代表十六进制的,通过移位来逐一将四个二进制位数的和转换成十六进制数保存在一个寄存器中,然后再继续按照每四位一求和的方法保存十六进制数的每一位,直到二进制数的所有位计算完毕,当对四位二进制数相加完毕后,将保存和的寄存器清零,采用相对寻址改变十六进制数每一位存放的位置。其中还会对十六进制每一位上的数字进行判断,若是大于9,则转换成相应的数字,最后采用相对寻址的方式将十六进制的每一位依次输出。显示完毕后,跳转到主菜单。

2.3.3退出

当用户选择编号q,便选择了退出。通过判断标识符,程序跳转到标识符所在的位置,实现退出。

2.4主程序功能

显示程序所能执行的四种功能选项以及推出选项,用户可根据给出的选项通过输入其序号来进入各子程序。

2.4.1主程序功能流程

主程序流程如图1。

图1 主程序流程图

2.4.2大小写字母转换子程序功能

该子程序能够实现从键盘读取字符后输出其对应大写或小写字符。

大小写字母之间的转换如图2、图3。

图2 小写字母向大写字母转换流程图

图3  大写字母向小写字母转换流程图

2.4.3进制转换子程序功能

该子程序能实现二进制与十进制之间的转换,二进制与十六进制之间的转换以及十进制和十六进制之间的转换。

  二进制向十六进制数的转换如图4。

图4  二进制向十六进制数的转换流程图

3. 设计结果与分析

3.1调试程序

启动DEBUG:C>DEBUG EXAM1.EXE

A汇编

U反汇编:

T单步执行:

G执行:

3.2运行程序

3.2.1进入主程序段显示提示信息,程序功能实现如图5所示:

 

图5 程序主界面图

3.2.2选择编号1进入大小写字母转换子程序,程序功能实现如图6所示:

图6大小写字母转换界面图

3.2.3选择编号2进入进制转换子程序,程序功能实现如图7所示:

图7二进制和十六进制转换界面图

3.2.4在运行过程中按“q”键为返回主页面。如图8所示:

图8 回到主界面图

4. 总结

通过本书的学习,我深入的掌握了汇编语言的编程方法、思路和技巧,并对计算机的底层编程有一定认识;还对计算机底层运行程序的机制及计算机的工作原理有了深入的了解。在学汇编的过程中,最重要的就是要掌握汇编语言中的指令的一些基本用法。当然要能够真正的了解其中的内涵,这样在实际的编程中也能够像运用高级语言一样灵活的变通。汇编语言作为一种低级程序设计语言,既然是低级所以应该是最底层的,与计算机内部的结构联系应该联系很密切,而且我在学习中也深刻的了解到了这一点。汇编程序给人感觉最烦的就是好多程序的结果不能直接通过运行EXE文件显示出来,而更多的是经过DEBUG单步调试才能看到其内在变化,看是否正确。汇编程序不像其他的高级语言一样需要编译器,而是直接的就能在记事本上编写,然后进行汇编和连接就可以了。

我认为汇编语言本身还是一门很重要的应用技术。首先由于汇编的操作由于跟硬件紧密相关,所以,很多硬件设施的嵌入式编程使用的都是使用的汇编语言,因为汇编语言更直接有效率。现在的数码产品很多,而这些数码产品赖以生存的芯片,主板等,都包含了嵌入式程序,而这些程序中,汇编语言的使用是相当重要的。  通过一段时间的自主学习,我常常上网搜索资料辅助理解,遇到难以理解的问题时也学会自己解决,我想这不仅是知识层面上的提升,更是自己在学习能力上的提升。这样的学习能力将非常有助于我今后的个人能力提高,我会把这种自主学习培养成为习惯,持之以恒下去。

5. 参考文献

[1] 王爽 汇编语言[M]. 第二版. 北京:清华大学出版社,2003:96-124

[2] 李真香,刘红海,赵润林. 汇编语言课程设计案例精编[M]. 第二版. 2004.4:73-82

[3] 仇玉章.32位微型计算机原理与接口技术[M].北京:清华大学出版社,2003.5:63-95

[4] 朱田,学峰,周豫滨译. 80386/80486编程指南[M],第1版.北京:电子工业出版社,1994:49-71

[5] 龚尚福. 微型计算机汇编语言程序设计[M]. 第一版. 西安:电子科技大学出版社,2003.7:45-71

6.附录(源代码)

 DATAS  SEGMENT

menu     DB    0AH, 0DH,  '-----------------------------------------'

        DB    0AH, 0DH,  'Please choice action:', 0AH, 0DH

        DB    0AH, 0DH,  '1.Letter change'

         DB    0AH, 0DH,  '2.Binary to Hexadecimal'

              DB        0AH, 0DH,  'q.Exit'

              DB        0AH, 0DH,  '-----------------------------------------', 0AH, 0DH,'$'

        STR1  DB        0AH, 0DH,  'Please input a Letter', 0AH, 0DH,'$'

       STR11  DB        0AH, 0DH,  'The big Letter is:', 0AH, 0DH,'$'

       STR12  DB        0AH, 0DH,  'The litte Letter is:', 0AH, 0DH,'$'

       STR13  DB        0AH, 0DH,  'Please confirm you just inputed is a Letter', 0AH, 0DH,'$'

        STR2  DB        0AH, 0DH,  'Please input the binary string, Enter to confirm', 0AH, 0DH, '$'

       STR21  DB        0AH, 0DH,  'The string Hexadecimal is:', 0AH, 0DH, '$'

        STR3  DB        0AH, 0DH,  'Please input the Hexadecimal string, Enter to confirm', 0AH, 0DH, '$'

       STR31  DB        0AH, 0DH,  'change to binary is:', 0AH, 0DH, '$'

        STR4  DB        0AH, 0DH,  'change to Decimal is:', 0AH, 0DH, '$'

       DATAS  ENDS

       CODES  SEGMENT

              ASSUME    CS: CODES, DS: DATAS

;宏定义 字符输入

      CHARIN  MACRO                 ;宏定义无参数的字符输入功能

              MOV       AH, 01H     ;系统调用 输入一个字符用于功能选择

              INT       21H         ;字符默认输入到AL中

              ENDM

;宏定义 数字输入 数字输入到AL中

       NUMIN  MACRO

              CHARIN

              SUB       AL, 48

              ENDM

;宏定义 字符串输入

       STRIN  MACRO     STRINGIN    ;将字符串输入到字符串STRINGIN中

              LEA       DX, STRINGIN            ;将STRINGIN的偏移地址送到DX寄存器

              MOV       AH, 0AH     ;0AH字符串输入功能

              INT       21H         ;调用系统中断

              ENDM

;宏定义 字符输出

     CHAROUT  MACRO     OUTCHAR     ;宏定义 将字符outchar输出

              PUSH      AX

              PUSH      DX

              MOV       DL, OUTCHAR

              MOV       AH, 02H     ;系统调用 输出字符outchar

              INT       21H         ;调用系统中断 调用过程中会改变AL中的值,故将AX中的值入栈保存

              POP       DX

              POP       AX

              ENDM

;宏定义 数字输出

      NUMOUT  MACRO     OUTNUM

              PUSH      AX

              PUSH      DX

              MOV       DL, OUTNUM

              ADD       DL, 48      ;将数值转换为对应得数值字符

              MOV       AH, 02H     ;系统调用 输出字符outchar

              INT       21H         ;调用系统中断 调用过程中会改变AL中的值,故将AX中的值入栈保存

              POP       DX

              POP       AX

              ENDM

;宏定义 字符串输出

      STROUT  MACRO     STRINGOUT   ;将字符串STRINGOUT输出

              PUSH      AX

              PUSH      DX

              LEA       DX, STRINGOUT           ;将STRIN的偏移地址送到DX寄存器

              MOV       AH, 9       ;09H字符串输出功能

              INT       21H         ;调用系统中断

              POP       DX

              POP       AX

              ENDM

;宏定义 换行

        ENDL  MACRO                 ;宏定义换行

              PUSH      AX

              PUSH      BX

              PUSH      CX

              PUSH      DX        

              MOV       DL, 0AH     ;先输出垂直Tab键

              MOV       AH, 2

              INT       21H         ;调用系统中断实现输出

              MOV       DL, 0DH     ;再将输出输出调至段首

              INT       21H         ;调用系统中断        

              POP       DX

              POP       CX

              POP       BX

              POP       AX

              ENDM

;宏定义 以baseNum进制输出AX中的数值

       OUTAX  MACRO     BASENUM     ;宏定义换行

              PUSH      AX

              PUSH      BX

              PUSH      CX

              PUSH      DX        

              MOV       BX, BASENUM ;将要转换成的进制存入BX作为除数

              CALL      OUTAXP      ;调用进制输出过程        

              POP       DX

              POP       CX

              POP       BX

              POP       AX

              ENDM

;过程定义    以baseNum进制形式输出存放在AX中的数值过程

      OUTAXP  PROC

              MOV       DX, 0       ;初始化DX配合AX一起进行处罚操作

              MOV       CX, 0       ;用CX计数取得个余数个数

          OUTAXP_CIRCLE:

              CMP       AX, 0       ;判断AX中的值是否为0

              JE        OUTAXP_NEXT ;是则跳转

              DIV       BX          ;不是则进行除10运算 商保存在AX中 余数保存在DX中

              PUSH      DX          ;将对10取到的余数入栈保存

              MOV       DX, 0       ;将DX中的余数清空 以便下一步对AX中的数进行除10运算

              INC       CX          ;计数循环取得的余数个数

              JMP       OUTAXP_CIRCLE        

            OUTAXP_NEXT:                        ;循环输出取得的余数

              POP       AX        

              CMP       AL, 10      ;当余数小于10时,直接将数值输出

              JB        NOUT

              ADD       AL, 55      ;否则将余数转化为对应的字符10对应字符'A'

              CHAROUT   AL

              JMP       COUT        

       NOUT:  NUMOUT    AL

       COUT:  LOOP      OUTAXP_NEXT

              RET

      OUTAXP  ENDP

;宏定义 以baseNum进制输入数据串到AX中,可输入2-37进制

        INAX  MACRO     BASENUM     ;宏定义换行

              PUSH      BX

              PUSH      CX

              PUSH      DX        

              MOV       CX, BASENUM ;将要转换成的进制存入BX作为除数

              CALL      INAXP       ;调用进制输入过程        

              POP       DX

              POP       CX

              POP       BX

              ENDM

;过程定义    以baseNum进制形式输出存放在AX中的数值过程

       INAXP  PROC

              MOV       AX,    0

     INAXP0:  PUSH      AX

     INAXP1:  CHARIN                ;逐个字符进行输入, 结果存放到AX中

              CMP       AL, 13

              JE        INAXE       ;当按下Enter键后跳转AX的输出

              CMP       AL, '0'

              JB        INAXP1      ;当输入字符小于'0'时,跳转inAXp1,跳转重新进行字符输入

              CMP       AL, '9'

              JA        INAXNEXT1   ;当输入字符大于'9'时,跳转inAXnext1进一步进行比较

              SUB       AL, 48      ;当字符在'0'-'9'之间时,将字符转化为对应的数值

              JMP       INAXNUM     ;跳转数值输入        

  INAXNEXT1:

              CMP       AL, 'A'

              JB        INAXP1      ;当输入字符小于'A'时,跳转重新进行字符输入

              CMP       AL, 'Z'

              JA        INAXNEXT2   ;当输入字符大于'Z'时,跳转inAXnext2进一步进行比较

              SUB       AL, 55      ;当字符在'A'-'Z'之间时,将字符转化为对应的数值,并跳转到数值输入

              JMP       INAXNUM        

  INAXNEXT2:

              CMP       AL, 'a'

              JB        INAXP1      ;当输入字符小于'A'时,跳转重新进行字符输入

              CMP       AL, 'z'

              JA        INAXP1      ;当输入字符小于'A'时,跳转重新进行字符输入

              SUB       AL, 87      ;当字符在'a'-'z'之间时,将字符转化为对应的数值,并跳转到数值输入

              JMP       INAXNUM        

    INAXNUM:  MOV       BH, 0       ;将数值送到AX中

              MOV       BL, AL

              POP       AX        

              CMP       AX, 0       ;当AX中的数值为0时,跳过乘法操作

              JE        INAXADD

              MUL       CX          ;乘以CX中的进制基数

    INAXADD:  ADD       AX, BX

              JMP       INAXP0        

      INAXE:  POP       AX          ;将计算得到的数值出栈到AX中

              RET

       INAXP  ENDP

      START:

              MOV       AX, DATAS   ;将数据段地址送到AX中

              MOV       DS, AX      ;由AX转送到送到DS        

         P0:  STROUT    MENU        ;字符串输出宏调用 输出menu的提示菜单

              CHARIN                ;宏调用 字符输入 选择相应功能

              CMP       AL, '1'

              JE        P1

              CMP       AL, '2'

              JE        P2

              CMP       AL, '3'

              ;JE        P3

              CMP       AL, '4'

              ;JE        P4

              CMP       AL, 'q'

              ;JE        Pq

              CMP       AL, 'Q'

              ;JE        PQ

              JMP       P0        

         P1:  ENDL

              STROUT    STR1

              CHARIN                ;输入字母到AL中        

              CMP       AL, 'A'

              JB        OUTRANGE    ;当字符小于'A'时超出范围,给出提示信息

              CMP       AL, 'Z'

              JA        CMPNEXT     ;当字符大于'Z'时进一步进行范围的确定

              ADD       AL, 32      ;输入的字符范围在'A'-'Z'之间时转换为小写字母

              STROUT    STR12       ;输出AL中的字符前给出提示信息

              JMP       OUTAL        

    CMPNEXT:

              CMP       AL, 'a'

              JB        OUTRANGE    ;当字符小于'a'时超出范围,给出提示信息

              CMP       AL, 'z'

              JA        OUTRANGE    ;当字符大于'z'时超出范围,给出提示信息

              SUB       AL, 32      ;输入的字符范围在'a'-'z'之间时转换为小写字母

              STROUT    STR11       ;输出AL中的字符前给出提示信息              OUTAL:  CHAROUT   AL

              JMP       P0        

   OUTRANGE:

              STROUT    STR13       ;超出范围,给出提示信息

              JMP       P0        

         P2:  STROUT    STR2

              INAX      2           ;以2进制输入数据串到到AX中

              ENDL

              STROUT    STR21

              OUTAX     16          ;以16进制的形式输出AX中的数值

              JMP       P0

        PQ:  MOV       AH, 4CH     ;调用 系统结束

              INT       21H

              JMP       P0

               CODES  ENDS

              END       START下载本文

显示全文
专题