汇编数值转换器大作业解读

合集下载

汇编数值转换器大作业

汇编数值转换器大作业
str12db240dup(' '),9dup(' '),'Thank you!!!',412dup(' ')
clear_screen MACRO;清屏宏定义
movah,06h
moval,0
movbh,0f0h;白底黑字
movch,0;从0行0列到23行79列清屏
movcl,0
movdh,23
movdl,79
●设计
1运行的设计框图
2整个系统的设计框图
3子程序之间调用关系框图的宏定义,对于输入时的宏定义有charin,strin,numin,输出时的宏定义有charout,strout,numout,输出的时候用到的是栈push和pop,在压栈push时,用到了irp不定重复伪操作。
最后我们几个商量着完成了实验报告和ppt的制作,经过我们几个人的努力,虽然做的不是特别好,但还是各有收获。
三、需求分析与设计
●需求分析
通过编程实现显示菜单,然后通过键盘输入菜单相应的选项进入相应的数制转换,然后通过选项对应的子程序跳转来实现转换,子程序中通过宏定义定义数制前后的数制,并且在宏定义过程中实现数制转换算法,最后输出转换后的进制数。
程序运行源代码如下:
;*************************************************************************************
datasegment
spacedb1000dup(' ')
str1db10dup(' '),9dup(' '),'Welcome to shuzhizhuanhuan!!!',52dup(' ')

汇编程序解读

汇编程序解读

汇编程序解读汇编程序是一种低级语言,用于编写计算机程序。

它直接操作计算机的硬件,提供了对计算机底层的细节进行控制的能力。

在计算机科学领域,汇编程序是非常重要的一部分,它可以帮助我们更好地理解计算机的工作原理。

汇编程序的编写需要使用汇编语言,它是一种符号化的机器语言。

与高级语言相比,汇编语言更接近计算机的底层,因此更加复杂和难以理解。

但是,通过学习汇编语言,我们可以更深入地了解计算机的内部结构和工作原理。

汇编程序的解读是指对已经编写好的汇编程序进行分析和理解。

在解读汇编程序时,我们需要了解汇编语言的基本语法和指令集。

汇编语言的基本语法包括标签、指令和操作数。

标签用于标识程序中的位置,指令用于执行特定的操作,操作数则是指令的参数。

在解读汇编程序时,我们需要注意以下几个方面:首先,我们需要了解程序的入口点。

在汇编程序中,通常会有一个特定的入口点,即程序的起始位置。

我们需要找到这个入口点,并从这里开始分析程序的执行流程。

其次,我们需要分析程序的指令序列。

汇编程序是由一系列指令组成的,每条指令都对应着一条机器指令。

我们需要逐条分析这些指令,了解它们的功能和作用。

然后,我们需要理解程序的数据区。

在汇编程序中,通常会有一些数据需要进行处理。

我们需要找到这些数据,并了解它们的类型和用途。

最后,我们需要分析程序的控制流程。

汇编程序中的控制流程通常通过条件分支和循环来实现。

我们需要找到这些分支和循环,并了解它们的条件和执行逻辑。

通过对汇编程序的解读,我们可以更好地理解程序的执行过程和功能。

这对于调试和优化程序非常有帮助。

此外,对于对计算机底层感兴趣的人来说,学习和解读汇编程序也是一种很好的方式。

总之,汇编程序解读是一项重要的技能,它可以帮助我们更好地理解计算机的底层工作原理。

通过学习和解读汇编程序,我们可以更深入地了解计算机的内部结构和工作方式,提高我们的编程能力和调试能力。

希望大家能够重视汇编程序的学习和解读,为自己的计算机科学之路打下坚实的基础。

汇编语言各种指令解释及用法2篇

汇编语言各种指令解释及用法2篇

汇编语言各种指令解释及用法2篇汇编语言指令解释及用法汇编语言是一种低级编程语言,用于编写机器指令,直接控制计算机硬件。

它的指令集相对简单,但是非常灵活,可以直接操作寄存器和内存,实现各种功能。

在这篇文章中,我将为大家解释汇编语言中一些常用指令的含义和用法。

第一篇:数据传输与操作指令1. MOV指令:MOVE(MOV)指令用于在寄存器和内存之间传输数据。

例如,MOV AX, BX将BX的值传输到AX寄存器中。

2. ADD指令:ADD指令用于将两个操作数相加,并将结果存储在目标操作数中。

例如,ADD AX, 5将AX寄存器的值与5相加,并将结果存储在AX中。

3. SUB指令:SUB指令用于将两个操作数相减,并将结果存储在目标操作数中。

例如,SUB AX, 3将AX寄存器的值减去3,并将结果存储在AX中。

4. INC指令:INC指令用于将目标操作数的值加1。

例如,INC CX将CX寄存器的值增加1。

5. DEC指令:DEC指令用于将目标操作数的值减1。

例如,DEC DX将DX寄存器的值减去1。

6. MUL指令:MUL指令用于将两个无符号操作数相乘,结果保存在一对寄存器中。

例如,MUL BX将AX寄存器的值与BX相乘,并将结果保存在DX:AX寄存器对中。

7. DIV指令:DIV指令用于将两个无符号操作数相除,商保存在AL中,余数保存在AH中。

例如,DIV CX将DX:AX寄存器对的值除以CX,并将商保存在AL中,余数保存在AH中。

8. CMP指令:CMP指令用于比较两个操作数的值,并设置相应的标志位。

例如,CMP AX, BX将AX寄存器的值与BX进行比较。

第二篇:跳转指令与循环指令1. JMP指令:JMP指令用于无条件跳转到目标地址。

例如,JMP LABEL将程序跳转到标签LABEL处执行。

2. JZ指令:JZ指令用于判断前一次的比较结果是否为零,如果为零则跳转到目标地址。

例如,JZ LABEL将在前一次比较结果为零时跳转到标签LABEL处。

汇编 反转字节-概述说明以及解释

汇编 反转字节-概述说明以及解释

汇编反转字节-概述说明以及解释1.引言1.1 概述在计算机领域中,反转字节是一种常见的数据处理操作,它的基本原理是将数据中的字节顺序颠倒,即将最高有效位的字节移动到最低有效位的位置,最低有效位的字节移动到最高有效位的位置。

这项技术在计算机系统中有着广泛的应用,可以用于数据加密、网络通信、数据压缩等领域。

本文将详细介绍反转字节的定义、原理以及在实际操作中的应用方法,旨在帮助读者更好地理解和运用这一重要的数据处理技术。

同时,也会探讨反转字节在数据处理中的潜在影响和未来发展趋势,为读者提供全面的知识和视野。

1.2 文章结构在本文中,我们将首先介绍反转字节的定义和原理,解释为什么需要对字节进行反转操作以及其相关的概念和基本原理。

接着我们将探讨反转字节在不同领域中的应用,包括计算机网络、数据存储和处理等方面。

随后,我们将详细介绍反转字节的实际操作方法,包括具体的编程示例和实践指导。

最后,我们将总结反转字节的重要性,并探讨其在数据处理中可能产生的影响,以及展望反转字节在未来的发展趋势。

通过对这些内容的探讨,读者将能够全面了解反转字节的概念、应用和操作方法,从而更好地应用和理解该技术。

1.3 目的本文的目的旨在深入探讨汇编语言中的反转字节操作,并探讨其在计算机领域中的重要性和实际应用。

通过分析反转字节的定义、原理和操作方法,我们可以更好地理解数据处理中的字节顺序问题,为程序员提供更多的技术支持和解决方案。

同时,本文也将探讨反转字节在未来发展中的潜在影响和应用前景,帮助读者更好地了解和利用这一重要的数据处理技术。

希望本文能为读者提供有益的知识和启发,促进汇编编程技术的进步和发展。

2.正文2.1 反转字节的定义和原理在计算机编程中,反转字节是一种常见的操作,它指的是将一个字节中的位按照相反的顺序重新排列。

字节是计算机中存储数据的基本单位,通常由8个位组成。

在反转字节的过程中,我们会将这8个位的顺序颠倒,即原先的最高位变为最低位,最低位变为最高位,其余位依次类推。

汇编语言各种指令的解释与用法

汇编语言各种指令的解释与用法

汇编语言各种指令的解释与用法汇编语言是一种低级语言,通过编写汇编程序可以直接操作计算机硬件。

在汇编语言中,各种指令起到了关键的作用。

本文将对常用的汇编语言指令进行解释,并说明其用法。

1. 数据传输指令数据传输指令用于在存储器和寄存器之间传输数据。

常用的数据传输指令包括MOV、PUSH和POP。

- MOV指令用于将数据从一个位置传送到另一个位置。

语法格式为:MOV 目的地,源。

- PUSH指令用于将数据压入栈中。

语法格式为:PUSH 寄存器/内存地址。

- POP指令用于从栈中弹出数据并存放到指定位置。

语法格式为:POP 寄存器/内存地址。

2. 算术运算指令算术运算指令用于进行各种算术运算,如加法、减法、乘法和除法。

常用的算术运算指令有ADD、SUB、MUL和DIV。

- ADD指令实现两个操作数的加法。

语法格式为:ADD 目的操作数,源操作数。

- SUB指令实现两个操作数的减法。

语法格式为:SUB 目的操作数,源操作数。

- MUL指令实现两个操作数的乘法。

语法格式为:MUL 操作数。

- DIV指令实现两个操作数的除法。

语法格式为:DIV 操作数。

3. 分支控制指令分支控制指令用于根据条件来选择不同的执行路径,包括条件跳转和无条件跳转。

常用的分支控制指令有JMP、JZ、JE和JNE。

- JMP指令用于无条件跳转到指定的地址。

语法格式为:JMP 标号/偏移量。

- JZ指令用于在零标志位为1时跳转到指定地址。

语法格式为:JZ标号/偏移量。

- JE指令用于在相等标志位为1时跳转到指定地址。

语法格式为:JE 标号/偏移量。

- JNE指令用于在不相等标志位为1时跳转到指定地址。

语法格式为:JNE 标号/偏移量。

4. 逻辑运算指令逻辑运算指令用于实现与、或、非、异或等逻辑运算。

常用的逻辑运算指令有AND、OR、NOT和XOR。

- AND指令用于执行按位与运算。

语法格式为:AND 目的操作数,源操作数。

- OR指令用于执行按位或运算。

汇编教程汇编指令详解

汇编教程汇编指令详解

汇编教程汇编指令详解
汇编语言可以说是机器语言的一种直观形式,是与硬件直接相关的低
级程序设计语言。

它是一种以简洁的汇编指令来表达操作码机器指令的程
序设计语言,汇编语言的指令代码一般比机器语言的指令代码要短,是编
写高效、可移植的机器级程序的理想语言。

汇编语言的基本构成:
(1)指令集:汇编语言的指令集是机器的最基本和最重要的组成部分,也是机器的指令集,描述了机器所做的操作。

(2)操作数:汇编语言的指令集中涉及到的操作数有多种,比如寄
存器操作数、立即数、内存操作数等。

(3)运算和转移指令:汇编语言中的运算和转移指令包括算术运算
指令、比较指令、逻辑运算指令、移位指令等,它们是机器执行的基本操作。

(4)转移指令:汇编语言中的转移指令可以改变机器指令的执行顺序,并实现分支程序设计。

(5)I/O指令:汇编语言中的I/O指令可以实现与外部设备的通信,获取外部设备提供的数据。

(6)汇编指令:汇编指令用于移植各种汇编程序到不同的处理器上,从而实现程序的机器无关性。

一、MOV指令:
MOV指令用于把操作数的值赋给另一个操作数。

基于汇编语言实现的通用数制转换程序

基于汇编语言实现的通用数制转换程序

基于汇编语言实现的通用数制转换程序[摘要]汇编语言是计算机相关专业的一门基础课程,在使用该语言时,将程序的计算结果按不同的数制形式显示输出是一个难点。

本文讨论了如何将数据通过转换,按照不同进制数的形式显示在显示器上,并给出了一个通用的数制转换程序具体实现这一过程。

[关键词]汇编语言;数制转换汇编语言是一种面向机器的语言,但它是计算机能提供给用户的最快最有效的语言,也是能够利用计算机所有硬件特性并能直接控制硬件的唯一语言,因而汇编语言在程序设计中仍然占有很重要的位置,是不可取代的。

但是对于汇编语言编程来说,常常需要把十进制数转换为二进制数、十六进制数和八进制数,或者把十六进制数转换为十进制数、二进制数等等,并要求将结果在显示器上显示输出。

而汇编语言中实现数据的显示没有类似高级语言的输入输出语句,转换输出的工作是比较困难的。

下面我们来探讨一个通用的数制转换程序,使任何进制的数据按照编程者的要求转换为需要的数制形式显示在显示器上。

1 通用数制转换的原理通用数制转换的基本原理是:除N取余法。

1.1 十进制数转换为N进制数。

将十进制数转换为N进制数,我们常常使用的是除N取余法:将十进制数据除以N进制数的基数N,所得余数即为N 进制数个位上的数码,再将商除以N,余数为N进制数十位上的数码,如此反复进行,直到商是0为止。

例如,将十进制数5050转换为十六进制数,我们采用除N取余法实现:所以,(5050)10=(13BA)161.2P进制数转换为N进制数。

实际上,任何进制的数据需要转换成N进制数都可以采用“除N取余法”。

把一个P进制数转化为一个N进制数的过程,实际上是一个不断除N取余的过程。

转换原理:将需要转换的P进制数据除以N进制数的基数N,所得余数即为N进制数个位上的数码,再将商除以N,余数为N进制数十位上的数码,如此反复进行,直到商为0为止。

例如,将十六进制数13BA转换为十进制数。

采用除N取余法:用13BA不断的除以A(即使十进制基数10),所得的第一个余数为所求十进制数个位上的数码,再将商除以A,余数即所求十进制数十位上的数码,如此循环,直到商为0,结束运算。

汇编教程汇编指令详解

汇编教程汇编指令详解

汇编教程汇编指令详解汇编语言是一种底层的计算机语言,通过使用汇编指令对计算机进行编程。

本文将对汇编指令进行详细解释,帮助读者理解和使用汇编语言。

1.数据传送指令:数据传送指令用于将数据从一个位置传送到另一个位置。

例如,MOV指令可以将数据从一个寄存器移动到另一个寄存器,或从存储器中读取数据并将其移动到寄存器中。

2.算术运算指令:算术运算指令用于执行各种算术运算,如加法、减法、乘法和除法。

例如,ADD指令可以将两个操作数相加,而MUL指令可以将两个操作数相乘。

3.逻辑运算指令:逻辑运算指令用于执行逻辑运算,如与、或、非和异或。

例如,AND指令可以对两个操作数执行按位与运算,而OR指令可以对两个操作数执行按位或运算。

4.控制转移指令:控制转移指令用于在程序执行过程中改变控制流。

例如,JMP指令可以无条件地将程序跳转到指定的地址,而条件分支指令(如JE、JNE等)可以根据特定的条件决定是否跳转。

5.程序调用指令:程序调用指令用于调用子程序。

例如,CALL指令可以将控制交给一个子程序,并在子程序执行完后返回到调用点。

6.中断指令:中断指令用于触发计算机的中断处理程序。

例如,INT 指令可以使计算机执行与指定中断向量相关联的中断处理程序。

7.输入输出指令:输入输出指令用于与计算机的外部设备进行数据交换。

例如,IN指令可以从外部设备中读取数据,而OUT指令可以向外部设备发送数据。

除了上述常用的汇编指令外,不同的计算机体系结构可能还有其他特定的指令。

因此,在学习和使用汇编语言时,了解特定体系结构的指令集是很重要的。

此外,汇编语言还包括一些程序框架和编程技巧,如标号、注释、宏定义、条件编译等。

这些工具和技巧可用于简化和优化汇编程序的开发过程。

总结起来,汇编语言是一种底层的计算机语言,通过使用各种指令对计算机进行编程。

掌握和理解各种汇编指令对于编写高效和优化的汇编程序非常重要。

希望本文能够帮助读者更好地理解和使用汇编语言。

汇编语言的原理和作用

汇编语言的原理和作用

汇编语言的原理和作用
汇编语言是一种低级编程语言,它使用符号代表机器指令,允许程序员直接操作计算机硬件。

汇编语言的原理基于将人类可读的指令转换为机器码,这样计算机可以理解并执行这些指令。

汇编语言的作用非常重要,它可以用于编写系统软件、驱动程序和对性能要求非常高的应用程序,因为它允许程序员直接控制硬件,从而实现更高效的代码。

汇编语言的原理基于将人类可读的指令转换为机器码,这一过程称为汇编。

汇编语言使用助记符代表机器指令,例如,MOV表示将数据从一个位置移动到另一个位置,ADD表示将两个数相加,JMP 表示无条件跳转等。

这些助记符被汇编器转换为对应的机器指令,然后被计算机执行。

汇编语言的作用非常广泛。

首先,它可以用于编写系统软件,如操作系统内核,因为这些软件需要直接与硬件交互,而汇编语言可以提供对硬件的直接控制。

其次,汇编语言还常用于编写驱动程序,因为驱动程序需要与硬件设备进行低级交互。

此外,对于性能要求非常高的应用程序,如图形处理、游戏开发等,汇编语言也可以发挥重要作用,因为它可以直接控制硬件资源,实现更高效的代
码。

总之,汇编语言的原理是将人类可读的指令转换为机器码,其
作用包括编写系统软件、驱动程序和对性能要求非常高的应用程序。

通过汇编语言,程序员可以直接控制计算机硬件,实现更高效的代
码和更好的性能。

汇编语言系列之汇编实现各种码制的转换(思路详解)

汇编语言系列之汇编实现各种码制的转换(思路详解)

汇编语⾔系列之汇编实现各种码制的转换(思路详解)⽬录1.⼗六进制转换为⼆进制数设计1.1设计要求:1.2设计思路:1.3程序清单:1.4程序运⾏结果及分析:2.⼗六进制转换为⼗进制数设计2.1设计要求:2.2设计思路:2.3程序清单:2.4程序运⾏结果及分析:3.⼗六进制转换为ASCII码3.1设计要求:3.2设计思路:3.3程序清单:3.4程序运⾏结果及分析:4.英⽂字母⼤⼩写转换设计4.1设计要求:4.2设计思路:4.3程序清单:4.4程序运⾏结果及分析:软件:emu8086语⾔:汇编语⾔(Assembly)注意:本⽂列出了⼗六进制转⼆进制、⼗进制、ASCII码及⼤⼩写字母转换的代码,全部代码为博主独⾃⼀⼈编写,会有瑕疵,谨慎使⽤。

1.⼗六进制转换为⼆进制数设计1.1设计要求:设计转换程序,将键盘键⼊的四位⼗六进制数据转换为等值的⼆进制数,并在终端显⽰。

要求:完善程序结构,设置程序错误出⼝。

输⼊的不是0-F间的值,显⽰错误提⽰信息,并要求重新输⼊。

1.2设计思路:依次输⼊四个⼗六进制数并依次存放到BX中,最后将BX中结果⼀位⼀位输出为⼆进制。

1.3程序清单:DATA SEGMENTpkey DB "pleas input 4 hex(0~F):$"ekey DB 0dh,0ah,'it is wrong!',0dh,0ah,'pleas input 4 hex(0~F) again:','$'huiche DB 0dh,0ah,'result is:',0dh,0ah,'$'numm DB 5 dup(0)DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTATE:MOV AX,DATAMOV DS,AXMOV CX,4 ;输⼊⼗六进制数循环4次LEA SI,numm ;开辟变址寄存器SILEA DX,pkeyMOV AH,9INT 21H ;DOS功能调⽤,输出字符串lp: MOV AH, 1INT 21H ;DOS功能调⽤,输⼊4个⼗六进制数CMP AL,'9'JA abow9CMP AL,'0'JB eeroSUB AL,30h ;输⼊为0~9时ASCII码减30H存放JMP lopeero:LEA DX, ekey ;输⼊不在0~9且不在A~F时,显⽰错误MOV AH, 9INT 21HJMP lpabow9:CMP AL,'A'JNB abowaJMP eeroabowa:CMP AL,'F'JA eeroSUB AL,37h ;输⼊为A~F时ASCII码减37H存放JMP loplop: MOV [SI],ALROL BX,4ADD BX,[SI] ;将输⼊的数据存⼊BX寄存器中INC SIDEC CXJNZ lpMOV CX,16 ;输出⼆进制数循环16次LEA DX,huicheMOV AH,9INT 21H ;DOS功能调⽤,输出字符串lp1: ROL BX,1 ;左移1位后显⽰的是最⾼位MOV DL,BLAND DL,01H ;屏蔽DL⾼7位ADD DL,30H ;加30H对应ASCII码MOV AH,2INT 21H ;DOS功能调⽤,将内容按位输出DEC CXJNZ lp1CODE ENDSEND STATE1.4程序运⾏结果及分析:存放和输出时会遇到⼀些⼩问题,本程序通过移位和加法指令实现存放,⽐较⿇烦但可以实现,后⾯的程序有所改进。

数之间相互转化汇编实验报告

数之间相互转化汇编实验报告

数之间相互转化一、程序设计要求1.转化内容选择下列一项:二进制数→十六进制数显示,二进制数→十进制数显示,十进制数→二进制数显示,十进制数→十六进制数显示,十六进制数→二进制数显示。

2.给出适当的文字提示3.程序要求保护措施,对于非法键入不受理,但回显,显示错误信息。

4.具体显示格式,例如:0111100010011010=789AH二、程序设计思路程序实现功能:1.提示用户输入小于10000的十进制数;2.判断输入是否合法,在输入非法时给出错误信息;3.将用户输入小于10000的十进制数其以十六进制形式输出。

主程序设计思路:第一步:调用INT21的0A号功能等待用户键入一串字符串,要求用户输入小于10000的十进制数即输入字符个数不能超过4,并将输入字符串送入数据缓冲区;第二步:判断输入的字符串长度是否超过4,若超过则输出错误信息,返回DOS;若没有超过继续;第三步:将用户输入的十进制数转化成二进制数保存;第四步:将二进制数转化为十六进制数保存;第五步:输出十六进制数;输入十进制数转化成二进制数的设计思路:第一步:判断输入的字符串是否为十进制数,若字符串中有不是数字的立即退出;第二步:将输入的字符串中的各字符转化成数字,由此得到十进制数各位上的数;第三步:通过1000千位数字百位数字100+十位数字10+个位数字求得该十进⨯+⨯⨯制数,存在于计算机中即为二进制数。

二进制数转化成十六进制数的设计思路:第一步:定义一个4个字节的单元用来存放十六进制形式;第二步:将二进制数存入DX寄存器中,将EDX寄存器中的数左移十六位,将十六位二进制数全部置于EDX的高十六位;第三步:将置于EDX高十六位的数从高位开始,每次取出四位数,并将其转化成字符存于存储单元,直至十六位数全部转化完。

其中,每次取四位数是通过循环左移四位数到DL的低四位实现的。

三、程序设计流程图开始显示操作提示输入字符串->BUF1光标移至输入的字符串后实际键入字符个数->CX调用S_N2ASCCX>4?调用N10_N2ASC输出十六进制数显示错误信息结束返回DOSNY主程序流程图AX->DX将EDX 算术左移16位BUF2+1->SI 4->COUNT将EDX 循环左移4位DL 高4为清零DL>=10DL+7->DLDL+30->DL SI+1->SI COUNGT 减1COUNT=0?返回主程序YYNN子程序N2_16ASC流程图BUF1+2地址->SI0->AX[SI]->BLBL>=3AH?BL<30H?BL-30H->BL 0->BHCALL MUL10SI+1->SI CX-1->CXCX=0?显示错误信息返回DOS返回主程序NY YNYN子程序S_N2ASC流程图四、源程序;--------------------------------------------------------------------------------------------------------------------- ;程序功能:将用户输入小于10000的十进制数其以十六进制形式输出;---------------------------------------------------------------------------------------------------------------------.486 DA TASEGMENT USE16 ;数据段MESG1 DB 'Please enter a decimal number less than 10000!',0DH,0AH,'$' MESG2 DB 0DH,0AH,'Error! Y our input is larger than 10000!',0DH,0AH,'$' MESG3 DB 0DH,0AH,'Error! Y our input is not a number!',0DH,0AH,'$' BUF1 DB 6DB ?DB 6 DUP(?)BUF2 DB '=',4 DUP(?),'H $' COUNT DB 4DA TA ENDS;---------------------------------------------------------------------------------------------------------------------CODE SEGMENT USE16 ;代码段ASSUME CS:CODE,DS:DA TABEG: ;数据段初始化MOV AX,DA TAMOV DS,AXMOV AH,9 ;显示操作提示MOV DX,OFFSET MESG1INT 21H;等待键入一个不超过4位的十进制数MOV AH,0AHMOV DX,OFFSET BUF1INT 21HMOV AH,3 ;读取光标当前的位置MOV BH,0INT 10HMOV CL,BUF1+1 ;实际键入字符个数->CXMOV CH,0;将光标预置到用户输入的字符后MOV AH,2ADD DL,CLINT 10H;判断输入的字符是否超过4个CMP CX,5JNC ERROR1CALL S_N2ASC ;调用S_N2ASC;将输入的十进制数转换成二进制数CALL N2_16ASC ;调用N2_16ASC;将二进制数转换成十六进制数MOV AH,9 ;输出BUF2的内容MOV DX,OFFSET BUF2INT 21HJMP EXITERROR1: ;显示错误信息MOV AH,9MOV DX,OFFSET MESG2INT 21HEXIT:MOV AH,4CHINT 21H;---------------------------------------------------------------------------------------------------------------------;子程序功能:实现AX*10+BX->AX;---------------------------------------------------------------------------------------------------------------------MUL10 PROCMOV DX,10MUL DXADD AX,BXRETMUL10 ENDP;---------------------------------------------------------------------------------------------------------------------;子程序功能:将输入的十进制数的字符串转换成二进制数;---------------------------------------------------------------------------------------------------------------------S_N2ASC PROCMOV SI,OFFSET BUF1+2MOV AX,0 ;AX清零AGIN:MOV BL,[SI]CMP BL,3AH ;判断输入的字符是否是'0'~'9',若不是转JNC ERROR2CMP BL,30HJC ERROR2SUB BL,30H ;字符转成ACSII码MOV BH,0CALL MUL10 ;完成AX*10+BX->AXINC SILOOP AGINJMP WELL ;成功转换转WELLERROR2:MOV AH,9 ;显示错误信息并返回DOSMOV DX,OFFSET MESG3INT 21HMOV AH,4CHINT 21HWELL: RETS_N2ASC ENDP;---------------------------------------------------------------------------------------------------------------------;子程序功能:将DX中的二进制数转十六进制ACSII码;---------------------------------------------------------------------------------------------------------------------N2_16ASC PROCMOV DX,AXSAL EDX,16 ;左移16位,为实现从高位取4位数准备MOV SI,OFFSET BUF2+1 ;MESG2+6的地址->SIMOV COUNT,4 ;计数LAST:ROL EDX,4 ;循环左移4位AND DL,0FH ;将DL的高4为清零;保证DL中只存在4位二进制数CMP DL,10 ;将4位的十六进制数转化成ACSII码JC NEXTADD DL,7NEXT:ADD DL,30HMOV [SI],DL ;将得到的ACSII->[SI]INC SIDEC COUNT ;计数JNZ LASTRETN2_16ASC ENDP;---------------------------------------------------------------------------------------------------------------------CODE ENDSEND BEG五、测试用例及结果分析1.运行程序,输入12345时,在屏幕上显示错误信息,如下:结果分析:输入的数超过了10000,故显示以上信息。

汇编进制转换实验

汇编进制转换实验

一、实验目的与要求1.熟悉二进制、十进制、十六进制转换规则2.熟悉算数运算指令及移位指令的运用。

二、实验逻辑原理图与分析(汇编—流程图)2.1 画实验逻辑原理图2.2 逻辑原理图分析(所应用单板机内部资源及外围接口芯片的核心分析)通过从键盘输入16进制的数,存入BX中,然后判断BX是否为0,如果BX不为0,则将BX/10余数压栈,如果BX为0,则出栈所有余数,这样输出来的数据就全部是10进制数了。

三、程序分析STACK SEGMENTDW 100H DUP(?)STACK ENDSdata segmentdat db 0dh,0ah,'$'data endscode segmentassume cs:code,ds:data,SS:STACKstart:mov ax,datamov ds,axmov dl,16;mov cx,2mov bx,0lp: ;从键盘输入字符,如果不是回车键或者是换行的话,就讲该字符转换成数字*16,保存到bx中mov ah,01hint 21hcmp al,0dhjz binarycmp al,3ahjl nextsub al,07hjmp nextnext:sub al,30h ;字符al减去30H得到相对应的数字cbwxchg ax,bxmul dl ;数字乘以16得到输入相对应的16进制数xchg ax,bxadd bx,axjmp lpbinary : lea dx,datmov ah,09hint 21hmov ax,bxmov cx,0MOV BX,10JYB1: XOR DX,DXDIV BX ;将BX除以10,将余数压栈ADD DL,30HPUSH DXinc cxcmp ax,0jnz JYB1JYB2: POP DX ;最后将余数都出栈,结合每次输出的10进制数,得带最终的10进制数MOV AH,2INT 21HLOOP JYB2mov dl,'D' ;输出'D'mov ah,2int 21hexit:mov ah,4chint 21hcode endsend start四、实验数据和结果分析4.1 实验结果数据4.2 结果数据分析输入数据是FF,当有数据,当第一个F输入时,转换成对应的数字15然后*16的到的值是240,然后当输入第二个F时,转换成对应的数字是15,与第一个数累加结果是255,存入BX,然后BX不断的除10,将余数压栈,直到BX为0时,余数全部出栈,第一次输出的值是2第二次输出的值是5,第三次输出的值也是5,所以全部的值是255也就是转换之后的结果。

(完整版)汇编语言习题详解(全部)(免费)

(完整版)汇编语言习题详解(全部)(免费)

《IBM—PC汇编语言程序设计》习题参考答案第一章.习题1.1用降幂法和除法将下列十进制数转换为二进制数和十六进制数:(1) 369 (2) 10000 (3) 4095 (4) 32767答:(1) 369=1 0111 0001B=171H(2) 10000=10 0111 0001 0000B=2710H(3) 4095=1111 1111 1111B=FFFH(4) 32767=111 1111 1111 1111B=7FFFH1.2将下列二进制数转换为十六进制数和十进制数:(1) 10 1101 (2) 1000 0000 (3) 1111 1111 1111 1111 (4) 1111 1111答:(1) 10 1101B=2DH=45(2) 1000 0000B=80H=128(3) 1111 1111 1111 1111B=FFFFH=65535(4) 1111 1111B=FFH=2551.3将下列十六进制数转换为二进制数和十进制数:(1) FA (2) 5B (3) FFFE (4) 1234答:(1) FAH=1111 1010B=250(2) 5BH=101 1011B=91(3) FFFEH=1111 1111 1111 1110B=65534(4) 1234H=1 0010 0011 0100B=46601.4完成下列十六进制数的运算,并转换为十进制数进行校核:(1) 3A+B7 (2) 1234+AF (3) ABCD-FE (4) 7AB×6F答:(1) 3A+B7H=F1H=241(2) 1234+AFH=12E3H=4835(3) ABCD-FEH=AACFH=43727(4) 7AB×6FH=35325H=2178931.5下列各数均为十进制数,请用8位二进制补码计算下列各题,并用十六进制数表示其运算结果。

(1) (-85)+76 (2) 85+(-76) (3) 85-76 (4) 85-(-76) (5) (-85)-76 (6) -85-(-76)答:(1) (-85)+76=1010 1011B+0100 1100B=1111 0111B=0F7H;CF=0;OF=0(2) 85+(-76)=0101 0101B+1011 0100B=0000 1001B=09H;CF=1;OF=0(3) 85-76=0101 0101B-0100 1100B=0101 0101B+1011 0100B=0000 1001B=09H;CF=0;OF=0(4) 85-(-76)=0101 0101B-1011 0100B=0101 0101B+0100 1100B=10100001B=0A1H;CF=0;OF=1(5) (-85)-76=1010 1011B-0100 1100B=1010 1011B+1011 0100B=0101 1111B=5FH;CF=0;OF=1(6) -85-(-76)=1010 1011B-1011 0100B=1010 1011B+0100 1100B=11110111B=0F7H;CF=0;OF=0 1.6下列各数为十六进制表示的8位二进制数,请说明当它们分别被看作是用补码表示的带符号数或无符号数时,它们所表示的十进制数是什么?(1) D8 (2) FF答:(1) D8H表示的带符号数为-40,D8H表示的无符号数为216;(2) FFH表示的带符号数为-1,FFH表示的无符号数为255。

浅析汇编语言中数制转换方法之查表法

浅析汇编语言中数制转换方法之查表法

浅析汇编语言中数制转换方法之查表法张 伟(白城师范学院人事处,吉林白城137000) 摘要:数制转换是计算机中非常基础和重要的,用汇编语言程序进行数制转换速度快。

但是需使用大量的指令语句。

因此寻找一种可靠高效,指令精简的方法更为重要,本文正是介绍具有这些优良特性的查表法。

关键词:汇编语言;数制转换;查表法中图分类号:TP312文献标识码:A 文章编号:167323118(2006)0420082203收稿日期63作者简介张伟(5———),男,白城师范学院人事处。

汇编语言是一种早期出现的低级语言。

至今仍然受到系统程序设计师的青睐,它和机器语言一样,都是最接近机器硬件的语言。

汇编语言利用符号和英文缩写来代替机器语言的每条指令。

例如,用AD D 代表加法,MUL 代表乘法。

与高级语言相比,其最大的特点就是实时性好,占用空间小,运行速度快。

然而,在编程时高级语言只需要一个语句就可以完成的操作,汇编语言则需要若干条语句才能完成。

这一点在进行复杂的数制转换中尤为明显。

在此,我们主要讨论一下如何利用查表法对汇编语言中的数制转换进行优化。

数制转换是汇编语言乃至微机接口课程中经常遇到的问题。

例如:从键盘输入原始数据给计算机处理时,习惯采用十进制,而计算机内部处理实际采用二进制,这就需要十进制转换到二进制;另一方面,当在屏幕上显示计算机处理的数据时,往往需要以十进制的形式显示处理结果,这又需要进行二进制转换到十进制。

同样,在微机硬件接口的输入输出中,也会经常遇到数制转换的问题。

对于各种编程语言常用以下几种数制转换的方法,方法一:对转换前后数的变化进行分析。

利用CP U 的算术和逻辑运算指令来实现数制转换,其优点是条理性强,程序可读性好,但是对编程人员的逻辑分析能力要求较高。

方法二:用查表法来实现复杂的转换,但要求占用较大的内存空间。

方法三:用硬件实现某些转换,如BC D 到七段显示之间转换的译码器等,进行固定方式的重复性数制转换在工业上应用广泛。

汇编语言指令详解

汇编语言指令详解

练习题1、8086CPU向0052H单元写入一个字,写入过程中BHE和A0的逻辑电平是()。

A、0和0B、0和1C、1和0D、1和12、8086CPU用()信号的下降沿在T1结束时将地址信息锁存在地址锁存器中。

A、M/IOB、BHEC、ALED、READY3、下列8086CPU标志寄存器FR的标志位中,不属于状态标志位的是( )A、OFB、IFC、AFD、PF4、8086CPU在进行读内存操作时,控制信号M/IO 和DT/R的状态是( )A、00B、01C、10D、115、当8086CPU采样到READY=0,则CPU将( )A、执行停机指令B、插入等待周期C、执行空操作指令 D、重新发送地址码6、在8086CPU的标志寄存器中,控制标志位占()A、3位B、9位C、4位D、16位7、8086 CPU内有指示下条指令有效地址的指示器是()A、IPB、SPC、BPD、SI8、现行数据段位于存储器B0000H到B0FFFH字节单元,则段寄存器DS的内容及该段长度(字节数)分别为()A、B000H,1000HB、0000H,0FFFHC、B000H,0FFFHD、B000H,00FFH9、指令MOV BX,[BP]中,约定的段寄存器是( )A、ESB、SSC、DSD、CS10、下列指令有语法错误的是()A、MOV [SI],[DI]B、IN AL,DXC、MOV AX,[0100H+BX+SI]D、PUSH BX11、堆栈操作时,段内偏移量由()寄存器指出。

A、SPB、BPC、SID、DI12、地址总线的“宽度”决定了计算机系统内存的最大容量,8086有20根地址线,可寻址()字节的存储单元。

A、512KB、1MC、2MD、4M13、条件转移指令JZ的测试条件()A、CF=0B、CF=1C、ZF=0D、ZF=114、INC指令不影响()标志A、OFB、CFC、ZFD、SF15、寄存器间接寻址方式中,操作数在()中。

汇编数值转换

汇编数值转换

汇编语言是一种低级编程语言,通常用于编写与计算机硬件紧密相关的程序。

在汇编语言中,数值转换可以通过使用特定的指令或宏来实现。

以下是一些常见的数值转换方法:1. 十进制转二进制:使用移位指令(例如SHL 或SHR)将十进制数转换为二进制数。

例如,将十进制数23 转换为二进制数可以执行以下指令:```assemblyMOV AX, 23 ; 将十进制数23 加载到AX 寄存器中SHL AX, 4 ; 将AX 寄存器中的值左移4 位,相当于将十进制数转换为二进制数```2. 二进制转十进制:使用加法指令将二进制数转换为十进制数。

例如,将二进制数1010010 转换为十进制数可以执行以下指令:```assemblyMOV AX, 01010010b ; 将二进制数1010010 加载到AX 寄存器中ADD AX, AX ; 将AX 寄存器中的值加到自身,相当于将二进制数转换为十进制数```3. 十六进制转十进制:使用移位和加法指令将十六进制数转换为十进制数。

例如,将十六进制数A3 转换为十进制数可以执行以下指令:```assemblyMOV AX, A3h ; 将十六进制数A3h 加载到AX 寄存器中SHL AX, 4 ; 将AX 寄存器中的值左移4 位,相当于将十六进制数转换为十进制数```4. 十进制转十六进制:使用移位和取模指令将十进制数转换为十六进制数。

例如,将十进制数255 转换为十六进制数可以执行以下指令:```assemblyMOV AX, 255 ; 将十进制数255 加载到AX 寄存器中SHR AX, 4 ; 将AX 寄存器中的值右移4 位,相当于将十进制数转换为十六进制数```这些是常见的数值转换方法,具体实现方式可能会因汇编语言的语法和编译器而有所不同。

基于汇编语言的32位二进制、十进制转换及应用

基于汇编语言的32位二进制、十进制转换及应用

基于汇编语言的32位二进制、十进制转换及应用随着计算机技术的发展,汇编语言已经成为了一种非常重要的编程语言之一。

在汇编语言中,二进制和十进制数的转换是非常常见的操作。

在本文中,我们将介绍如何使用汇编语言进行32位二进制和十进制数的转换,并探讨其应用。

在汇编语言中,我们可以使用MOV指令将数据从一个寄存器移动到另一个寄存器中。

对于32位二进制数,我们可以使用MOV指令将其存储到EAX寄存器中。

例如,要将二进制数1010 1011 1101 0001 0000 0011 1110 0011存储到EAX寄存器中,我们可以使用以下指令: MOV EAX, 0xABD103E3对于十进制数,我们可以使用IMUL指令进行乘法运算,并将结果存储到指定的寄存器中。

例如,要将十进制数4294967295存储到EBX寄存器中,我们可以使用以下指令:MOV EAX, 4294967295IMUL EBX, EAX在进行二进制和十进制数之间的转换时,我们可以使用循环和移位操作来实现。

对于二进制数转换为十进制数,我们可以使用以下代码:MOV EAX, 0xABD103E3 ; 将二进制数存储到EAX寄存器中MOV ECX, 0 ; 用于统计位数的计数器MOV EBX, 0 ; 存储十进制结果的寄存器convert_loop:SHR EAX, 1 ; 右移一位JC carry ; 如果最低位为1,跳转到carry标签 INC ECX ; 统计位数JNZ convert_loop ; 如果EAX不为0,跳转到convert_loop 标签MOV EAX, 0xABD103E3 ; 重新将二进制数存储到EAX寄存器中 convert_loop2:SHL EAX, 1 ; 左移一位JC over ; 如果最高位为1,跳转到over标签ADD EBX, EBX ; 将结果乘2JNZ convert_loop2 ; 如果EBX不为0,跳转到convert_loop2标签JMP donecarry:ADD EBX, 2^ECX ; 将2^ECX加到结果中INC ECX ; 统计位数JNZ convert_loop ; 如果EAX不为0,跳转到convert_loop 标签JMP doneover:ADD EBX, 1 ; 将1加到结果中JMP convert_loop2done:; EBX中存储的即为转换后的十进制数对于十进制数转换为二进制数,我们可以使用以下代码:MOV EAX, 123456789 ; 将十进制数存储到EAX寄存器中MOV EBX, 0 ; 存储二进制结果的寄存器MOV ECX, 31 ; 计数器,从高位开始计算convert_loop:CMP ECX, 0 ; 如果计数器为0,跳转到done标签 JE doneMOV EDX, 2MOV ESI, ECXconvert_loop2:SUB ESI, 1CMP ESI, 0JE convert_loop3IMUL EDX, 2JMP convert_loop2convert_loop3:CMP EAX, EDXJB convert_loop4SUB EAX, EDXOR EBX, 1 << ECXJMP convert_loopconvert_loop4:JMP convert_loop2done:; EBX中存储的即为转换后的二进制数除了进行二进制和十进制数之间的转换外,汇编语言还可以应用于其他方面,例如位运算、加密算法、驱动程序等。

汇编语言实验2数据转换实验

汇编语言实验2数据转换实验

程序如下所示:DATA SEGMENTBUF DB 5 DUP(?) ;预留5单元空间D0 DW 2A5HDATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART: MOV AX,DA TAMOV DS,AXMOV DI,OFFSET D0 ;将DI指向BUF的下一单元MOV AX,D0 ;取要用来变十进制数的数到AXMOV BX,10 ;准备除以10MOV CX,0 ;准备统计余数的个数CHANGE10: DEC DI ;准备存放余数,往前倒存INC CXMOV DX,0 ;将除数的高16位(在DX中)清0,DX也将用来存放余数DIV BX ;DX,AX除以BX (BX=10)ADD DL,30H ;余数变为ASCII码值MOV BYTE PTR[DI],DL ;存储十进制数CMP AX,0 ;是否为0?JNZ CHANGE10 ;不为0转CHANGE10 CHANGE11: MOV DL,BYTE PTR[DI] ;取出存放在BUF中的十进制数到DL供显示MOV AH,2 ;显示1个字符INT 21HINC DILOOP CHANGE11MOV AH,4CH ;程序结束并返回DOSINT 21HCODE ENDSEND START(1)请改变第三行的3A5H改变为4A3FH、0ABH、0A37BH后分别说明运行结果,并做解释。

不做修改改3A5H为4A3FH改3A5H为0ABH改3A5H为0A37BH(2)分析其中INC与DEC语句的作用是什么,用”;”号屏蔽这二句后运行结果又是什么?请解释。

(3)将MOV BX,10 ;准备除以10 中的10改为8,结果如何?意义是什么?4A3FH0A37BH(4)如果改为16,结果如何,试分析为什么是这样的结果?0A37BH0ABH4A3FH2.ASCII码表示的十进制数转换为二进制数并显示将SI指向的缓冲区BUF中保存的五位ASCII码十进制数(0-65535)转换成对应的二进制数并存放在DX中,再以二进制形式显示。

汇编语言各种指令的解释与用法

汇编语言各种指令的解释与用法

【算术指DD (addition) 指令的汇编格式�add dst,src 指令的基本功能�(dst)<-(src)+(dst) 指令支持的寻址方式�他们两个操作数不能同时为存储器寻址。即为除源操作数为立即数的情况 外�源操作数和目地操作数必须有一个寄存器寻址方式。 指令对标志位的影响�SF=1 加法结果为负数�符号位为 1� SF=0 加法结果为正数�符号位为 0� ZF=1 加法结果为零 ZF=0 加法结果不为零 CF=1 最高有效位向高位有进位 CF=0 最高有效位向高位无进位 OF=1 两个同符号数相加�正数+正数或负数+负数��结果符号与其相反。 OF=0 两个不同符号数相加�或同符号数相加�结果符号与其相同。 13、带进为加法指令 ADC (add with carry) 指令的汇编格式�ADD dst,src 指令的基本功能�(dst)<-(src)+(dst)+CF 指令支持的寻址方式�他们两个操作数不能同时为存储器寻址。即为除源操作数为立即数的情况 外�源操作数和目地操作数必须有一个寄存器寻址方式。 指令对标志位的影响�SF=1 加法结果为负数 SF=0 加法结果为正数 ZF=1 加法结果为零 ZF=0 加法结果不为零 CF=1 最高有效位向高位有进位 CF=0 最低有效位相高位无进位 OF=1 两个同符号数相加�结果符号与其相反� OF=0 两个同符号数相加�或同符号相加�结果符号与其相同 14、加 1 指令 INC (increament) 指令的汇编格式�INC opr 指令的基本功能�(opr)<-(opr) 指令支持的寻址方式 可以使用除立即数方式外的任何寻址方式 指令对标志位的影响�SF=1 加法结果为负数 SF=0 加法结果为正数 ZF=1 加法结果为零 ZF=0 加法结果不为零 OF=1 两个同符号数相加�结果符号与其相反� OF=0 两个同符号数相加�或同符号相加�结果符号与其相同。 二、减法指令 15、减法指令 SUB (subtract) 指令的汇编格式�SUB dst,src 指令的基本功能�(dst)<-(dst)-(src) 指令支持的寻址方式�他们两个操作数不能同时为存储器寻址。即为除源操作数为立即数的情况
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

《汇编语言程序设计》综合程序设计实验报告题目:数制转换器班级:信1101-2班姓名:王兵茹李夏蕾胡佳奇学号:******** ********20113013完成日期:2013-11-24目录一、简介二、小组成员及具体分工三、需求分析与设计四、代码及分析五、总结一、简介本设计利用汇编语言来实现数制转换设计,用于方便进制之间的互换。

设计的内容可以使十六进制、八进制、二进制、十进制的数制互相转换。

二.小组成员及具体分工小组成员:王兵茹李夏蕾胡佳奇具体分工:我们三个一开始是各自的分工查资料,先看看单个数制转换,王兵茹负责的是十六进制,李夏蕾负责的是十进制,胡佳琪负责的是二进制。

最后我们几个一起完成了程序的主要设计,由于大体思路相同,最后加上了八进制的转换。

在程序的修改方面,王兵茹进行了后期的加工,增加了dios中断,把单调的退出改成文本形式下的退出,在退出之前,执行清屏。

最后我们几个商量着完成了实验报告和ppt的制作,经过我们几个人的努力,虽然做的不是特别好,但还是各有收获。

三、需求分析与设计●需求分析通过编程实现显示菜单,然后通过键盘输入菜单相应的选项进入相应的数制转换,然后通过选项对应的子程序跳转来实现转换,子程序中通过宏定义定义数制前后的数制,并且在宏定义过程中实现数制转换算法,最后输出转换后的进制数。

●设计①运行的设计框图②整个系统的设计框图③子程序之间调用关系框图我们的这个程序主要就是用到的子程序的调用和大量的宏定义,对于输入时的宏定义有charin,strin,numin,输出时的宏定义有charout,strout,numout,输出的时候用到的是栈push和pop,在压栈push时,用到了irp不定重复伪操作。

定义通用inax宏,确定转换之前的进制,例如inax cx、cx=2是把转换之前的进制确定为2存到cx中定义通用outax宏,确定转换之后的进制,例如outax bx、bx=2是把转换之后的进制确定为2存到bx中通用宏charin逐个输入转换之前进制字符四、代码及分析程序运行源代码如下:;******************************************************************** *****************data segmentspace db 1000 dup(' ')str1 db 10 dup(' '),9 dup(' '),'Welcome to shuzhizhuanhuan',52 dup(' ')str12 db 240 dup (' '),9 dup(' '),'Thank you',412 dup(' ')clear_screen MACRO ;清屏宏定义mov ah,06hmov al,0mov bh,0f0h ;白底黑字mov ch,0 ;从0行0列到23行79列清屏mov cl,0mov dh,23mov dl,79int 10hmov dx,0 ;光标在左上角mov ah,2int 10h ;调用biosENDMmenu db 10,13,'*************************************************' db10,13,'*************************************************'db10,13,'* please choice action: *'db10,13,'* a.binary 2 to octal 8 *'db10,13,'* b.binary 2 to decimal 10 *'db10,13,'* c.binary 2 to hexadecimal 16 *'db10,13,'* d.octal 8 to binary 2 *'db10,13,'* e.octal 8 to decimal 10 *'db10,13,'* f.octal 8 to hexadecimal 16 *'db10,13,'* g.decimal 10 to binary 2 *'db10,13,'* h.decimal 10 to octal 8 *'db10,13,'* i.decimal 10 to hexadecimal 16 *'db10,13,'* j.hexadecimal 16 to binary 2 *'db10,13,'* k.hexadecimal 16 to octal 8 *'db10,13,'* l.hexadecimal 16 to decimal 10 *'db10,13,'* m.exit *'db10,13,'*************************************************',10,13,' $';**************************************************************;2进制转换为16进制和10进制和8进制str2 db10,13,'please input the binary string:',10,13, '$'str21 db'the hexadecimal string is:',10,13, '$'str22 db'the decimal string is:',10,13, '$'str23 db'the octal string is:',10,13, '$';16进制转换为2进制和8进制和10进制str3 db10,13,'please input the hexadecimal string:',10,13, '$' str31 db'the binary string is:',10,13, '$'str32 db'the octal string is:',10,13, '$'str33 db'the decimal string is:',10,13, '$';10进制转换为2进制和8进制和16进制str4 db10,13,'please input the decimal string:',10,13, '$'str41 db'the binary string is:',10,13, '$'str42 db'the octal string is:',10,13, '$'str43 db'the hexadecimal string is:',10,13, '$';8进制转换为2进制和10进制和16进制str5 db10,13,'please input the octal string:',10,13, '$'str51 db'the binary string is:',10,13, '$'str52 db'the decimal string is:',10,13, '$'str53 db'the hexadecimal string is:',10,13, '$'str0 db 10,13,'ERROR! please input a~m:',13,10,'$';在数据段定义字符,数字,字符串的输入输出的宏定义;*************************************************charin macro ;字符输入mov ah,01hint 21hendm;************************************************numin macro ;数字输入charin ;调用charin宏定义sub al,48 ;48d=30h,将字符转换为数字endm;****************************************************strin macro stringin ;字符串输入lea dx,stringinmov ah,0ahint 21hendm;****************************************************charout macro outchar ;字符输出irp rec,<ax,dx>;不定重复伪操作push recendm;push ax;push dxmov dl, outcharmov ah, 02hint 21hpop dxpop axendm;*************************************************** numout macro outnum ;数字输出push axpush dxmov dl, outnumadd dl, 48mov ah, 02hint 21hpop dxpop axendm;**************************************************strout macro stringout ;字符串输出push axpush dxlea dx, stringoutmov ah, 9int 21hpop dxpop axendmdata endsstack segment stackdw 200 dup(?)stack ends;*************************************************code segmentassume cs:code,ds:data,es:data,ss:stack;******************************************************** endl macroirp x,<ax,bx,cx,dx>;不定重复伪操作push xendm;push ax;push bx;push cx;push dxmov dl, 0ah ;回车换行mov ah, 2int 21hmov dl, 0dhint 21hpop dxpop cxpop bxpop axendm;******************************************************* outax macro basenumpush axpush bxpush cxpush dxmov bx, basenumcall outaxppop dxpop cxpop bxpop axendm;******************************************************* outaxp procmov dx,0mov cx,0outaxp_circle:cmp ax,0je outaxp_nextdiv bxpush dxmov dx,0jmp outaxp_circleoutaxp_next:pop axcmp al,10jb noutadd al,55 ;55d=37hcharout aljmp coutnout:numout alcout:loop outaxp_nextretoutaxp endp;************************************************** inax macro basenumpush bxpush cxpush dxmov cx, basenumcall inaxppop dxpop cxpop bxendm;************************************************ inaxp procmov ax, 0inaxp0:push axinaxp1: charincmp al, 13 ;判断输入的是不是回车je inaxecmp al, '0'jb inaxp1cmp al, '9'ja inaxnext1sub al, 48jmp inaxnuminaxnext1:cmp al, 'A'cmp al, 'F'ja inaxnext2sub al, 55jmp inaxnuminaxnext2:cmp al, 'a'jb inaxp1cmp al, 'z'ja inaxp1sub al, 87jmp inaxnuminaxnum:mov bh, 0mov bl, alpop axcmp ax, 0je inaxaddmul cxinaxadd:add ax, bxjmp inaxp0inaxe:pop axretinaxp endp;*************************************************** start:mov ax,datamov ds,axmov es,axlea bp,spacemov dx,0b00hmov cx,1000mov bx,0020hmov ax,1300hint 10hlea bp,str1;显示welcomemov dx,0600hmov cx,120mov bx,000ehmov ax,1301hint 10hdisplay:strout menucharincmp al,'a'je bin2_oct8jl errcmp al,'b'je bin2_dec10cmp al,'c'je bin2_hex16cmp al,'d'je oct8_bin2cmp al,'e'je oct8_dec10cmp al,'f'je oct8_hex16cmp al,'g'je dec10_bin2cmp al,'h'je dec10_oct8cmp al,'i'je dec10_hex16cmp al,'j'je hex16_bin2cmp al,'k'je hex16_oct8cmp al,'l'je hex16_dec10cmp al,'m'je exitcmp al,'n'jnl errclear_screenjmp displayerr:strout str0jmp display;***************************************************** bin2_hex16: ;二进制转换strout str2inax 2endlstrout str21outax 16jmp displaybin2_dec10:strout str2inax 2endlstrout str22outax 10jmp displaybin2_oct8:strout str2inax 2endlstrout str23outax 8jmp display;************************************************* hex16_bin2: ;十六进制转换strout str3inax 16endlstrout str31outax 2jmp displayhex16_oct8:strout str3inax 16endlstrout str32outax 8jmp displayhex16_dec10:strout str3inax 16endlstrout str33outax 10jmp display;**************************************************** dec10_bin2: ;十进制转换strout str4inax 10endlstrout str41outax 2jmp displaydec10_oct8:strout str4inax 10endlstrout str42outax 8jmp displaydec10_hex16:strout str4inax 10endlstrout str43outax 16jmp display;*********************************************************** oct8_bin2: ;八进制转换strout str4inax 8endlstrout str41outax 2jmp displayoct8_dec10:strout str4inax 8endlstrout str42outax 10jmp displayoct8_hex16:strout str4inax 8endlstrout str43outax 16jmp display;********************************************************** exit: clear_screen ;调用宏定义,清屏lea bp,str12mov dx,0600hmov cx,520mov bx,004ehmov ax,1301hint 10hmov ah,4chint 21h;********************************************************** code endsend start程序运行结果截图:(包括正确输入和错误输入)五、总结本次大作业,考虑到我们平时对数制转换的应用,并且各个进制转换起来使人头痛,我们组做的是一个数制转换器。

相关文档
最新文档