为了实现字节数组的求和,须要先将要加的数放入数据段的一个字节数组中,然后用SI指向此数组的首地址,依次递增,将累加和放入一个寄存器.本程序功能有限,主要是用到了子程序,这就要求对现场进行保护,在子程序执行完后还要RET,恢复其现场,当然本程序没有这么复杂,只是将求和与显示分别作成了一个子程序,
当然我写的这个DISP子程序还有很多不足的地方,只能显示10以下的数,超过10将会显示出乱码,因为出于时间关系没有对其进行完善,这就要用到代码转换的内容了,因为你要用不同的进制进行显示需要进行不同的处理,可能有人会问了,为什么汇编要转换呢,因为在计算机里都是以二进制进行存储的,而显示是显示的字符的ASCII码,如果不进行转换肯定会显示乱码的.
现在大体上说一下代码转换的思路,我们先取出四位,你可以采取循环移位的方式,这样便可轻松的取出高四位,再对其进行判断,当是数字时对其加30H,是字符的时候对其加37H,这是由ASCII表决定的,如果你不信,可以查询一下ASCII表计算试试看.这样我们就可以以任十六进制显示数字了,至于转换成其它码制以后再叙.
下面有一示例程序,完成一组数相加的功能,还有很多不足之处,见谅!
DATAS SEGMENT
BUF DB 1,2,3,1,1,0,1
COUNT EQU ($-BUF)-1
QUESTION DB 13,10,13,10,13,10,'1+2+3+1+1+0+1 ='
RESULT DB ?
DB '$'
DATAS ENDS
;-------------
CODES SEGMENT
ASSUME DS:DATAS,CS:CODES
START:
MOV AX,DATAS
MOV DS,AX
XOR CX,CX
XOR AX,AX
LEA SI,BUF
MOV CX,COUNT
CALL SUM ;调用求和子程序
MOV RESULT,BL ;将结果存入RESULT存储单元
CALL DISPLAY ;调用显示子程序
MOV AH,1
INT 21H
[img]/upload/attachment/90267/fc243365-aaa4-315d-b24c-1215dc2b4620.bmp[/img]
MOV AH,4CH ;RETURN TO DOS
INT 21H
;-----------SUM BEGIN----------------
;子程序一
;作用:计算总和
;入口参数:SI,CX
;出口参数:AX
SUM PROC
MOV BX,0
ADD BL,[SI]
NEXT:
INC SI
ADC BL,[SI]
LOOP NEXT
RET
SUM ENDP
;-------------SUM END----------------
;------------- DISPLAY BEGIN---------
;子程序二
;作用:十进制显示
;入口参数:RESULT
;出口参数:NONE
DISPLAY PROC
XOR DX,DX
MOV DX,OFFSET QUESTION
MOV AH,09H
INT 21H
MOV DL,[RESULT]
ADD DL,30H
MOV AH,2H
INT 21H
RET
DISPLAY ENDP
;-------------DISPLAY END-------------
CODES ENDS
END START
运行效果如下:
- 大小: 2.6 KB
分享到:
相关推荐
3. **双字节数组求和**:计算两个双字节数组的对应元素之和,并将结果存入另一个数组。 4. **数据统计**:统计一段数据中的正数、负数和零的数量,并计算正数与负数之和。 #### 实验知识点 ### 1. 数组求和 #### ...
本篇将详细讲解MIPS汇编语言中处理数组的基本概念和操作技巧。 数组是编程中常见的数据结构,它允许我们以有序的方式存储和访问相同类型的数据元素集合。在MIPS汇编中,数组通常通过内存地址和索引来操作。以下是...
这段代码主要涉及了汇编语言程序设计的基础知识、数据输入输出操作、以及加法运算的具体实现方法。 ### 一、汇编语言基础 #### 1. 汇编语言简介 汇编语言是一种低级程序设计语言,它与特定类型的处理器架构紧密...
#### 练习题15:比较两个字节数组中的内容是否相同并根据比较结果输出相应的字符串。 - **知识点**: - 字节数组比较:逐个比较数组中的元素以确定它们是否相同。 - 条件输出:根据比较结果输出不同的消息。 ####...
- **bm**:定义一个字节数组,包含了各个省份对应的代码,用于后续查找籍贯信息。 - **sf1~sf7**:定义了多个字符串数组,分别存储不同省份的名称。 - **sheng**:定义一个双字数组,用于存储省份代码。 - **yarray*...
本次实验的主要目的是通过IBM汇编语言来实现两个数的相加操作,并且在过程中加入详细的注释以帮助理解每一步的操作逻辑。这对于初学者来说是非常好的实践机会,能够帮助他们更好地掌握汇编语言的基本语法和编程技巧...
5. 字节数组(BYTE ARRAY):D 包含 10 个字节,每个字节的初值均为 5。 6. 字数组(WORD ARRAY):E 包含 3 个字,初值分别为十进制的 55、-100(在二进制补码表示中为 FFCH)、8000。 数据段的存储结构如下: - ...
本篇文章将通过一个具体的例子来讲解如何用汇编语言实现多位十进制数相加求和并将其结果显示出来,以此来熟悉基本的汇编语言指令。 #### 实现目标 本次实验的主要目的是学习如何使用汇编语言实现两个多位十进制数...
(1)该程序的功能是对一个字节数组(`ABC`)中的元素求绝对值之和,并将结果存入`RESULT`。 (2)`NEG BL`指令用于将`BL`中的负数转换为其绝对值。 (3)程序执行后,`RESULT`单元的内容是所有绝对值相加的结果...
汇编语言中可以定义和初始化数据,如定义字节数组、字数组等,并可以给数据分配标签。例如: - `BUFFER DB 01H, 0AH` 定义并初始化了一个名为BUFFER的字节数组,其内容为01H和0AH。 - `DATA1 DW 1856H` 定义一个名...
根据给定文件的信息,本文将详细解析如何在汇编语言环境下实现两个多位十进制数的相加操作。本例中的关键在于理解ASCII码表示的十进制数、加法运算以及结果的处理。 ### 一、问题背景 在计算机编程中,经常需要对...
1. 数组最大值查找:根据给定的10字节数组,程序需要判断数组是无符号数还是有符号数,并找出相应的最大值。这涉及到比较运算、循环结构以及条件判断语句的使用。 2. 二进制转BCD码:将二进制数500H转换为BCD码,...
在上面的代码中,我们定义了一个数组`ARRAY`,其中存放了12个字节的数据。同时,我们还定义了四个变量:`SUM1`、`SUM2`、`COUNT1`和`COUNT2`,用于存放计算结果。 二、代码段 代码段是汇编语言的核心部分,用于...
在程序中,通过逐个字节相加,并在累加器中累加结果,最终将和存储在指定的内存位置。这里涉及到的指令包括MOVA,@R0(将寄存器R0指向的内存地址处的数据加载到累加器A中)、ADDCA,@R1(将寄存器R1指向的内存地址处的...
如果`ARRY DB 500 DUP (0)`定义了一个包含500个0的字节数组,`ARRY+100`将访问第101个元素,由于是字节数组,其值仍然是0。 6. **字符串定义**:在汇编语言中,定义字符串常使用`DB`(定义字节)指令。因此,'THIS ...
在汇编语言中,可以采用冒泡排序、选择排序等算法实现。例如,冒泡排序会通过一系列交换相邻元素的操作,逐渐将数组调整为有序状态。在循环中,需要比较和交换元素,这可能涉及多个寄存器和内存访问。理解如何有效地...
- **XLAT**:字节查表转换指令,通常用于查找一个字节长度数组中的元素,其中BX指向该数组的起始地址,AL提供索引值,最终将找到的值存储在AL中。 ##### 2. 输入输出端口传送指令 - **IN**:从指定的I/O端口读取...
汇编语言程序设计中,顺序程序设计是最基础的形式,例如例1展示了两个无符号双字节数相加的程序。在这个例子中,使用了MCS-51的特定指令,如CLR(清除进位标志)、MOV(移动数据)、ADD(加法运算)、DEC(减一操作...
例如,求0到15之间数的平方,可以定义一个字节数组保存这些值,然后通过索引访问得到结果。在处理更大数据范围,如0到255的平方,可能需要使用2字节的数组,同时注意字节顺序。 3. **多字节数据计算** - 对于多...
例如,要访问`BLOCK`数组中的第6个字(假设数组元素大小为2字节),可以采用寄存器间接寻址、寄存器相对寻址或基址变址寻址等方式。 通过以上知识点的解析,我们可以看到汇编语言是一种低级语言,它直接与计算机...