范文大全

汇编语言范例

作者: 爱可网 时间:2024年04月10日 来源:www.ik35.com

汇编语言范例篇1

  关键词:C语言,汇编语言,混合编程

  现代电子设备中DSP芯片的开发越来越多地得到应用,使用C语言开发的DSP程序可读性和可移植性好,开发周期短,程序修改方便。但在某些情况下,C代码的效率还是无法与汇编代码的效率相比,而且一些硬件控制功能也不如汇编语言方便,甚至有些操作C语言无法直接实现。因此在DSP的软件开发中常用汇编语言实现对硬件的直接控制或用来编写一些效率要求较高的程序段,但由于汇编语言的移植性和可读性差,所以常采用混合编程的方法,以便达到最佳效果。

  混合编程中两种语言相互调用,进行参数传递,共享数据结构及数据信息,但是由于两种语言在程序格式、函数调用、寄存器使用等方面都有不同之处,因此混合编程中主要是要解决二者的接口和参数传递问题。下面以C为例说明混合编程的几种实现方法:

  一、直接在C程序中嵌入汇编语句

  这种方法比较简洁直观,可以将C程序中无法实现的硬件控制及需要较高效率的关键部分用汇编语句编写,以优化程序。论文参考网。但这种方法的缺点是比较容易破坏C环境,因为C编译器在编译嵌入了汇编语句的C程序时并不检查或分析所嵌入的汇编语句。在Turbo C中嵌入汇编语句由关键字asm引导,其格式为:

  ASM操作码 [操作数],[操作数]

  例如在C语言源程序example1.c中嵌入汇编语言的语句

  main()

  {

  int x;

  int y;

  x=8;y=10;

  asmmov ax, [y]

  asmadd [x],ax

  printf (“x:%d ”,x)

  }

  上述C语言源程序不能用集成编辑器,因为编辑器tc。exe不支持嵌入式汇编程序,只能用DOS命令行tcc。exe实现。

  二、独立的C和汇编模块接口

  这种方法是混合编程中常用的方法,关键是要解决好汇编语言与高级语言的数据通讯。在这种方式下两种语言分别编写,分别产生各自的obj文件,然后经过连接,形成一个完整的程序,采用这种方法比较灵活,在使用中要遵循有关的调用规则和寄存器规则。

  1、混合编程的规则

  1)命名约定: C编译器对C源程序编译时要将其中的变量名、 函数名等标识符前加下划线,而汇编程序在汇编时直接使用,所以被C语言调用的汇编程序有标识符前都要加下划线。

  2)声明约定: 在C语言中对C所使用的外部变量、过程、函数均用EXTERN说明:

  extern 类型 函数名(参数表);

  extern 类型 变量名;

  使用前均应放在函数体外进行说明

  3)汇编语言的变量名、子程序名等标识符,为了能让其他模块可见必须用public操作符定义它们。如

  public

  _bof,_array

  4)由于C语言对大小写字母的区别,在汇编程序中子程序名和变量名都要使用小写字母。

  2、寄存器的使用规则

  对于寄存器AX、BX、CX、DX和ES在汇编语言中可任意使用,对于寄存器BP、SP、DS、CS和SS,如果C语言要求保护,在汇编语言子程序中使用它们之前,先进行保护,使用后再加以恢复。对于指针寄存器SI和DI,C语言用作寄存器变量,因此在汇编语言程序中使用它们之前都要进行保护,返回时再将其恢复。

  3、混合编程的参数传递和返回

  C语言程序调用汇编语言子程序时,参数通过堆栈传递给汇编程序。参数由C传递给汇编时,参数以其在参数表中出现的反序入栈,然后再存入主程序的返回地址IP的值。当被调用函数或子程序运行结束后,C主程序会自动调整堆栈指针SP使之恢复到压入参数之前的状态,不需要程序员平衡堆栈。但编程时应注意不同类型的参数占用字节数也不同如int占2个字节,real占8个字节,同时还要注意近调用和远调用时段地址CS和偏移地址IP在栈中占用字节数也不同。 当汇编子程序中有值返回时,若返回的结果是短整数,放在AX中,若为长整数放在DX:AX中。

  4、编译连接

  分别用C语言和汇编语言写出源程序后,下面就是要进行编译、连接生成可执行文件,这时可用Turbo C的tcc命令来完成。

  其格式为:tcc [编译参数表] 文件名1文件名2…。。文件名n

  其功能是通过设置不同的编译参数将指定的各个文件编译连接。当文件中有扩展名为。asm的汇编源程序时,tcc命令立即调用tasm。exe宏汇编程序,对。asm源程序进行汇编。论文参考网。同时要注意如果用户使用的是masm。exe汇编程序时,要将masm。exe改名为tasm。exe,并和tcc命令存放在同一目录下。

  三、利用codecomposer集成开发环境进行修改

  这是一种简便易行快速优化C语言代码的方法,在Code Composer集成开发环境中,选择View菜单下的MixedSource/ASM选项即可看到交叉列表的汇编程序。在所生成的语句中,每个C语句的下面就是C编译器对该C语句编译所生成的汇编语句。论文参考网。通过查看交叉列表的汇编程序,可以对某些编译不是很优但却是比较关键的汇编语句进行修改。修改汇编语句时,必须严格遵守不破坏C环境的原则。

  参考文献:

  郭咏梅。C语言程序与汇编语言程序的接口分析[J]。电脑学习,2002.(1):26-29

汇编语言范例篇2

  关键词:汇编语言;教学改革;课程建设;教学研究

  中图分类号:G424文献标识码:A文章编号:1009-3044(2010)21-5894-02

  汇编语言是一种功能强大计算机底层编程语言,是高校电子信息类专业的一门主干课程。汇编语言也是计算机专业的核心课程,是硬件方向的专业基础课程,它是系统了解一台计算机运行的必修知识,它与计算机组成原理、微机原理、计算机体系结构等课程共同描述了一台PC机的正常工作流程。汇编语言也是单片机和嵌入式等课程学习的基础,同时,它也能够为更深入的理解高级语言的运行原理提供了依据。汇编语言是一门具有硬件特性的语言,是高效和灵活指挥计算机工作的必不可少的工具,虽然在计算机语言高级化可视化的大环境下汇编语言的显得地位越来越不重要,但是在单片机以及嵌入式等开发领域仍然离不开汇编语言。

  1 汇编语言教学中的若干问题

  汇编语言难学是汇编教学中的一大难题,这其中有课程本身的因素,也有教师、学生和教学环境等方面的因素。

  1.1 汇编语言本身学习难度大

  汇编语言是一种硬件编程语言,抛开硬件谈汇编将成为空中楼阁。但是,目前的课程安排不尽合理,知识的先后顺序被课程割裂开来,不能系统的全面描述汇编语言的硬件特性,汇编语言要在完整的硬件体系中才能体现出其重要性,而完整的硬件知识构建需要多门课程的学习,这是一个矛盾。

  其次,课程本身难度较大。学好汇编语言需要不单单要研究汇编的语法,还要汇编语言有大量的指令和语法规则需要记忆,较繁琐;需要具备一定的计算机硬件基础知识相配合;是一门比较抽象的课程,课程中所讲授的内容较难理解,容易感到枯燥、厌烦,导致产生厌学情绪;上机调试结果不直观且容易出错,这些特点都使得汇编语言这门课比较难学。

  1.2 学生对汇编的畏惧

  首先,学生的学习方法不合理。大学的入门学习语言往往是一门高级语言,如C或C++等。学生在学习汇编语言时,总会借鉴在高级语言学习过程中的一些方法,但是汇编语言和高级语言的学习方法有很大的不同。高级语言不和具体硬件相又比较接近自然语言,所以很容易被理解,可视化编程易于理解和上机操作,相关高级语言算法实验可以解决实际学习中的一些问题,也容易激发学生的学习积极性。而汇编语言却必须和看不到的硬件打交道,相对比较抽象,还有更多琐碎的概念需要记忆,学习起来需要更多的努力,对汇编稍有松懈就可能掉队。在大信息量的多媒体教学情况下,更需要学生在课下多下功夫。

  其次,大多数计算机专业学生学习兴趣普遍倾向于软件和网络方向,对硬件方向的课程汇编语言的学习普遍比较放松。

  1.3 教师教学方法需要进一步改进

  最后,老师在授课过程中没有充分调动学生的积极性。很多老师都没有汇编语言的工程使用经验,在讲授课程中完全依赖于课本,课程内容比较枯燥,实验内容比较简单,很难激发学生的学习积极性。还有些老师针对汇编讲汇编,不能够融汇其它硬件课程内容,难以生动的讲述汇编的硬件特性。另外,目前的汇编语言课程实验内容比较简单,实验课时相对较少,很难激发学生的学习兴趣和培养学生的编程能力。

  1.4 重软件轻硬件还很普遍

  目前,不少高校教育经费紧张,对于计算机专业倾向于投资效益比较高的软件方向,致使硬件教学环境比较落后。同时,硬件课程方面的师资力量也比较薄弱,不能与硬件技术发展与时俱进,汇编语言教学内容和思想都比较陈旧。此外,计算机专业软件方向人才的需求比较旺盛,占用人量的比例很高,也容易让人冷落硬件方向建设。汇编语言的课程地位正在“重软件,轻硬件”的大环境下被逐步弱化,有些学校开始将汇编语言课程合并至其它硬件类课程,比如单片机、计算机组成原理等,还有的专科学校干脆完全放弃汇编类课程。

  1.5 教学设施还有待完善

  目前,硬件方向的教材和实验环境得到了很大改善,但是还不能满足汇编语言的教学需要,这体现在两个方面。

  首先硬件基础课程教材的系列化。虽然硬件类课程出自统一出版社的系列,但却是由不同学校不同观点不同经验的老师编写的,所谓的系列化的教材只是封面的系列化,而具体的内在知识体系的系列化却没有体现出来。当前应该围绕一批硬件类精品课程和精品教材进行延伸的教材编写,从内在的知识系统上系统化,也可以积极组织相关经典教材的编写着共同参与制定系列化的教材编写方案。

  其次是汇编语言硬件实验平台的开发。汇编语言的上机环境比较简单,相关配套设备缺乏,不能调动学生的学习积极性。应当开发相应的有一定技术难度的汇编语言实验平台,并基于平台改革实验内容,充分调动学生的积极性。

  2 汇编语言教学的若干建议

  2.1 明确汇编语言的地位和作用

  可以用三个必须来重新认识汇编语言。必须明确汇编语言在计算机类本科教学中的核心地位,它是系统理解计算机系统工作的必修课程,将为其它课程学习提供理论支持。必须明确汇编语言在当前信息技术领域中的地位,它是进行信息系统建设特别是嵌入式系统的开发不可缺少的语言,虽然代码量不多但却都是精华。必须回归汇编语言的真实面目,它并不像学生中流传中的那样难学,只要学习方法对头汇编语言就很容易能学好,这需要任课老师在上课中能够学生足够的辩证讲解。

  2.2 改革教学方法

  汇编语言的教材经过多年建设已经出现了不少经典教材,内容结构清晰,语言描述通俗易懂,针对汇编语言的基础知识学生一般都可通过自学获得理解。所以,老师在上课的时候应该减少讲述的内容,做到课堂精讲,并要结合其它课程内容来叙述汇编的作用和来历,重点讲解汇编语言知识在整个硬件知识体系中的作用。课堂精讲,实验要多练,加大实验教学的课时和难度,加大实验在课程考核中的比例。

  2.3 加强师资力量建设

  加强汇编语言师资力量建设,是改善当前汇编语言教学的核心工作。当前的汇编语言教学师资力量极度缺乏,很多任课老师均是围绕课本讲代码,围绕例子将代码,没有相关技术的开发经验,有的甚至没有见到过相应的实际开发例程。当前汇编语言的开发例程很少,老师参与相关工程开发的机会很少,所以应该专门设计一套面向教学的开发例程,围绕这一例程进行相应的师资培训。笔者建议以该例程可以定位在汇编语言在嵌入式开发领域的应用。

  2.4 加强汇编语言教学的设施

  汇编语言的不是独立的语言课程,它有相应的硬件课程作为支撑,并为其它硬件课程提供语言基础。加强汇编语言的教学设施应该着眼于整个硬件类课程的建设,汇编语言只有在一个硬件课程体系中才能显示出它的光彩。其课程的教学设施主要包括硬件类教材体系的建设、开发试验平台的建设和实验内容的建设。

  3 总结

  信息技术的风起云涌总让人把陈旧不变的汇编语言遗忘,汇编语言的教学困境的根本原因是固守陈旧的知识和陈旧的教材停止不前,逐渐的让教师和学生失去兴趣。对于老师,深入汇编语言教学很难出科研成果,于评职称无用;对于学生,学了汇编语言少有用武之地,于找工作无助。对于当前的困境,应该大力崇尚教学神圣的观点的同时,在实际工作中的考核中给予更多体现,让有教学成果的教师也可以成名成家,让相关老师可以放心的投入到汇编语言课程的建设中去。对于学生,要教育他们少些功利的学习思想,多一些远见,着眼于更全面的技术成长。虽然汇编语言的学习有一定的难度,但是在老师、学生和相关部门的共同努力下一定会得到较大的改善。

  参考文献:

  [1] 沈美明,温冬婵。IBM PC汇编语言程序设计[M]。2版。北京:清华大学出版社,2003.

汇编语言范例篇3

  关键词:汇编语言;开发环境;JavaSwing

  中图分类号:TP311 文献标识码:A 文章编号:1009-3044(2012)31-7485-04

  现在通用计算机体系结构仍然采用的是冯·诺依曼提出的思想,把程序存储到内存中,数据的存储格式采用二进制的方式;然而软件的发展比硬件的发展要快,它的发展主要体现在编程语言上面,面向机器的机器语言,这种语言只有少数研究人员才懂,很难记忆,而且很难查错;汇编语言,汇编语言比机器语言高级,通过伪指令的方式进行表示指令的意义,更容易记忆,相对来说,更容易看懂;面向过程的语言,典型的是C语言,至今仍然是最受人欢迎的语言,在世界排行榜上至今位居榜首,主要是进行系统级的开发,现在的嵌入式系统主要使用的语言就是C语言。然后就是面向对象的语言,典型的是C++,Java,C#,更加接近人类的思考方式的语言,相对来说更容易掌握。

  然而汇编语言是唯一能够直接操纵硬件设备,并且效率高的一门语言;汇编语言的实时性能很高,在一些简单,实时性要求很高的嵌入式产品上仍然采用汇编语言进行编码。所有的嵌入式产品的启动代码都是汇编语言写的,汇编语言是不可被替代的。汇编语言的学习对于一个学习计算机的人来说是至关重要的,懂不懂汇编语言,是衡量计算机专业人员的的一个重要指标。汇编语言的核心就是计算机的体系结构,寻址方式,指令系统,计算机中数的表示方式,计算方法,计算机的指令运行流程等;对于追求高效的程序员来讲,这是必修课,是不可缺少的利器。然而,汇编语言的学习是很困难的,首先困难的地方就是一堆的指令,很难在短时间内记住。然后就是编译的过程很繁琐,需要使用几个不同的工具,一步一步的生成可执行文件。在这个过程中使人慢慢的就失去了信心,觉得太难,不学了,甚至对编程都失去了兴趣。

  从Windows划时代的图形界面的推出,这种人机界面的交互方式逐渐被广泛接受。在Windows上的很多编程语言都推出了具有图形界面的集成开发环境,C/C++的vVisual Studio系列,JAVA的eclipse,进行嵌入式开发的交叉编译环境如Keil,IAR等。对于汇编语言的集成开发环境,已经存在,但是一般都是具有专利的,而且需要付费才能使用,有些不需要付费,但是界面不够简洁,一个纯粹的编译环境,不具备有关键字汇编指令提示信息,查找汇编指令的内容,没有对关键字进行颜色区分,颜色很单调,对于编写的汇编代码没有记忆功能,如果需要查看之前写的代码,需要重新加载,操作很繁琐,不是很方便。介于这些原因,开发一款免费的,适合于广大的对计算机充满热情的,打算学习汇编语言的人的系统成为一个重要的课题。这个系统具有编程语言的集成开发环境所具有的一般特点,能够进行代码的编辑,能够阅读纯文本,后缀名为。c、。cpp、。asm等格式的源代码,能够对进行阅读的文件进行修改,并能够进行保存,能够新建一个文件,并生成汇编的一般模版格式,减少用户编码不必要的工作,能够对编写的源码进行编译生成。obj目标文件,并且通过连接所有的目标文件生成最终的可执行文件。而且能够进行单步调试,兼容debug的命令,为用户以后的学习打下基础,并且能够编写学习文档,能够生成一个word的文档,记录学习汇编语言的点滴历程,增强用户学习汇编语言的信息,记录下重要的,经常出错的学习点,为以后出现的错误提共查错解决问题的依据。

汇编语言范例篇4

  关键词:加密算法DES汇编语言

  目前在金融界及非金融界的保密通信中,越来越多地用到了DES算法。DES(DataEncryptionStandard)即数据加密算法,是IBM公司于1977年研究成功并公开发表的。随着我国三金工程尤其是金卡工程的启动,DES算法在POS、ATM、磁卡及智能卡(IC卡)中被广泛应用,以此来实现关键数据的保密。如信用卡持卡人的PIN的加密传输、IC卡与POS间的双向认证、金融交易中的密码键盘等,均用到DES算法。由于密码键盘不可能使用高级语言,所以用汇编语言实现DES就非常实用。

  1DES算法的简单原理

  DES是一种分组密码。假定明文m是由0和1组成的长度为64位的符号串,密钥k也是64位的0、1符号串。

  设:M=m1m2m3…m64

  K=k1k2k3…k64

  加密过程可表达如下:

  DES(m)=IP-1·T16·T15…T2·T1·IP(m)

  其中:IP(m)是初始置换,IP-1是逆置换,T16~T1是16次迭代。

  (1)初始置换IP

  功能是把输入的明文m按位重新组合,并把输出分为L0、R0两部分,每部分各长32位,其置换规则如下:

  58,50,42,34,26,18,10,2,

  60,52,44,36,28,20,12,4,

  62,54,46,38,30,22,14,6,

  64,56,48,40,32,24,16,8,

  57,49,41,33,25,17,9,1,

  59,51,43,35,27,19,11,3,

  61,53,45,37,29,21,13,5,

  63,55,47,39,31,23,15,7

  (2)逆置换IP-1

  经过16次迭代运算后,得到L16、R16,将此作为输入,进行逆置换。逆置换满足:

  IP·IP-1=IP-1·IP=I

  逆置换正好是初始置换的逆运算。

  (3)T16~T1的迭代计算

  DES的迭代算法采用模2加法。

  在通信网络的两端,双方约定了一致的密钥。在通信的源点用密钥对核心数据进行加密并形成密文,然后,以密文的形式在公共通信网中传输到通信网络的终点。数据到达终点后,用同样的密钥对密文数据进行解密,便再现了明文形式的核心数据。这样,便保证了核心数据(如PIN、MAC等)在公共通信网中传输的安全性和可靠性。

  2汇编语言的实现

  用汇编语言实现DES算法有它的优势也有它的难点。优势是51汇编的位操作可以方便地实现置换功能。但用汇编语言实现算法的迭代运算及循环功能比较烦琐。在用51汇编实现DES的过程中,我编写了几个子程序,组合起来可实现DES算法加密。在这里写出一些思路,有需要的同行可与我联系(E-mail:zhoubin@)。

  8031有16个可以位寻址的寄存器,可放置128位的数据,利用它可实现DES的转置功能。将明文m放入寄存器27H~20H中,即位地址00H对应m64,3FH对应m1.利用标志寄存器C可实现置换与逆置换程序。在DES的16次迭代过程中,要实现公式:

  Li=Ri-1;Ri=Li-1f(Ri-1,ki)

  的运算过程,其关键在于f(Ri-1,ki)的功能。f是将32位的输入转化为32位的输出。其中含3项技术:

  ①将32位膨胀为48位的E功能。该项功能可用类似于置换功能的子程序编写。

  ②48位子密钥的生成。为了便于51汇编生成子密钥,可以使用主机用串口下传的方式,由主机将16个子密钥传给89C52为核心的单片机,然后存入80H~FFH中。如果密钥是固定的,则可直接将子密钥固化在89C52的Flash中。

  ③S盒的功能是将48位的输入再次缩为32位。具体实现是将S盒表存入89C52的Flash中,每次通过查表求得S输出的结果。

  下面列举其中的几个子程序。

  (1)IP置换子程序

  ;入口寄存器:(MSB)2726252423222120(LSB),出口寄存器:(MSB)2F2E2D2C2B2A2928(LSB)

  ;功能:将入口寄存器的数据按置换表换位。

  IP:MOVC,06H;将m58送到进位标志中

  MOV7FH,C;将进位标志送m1中

  MOVC,0EH;将m50送到进位标志中

  MOV7EH,C;将进位标志送m2中

  ;重复,按表编写MOVC,31H;将m15送到进位标志中

  MOV41H,C;将进位标志送m63中

  MOVC,39H;将m7送到进位标志中

  MOV40H,C;将进位标志送m64中

  RET

  (2)逆置换子程序

  ;入口寄存器:(MSB)2726252423222120(LSB),出口寄存器:(MSB)2F2E2D2C2B2A2928(LSB)

  ;功能:将入口寄存器的数据按逆置换表换位。

  IPRVS:MOVC,18H;将m40送到进位标志中

  MOVC,38H

  。

  (3)异或子程序

  ;入口寄存器:272625243F3E3D3C,出口寄存器:2B2A2928

  ;功能:将寄存器27262524的内容和寄存器3F3E3D3C的内容异或。结果保存在2B2A2928寄存器中。

  XORLF:MOVA,3FH;将高8位异或

  XRLA,27H

  MOV2BH,A;放入出口处

  MOVA,3EH

  XRLA,26H

  MOV2AH,A

  MOVA,3DH

  XRLA,25H

  MOV29H,A

  MOVA,3CH

  XRLA,24H

  MOV28H,A

  (4)S盒子程序

  ;入口寄存器:(MSB)2F2E2D2C2B2A2928,出口寄存器:(MSB)27262524

  ;功能:48位32位

  S6TO4:MOV20h,2FH;取出高位数据

  LCALLS162345;调用实现Si(b1b6,b2b3b4b5)

  ;的功能子程序

  MOVDPTR,#S1TAB;S盒表的首址

  MOVA,21H;取出第几个S盒

  LCALLDPTRADD

  CLRA

  MOVCA,@A+DPTR;求出S盒的表地址及S结果

  SWAPA

  MOV27H,A;保存高位结果

  MOV20H,2EH

  LCALLS162345

  ;重复

汇编语言范例篇5

  关键词:汇编语言 二进制 十进制 十六进制 显示

  1 引言

  如果要处理一个与数相关的问题,不管是中间的、还是最终的结果,我们都希望能直观地在显示器上显示出来。数字计算机中的数据存储方式是由“0”和“1”组成的二进制码串,根据不同的需要,我们往往要求数据的显示形式不一样,如二进制、十进制、十六进制、八进制等等,然而在汇编语言中实现数据的显示没有类似高级语言中的输出格式命令那么方便,对每个数的显示,一般都需要逐位地转换成ASCII码才能调用系统显示功能完成显示,其中,按不同的数制要求,还要先完成数制间的转换。下面我们来探讨一个数如何编程让它分别按二进制、十进制、十六进制的数制形式显示在CTR显示器上。

  2 编程思路与算法

  以一个16位二进制机器整数为例,它的二进制表示范围是0至11111B;十进制的范围是0至65535(无符号数),或-32768至+32767(有符号数);十六进制表示范围是0000至FFFFH。为方便说明,假设此数放在BX寄存器中,下面介绍按不同进制形式显示的编程思路和算法。

  2.1 按二进制形式显示

  二进制只有“0”和“1”两个数字,它们的ASCII码分别是30H和31H,只要逐位判断是“0”还是“1”,然后转换成对应的ASCII码即可。

  实际编程时,对于BX中的十六位二进制数,可设置一个循环次数为16的循环体,用向左的移位指令,通过CPU标志寄存器中的CF标志,由高位到低位逐位判断、逐位取ASCII码值、逐位显示。当然也可以先将十六个数位都转换成一ASCII码串放入内存缓冲区后再按字符串方式显示,要注意两种方法在显示时系统调用的功能号不同。

  2.2 按十进制形式显示

  首先要完成二进制到十进制数的转换,一般采用“除10取余”法来完成,其大致过程如下:将待转换的数(在BX中)除以10,得到第一个商和余数,此第一个余数就是所求的十进制数的个位;再用第一个商除以10,得到第二个商和余数,此第二个余数就是所求十进制数的十位;……;重复这一过程直至商为0,此时的余数就是所求十进制数的最高位。

  在内存中分配一缓冲区,用来存放以上分离出来的十进制数的每一位,然后再逐个转换成ASCII码,转换成ASCII码的过程很简单,就是给每个十进制位加上30H即可;最后送显示器输出。从转换的过程可以看出,先分离出来的是十进制数的低位,要后显示;后分离出来的是十进制数的高位,应该先显示。因此在编程时,我们可以利用堆栈操作中“先进后出、后进先出”的特性,当分离出各十进制位时依次入栈,要逐个转换成ASCII码送显示时依次出栈。

  2.3 按十六进制形式显示

  十六进制与二进制有很好的对应关系(每4位二进制数和1位十六进制数存在一一对应关系),显示时只需将原二进制数(在BX中)每4位划成一组,按组求对应的ASCII码送显示器即可。

  ASCII码与十六进制数字的对应关系为:30H~39H对应数字0~9,41H~46H对应数字A~F,从数字9到A,其ASCII码间隔了7H,这一点在转换时要特别注意。为使一个十六进制数能按高位到低位依次显示,实际编程中,我们对先BX中的数每次循环左移一组(4位二进制),然后屏蔽掉当前高12位,对当前余下的4位(即1位十六进制数)求其ASCII码,要判断它是0~9还是A~F,是前者则加30H得对应的ASCII码,后者则要加37H才行,最后送显示器输出。以上步骤重复4次,就可以完成BX中数以4位十六进制的形式显示出来。

  3 汇编语言源程序实例

  假设要将BX寄存器中的数分别按无符号二进制、十进制和十六进制显示在屏幕上,下面给出实现的汇编源程序,均为子程序方式,为了简明,略去现场的保护与恢复操作。

  3.1 按二进制形式

  DISPBXB PROC NEAR

  MOV CX,16

  LP:ROL BX,1

  JC D1

  MOV DL,30H

  JMP OUTP

  D1:MOV DL,31H

  OUTP:MOV AH,2

  INT 21H

  LOOP LP

  MOV DL,’B’ ;显示字母“B”

  MOV AH,2

  DISPBXB ENDP

  设(BX)=7FFFH,则输出格式为01111B,后面的大字字母B表示二进制形式,显示结果固定为十六位。

  3.2 按十进制形式

  DISPBXD PROC NEAR

  MOV SI,10

  XOR CX,CX

  MOV AX,BX

  NEXT:MOV DX,10

  DIV SI

  PUSH DX

  INC CX

  CMP AX,0 ;商为0则完成转换

  JNZ NEXT

  OUTP:POP DX

  ADD DL,30H

  MOV AH,2

  LOOP OUTP

  DISPBXD ENDP

  此程序在转换和显示时的循环控制方式和二进制形式的例子不一样,即显示结果的位数是不固定的。若(BX)=7FFFH=32767,则显示结果为5位:32767;若(BX)=00FFH=255,则显示结果为3位:255,与十进制的有效位数相同。

  3.3 按十六进制形式

  DISPBXH PROC NEAR

  MOV CL,

  MOV CH,4

  NEXT:ROL BX,CL

  MOV AL,BL

  AND AL,0FH

  ADD AL,30H

  CMP AL,3AH

  JL OUTP

  ADD AL,07H ;是A~F,要多加7

  OUTP:MOV DL,AL

  MOV AH,02H

爱可网分享地址:http://www.ik35.com/wm/95985.html

猜您感兴趣

相关文章

上一篇:党支部工作制度范本
下一篇:成长的感言


Copyright © 2023-2024 www.ik35.com

All right reserved. 爱可网 版权所有

鲁ICP备15008254号

返回顶部重选