汇编语言——正数数组P和负数数组N
程序员文章站
2022-03-10 12:10:30
...
问题描述
试编写一完整的汇编语言程序,将一个包含有20个数据的数组M分成两个数组:正数数组P和负数数组N,并分别求出这两个数组中数据的个数。
解决方案
DSEG SEGMENT
COUNT EQU 20
ARRAY DW 20 DUP (?) ;存放数组
COUNT1 DB 0 ;存放正数的个数
ARRAY1 DW 20 DUP (?) ;存放正数
COUNT2 DB 0 ;存放负数的个数
ARRAY2 DW 20 DUP (?) ;存放负数
ZHEN DB 0DH, 0AH, ‘The positive number is:’, ‘$’ ;正数的个数是:
FU DB 0DH, 0AH, ‘The negative number is:’, ‘$’ ;负数的个数是:
CRLF DB 0DH, 0AH, ‘$’
DSEG ENDS
CSEG SEGMENT
MAIN PROC FAR
ASSUME CS: CSEG, DS: DSEG
START: PUSH DS ;设置返回DOS
SUB AX, AX
PUSH AX
MOV AX, DSEG
MOV DS, AX ;给DS赋值
BEGIN: MOV CX, COUNT
LEA BX, ARRAY
LEA SI, ARRAY1
LEA DI, ARRAY2
BEGIN1: MOV AX, [BX]
CMP AX, 0 ;是负数码?
JS FUSHU
MOV [SI], AX ;是正数,存入正数数组
INC COUNT1 ;正数个数+1
ADD SI, 2
JMP SHORT NEXT
FUSHU: MOV [DI], AX ;是负数,存入负数数组
INC COUNT2 ;负数个数+1
ADD DI, 2
NEXT: ADD BX, 2
LOOP BEGIN1
LEA DX, ZHEN ;显示正数个数
MOV AL, COUNT1
CALL DISPLAY ;调显示子程序
LEA DX, FU ;显示负数个数
MOV AL, COUNT2
CALL DISPLAY ;调显示子程序
RET
MAIN ENDP
DISPLAY PROC NEAR ;显示子程序
MOV AH, 9 ;显示一个字符串的DOS调用
INT 21H
AAM ;将(AL)中的二进制数转换为二个非压缩BCD码
ADD AH, ‘0’ ;变为0~9的ASCII码
MOV DL, AH
MOV AH, 2 ;显示一个字符的DOS调用
INT 21H
ADD AL, ‘0’ ;变为0~9的ASCII码
MOV DL, AL
MOV AH, 2 ;显示一个字符的DOS调用
INT 21H
LEA DX, CRLF ;显示回车换行
MOV AH, 9 ;显示一个字符串的DOS调用
INT 21H
RET
DISPLAY ENDP ;显示子程序结束
CSEG ENDS ;以上定义代码段
END START
上一篇: 在XML模式中扩展枚举列表的示例代码详解
下一篇: XML模式-Dublin Core的详解
推荐阅读
-
怎么判断每组数组里有多少个正数和负数
-
基础算法:给定一个无序数组,包含正数、负数和0,要求从中找出3个数的乘积,使得乘积最大,要求时间复杂度:O(n),空间复杂度:O(1)
-
汇编语言——正数数组P和负数数组N
-
C语言:编写函数,计算二维数组中正数的平均值和负数的个数,通过两个全局变量返回
-
题目:输入n个整数统计正数,负数,0,的个数(c语言,不使用数组)
-
怎么判断每组数组里有多少个正数和负数
-
编写程序:将一个包含有20个有符号数据的数组arrayM分成两个数组,正数数组arrayP 和负数数组arrayN,并分别把两个数组中的数据个数显示出来
-
汇编语言 将20个数据的数组分成两组,正数数组P和负数数组N,并分别显示两个数组的个数
-
编写一个汇编程序语言,把20个字节的数组分成正数数组和负数数组,并分别计算两个数组中数据的个数。
-
把内存2000H单元中10个有符号字节数分成正数和负数,分别存入P和N单元,并分别统计正数和负数的个数放入DL和DH寄存器中,请编程实现。