将一个包含20个数据的数组M分为两个数组,正数组P和负数组N,分别将正负数组所包含的数据个数显示出来

本文介绍了一个使用汇编语言编写的程序,该程序能够将一个包含20个数据的数组M中的正数和负数分别分离到两个不同的数组P和N中,并统计各自的数量。通过具体的汇编指令展示了如何实现这一功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

;将一个包含20个数据的数组M分为两个数组,正数组P和负数组N,
;分别将正负数组所包含的数据个数显示出来
DATA SEGMENT
M    DB 5 DUP(-1,-2,-1,2)
P    DW 0
N    DW 0
P1   DB "P=$"
N1   DB 0AH,"N=$"
DATA ENDS

STACK SEGMENT PARA STACK
          DW 128 DUP(?)
TOP   LABEL WORD
STACK ENDS

CODE SEGMENT
           ASSUME CS:CODE,SS:STACK,DS:DATA
MAIN PROC FAR
START:
     MOV AX,DATA
     MOV DS,AX
     
     MOV AX,STACK
     MOV SS,AX
     LEA SP,TOP

     LEA SI,M
     MOV CX,20
L0: MOV AL,[SI]
     CMP AL,0
     JL  L1
     JG  L2
L1: INC N
     JMP L3
L2: INC P
     JMP L3
L3: INC SI
     LOOP L0
     
     MOV AH,9     ;计算机从键盘接收的是字符的ASCII码,也是通过字符的ASCII码
     LEA DX,P1    ;将字符显示在屏幕上的
     INT 21H
 
     MOV AX,P     ;两位数无法直接显示,通过除10一位一位显示
     MOV BL,10
     DIV BL
     
     MOV DL,AL     ;AL放商,AH放余数,显示时要加上30H才能将实际数显示出来,
     ADD DL,30H    ;因为计算机是通过ASCII码显示字符的
     MOV BH,AH     ;显示P商
     MOV AH,2
     INT 21H


     MOV DL,BH     ;显示P余数
     ADD DL,30H
     MOV AH,2
     INT 21H


     MOV AH,9
     LEA DX,N1
     INT 21H
 
     MOV AX,N
     MOV BL,10
     DIV BL
     
     MOV DL,AL     ;显示N商
     ADD DL,30H
     MOV BH,AH
     MOV AH,2
     INT 21H


     MOV DL,BH     ;显示N余数
     ADD DL,30H
     MOV AH,2
     INT 21H
 
     MOV AH,4CH
     INT 21H
CODE ENDS
MAIN ENDP
      END STAR
T  
5.1试编写一个汇编语言程序,要求对键盘输入的小写字母用大写字母显示出来。 5.2 编写程序,从键盘接收一个小写字母,然后找出它的前导字符后续字符,再按顺序输出 5.3 将AX寄存器中的16位数分成4,每4位,然后把这四数分别放在AL、BL、CL、DL中。 5.4 试编写一程序,要求比较两个字符串STRING1STRING2所含字符是否相同,若相同则显示‘MATCH’,若不相同则显示‘NOT MATCH’。 5.5 试编写一程序,要求能从键盘接收一个个位数N,然后响铃N次。 5.6 编写程序,将一个包含20个数据的数组M分成两个数组正数数组P负数数组N,并分别把这两个数组中的数据个数显示出来。 5.7 试编制一个汇编语言程序,求出首地址为DATA的100D字数组中的最小偶数,并把它放在AX中。 5.8 把AX中存放的16位二进制数K看作是8个二进制的“四分之一字节”。试编写一个程序,要求数一下值为3(即11B)的四分之一字节数,并将该数在终端上显示出来。 5.9 试编写一汇编语言程序,要求从键盘接收一个四位的十六进制数,并在终端上显示与它等值的二进制数。 5.10 设有一段英文,其字符变量名为ENG,并以$字符结束。试编写一程序,查对单词SUN在该文中的出现次数,并以格式”SUNXXXX“显示出次数。 5.11 从键盘输入一系列以$为结束的字符串,然后对其中的非数字字符进行计数,并显示出计数结果。 5.12 有一个首地址为MEM的100D字数组,试编制程序删除数组中所有为零的项,并将后续项向前压缩,最后将数组的剩余部分补上零。 5.13 在STRING到STRING+99单元中存放着一个字符串,试编制一程序测试该字符串中是否存在数字,如有,则把CL的第五位置1,否则置0. 5.14 在首地址为TABLE的数组中按递增次序存放着100H个16位补码数,试编写一个程序把出现次数最多的数及其出现的次数分别放在AXCX中。 5.15 数据段中已定义了一个有N个字数据数组M,试编写一程序求出M中绝对值最大的数,把它放在数据段的M+2n单元中,并将该数的偏移地址存放在M+2(n+1)单元中。 5.16 在首地址为DATA的字数组中,存放了100H个16位补码数,试编写一个程序求出它们的平均值放在AX寄存器中;并求出数组中有多少个数小于此平均值,将结果放在BX寄存器中。 5.17 试编写一个程序,把AX中的十六进制数转换为ASCII码,并将对应的ASCII码依次存放到MEM数组中的四个字节中,例如:当(AX)=2A49H时,程序执行完后,MEM中的4个字节的内容为39H,34H,41H32H。 5.18 把0~100D之间的30个数存入以GRADE为首地址的30个字数组中,GRADE+i表示学号i+1的学生的成绩。另一个数组RANK为30个学生的名次表,其中RANK+i的内容是学号为i+1的学生的名次。编写一程序,根据GRADE中的学生成绩,将学生名次填入RANK数组中。 5.19 已知数组A包含15个互不相等的整数,试编写一程序,把既在A中又在B中出现的整数存在于数组中C中。 5.20 设在A,BC单元中存放着三个数,若三个数都不是0,则求出三树之并存放于D单元中;其中有一个数为0,则把其他两个数也清零。试编写此程序。
### 回答1: 可以使用循环语句判断语句来实现这个功能。具体步骤如下: 1. 定义一个整型数组 b[10],并使用循环语句输入10个数据。 2. 定义两个变量 sum_positive sum_negative,分别用于存储正数负数,初始值都为。 3. 使用循环语句遍历数组 b[10],对于每个元素,判断它的正负性,如果是正数,则将它加到 sum_positive 中,如果是负数,则将它加到 sum_negative 中。 4. 输出 sum_positive sum_negative 的值,即为数组中所有正数所有负数。 下面是示例代码: int b[10]; int sum_positive = , sum_negative = ; for (int i = ; i < 10; i++) { cin >> b[i]; if (b[i] > ) { sum_positive += b[i]; } else if (b[i] < ) { sum_negative += b[i]; } } cout << "所有正数为:" << sum_positive << endl; cout << "所有负数为:" << sum_negative << endl; ### 回答2: 要计算整型一维数组b[10]中所有正数负数,首先需要先输入10个数据到该数组中。输入数据可以通过键盘输入或者使用随机数生成器随机生成10个数据。这里以通过键盘输入的方式为例。 输入10个数据到整型一维数组b[10]中之后,需要进行遍历数组,并判断每个元素的正负性。如果元素大于0,则累加到所有正数上,否则累加到所有负数上。最后将所有正数与所有负数分别输出即可。 以下是具体的实现步骤: 1.定义整型一维数组b[10],用于存放输入的10个数据。 2.使用for循环语句,输入10个数据到整型一维数组b[10]中。循环体内使用scanf语句,以输入的方式获取数据。 3.定义两个变量,分别用于存放所有正数所有负数。初始值都为0。 4.使用for循环语句,遍历整型一维数组b[10],判断每个元素的正负性,并累加到相应的上。 5.使用printf语句,将所有正数所有负数分别输出。 具体实现示例代码如下: ``` #include <stdio.h> int main(){ int b[10]; int i, pos_sum = 0, neg_sum = 0; // 输入10个数据到整型一维数组b中 printf("请输入10个整数:\n"); for (i=0; i<10; i++){ scanf("%d", &b[i]); } // 计算所有正数所有负数 for (i=0; i<10; i++){ if (b[i] > 0){ pos_sum += b[i]; } else if (b[i] < 0){ neg_sum += b[i]; } } // 输出所有正数所有负数 printf("数组中所有正数为:%d\n", pos_sum); printf("数组中所有负数为:%d\n", neg_sum); return 0; } ``` 运行程序后,即可输入十个整数,然后输出所有正数所有负数。 ### 回答3: 题目分析: 首先,题目要求输入一个10个数的整型数组 b[10],而且需要计算并输出所有正数所有负数,因此需要用一个循环语句将所有数循环读取进来,并且判断它们是正数还是负数。 对于每一个读入的数,我们都可以使用 if 语句或者 switch 语句来判断它是正数还是负数,然后累加到相应的中。最后输出两个即可。 具体步骤如下: 1. 定义一个整型的数组 b,长度为 10,用一个循环语句将 10 个数读取到数组中。 2. 定义两个变量,一个存储正数一个存储负数。 3. 对于每个数元素,使用 if 或者 switch 判断它是正数还是负数,然后累加到相应的中。 4. 输出所有正数所有负数。 代码示例: ```c #include <stdio.h> int main() { int b[10]; int positive_sum = 0; // 正数 int negative_sum = 0; // 负数 // 输入数据 printf("请输入数组中的 10 个数:\n"); for(int i = 0; i < 10; i++) { scanf("%d", &b[i]); } // 计算正数负数 for(int i = 0; i < 10; i++) { if(b[i] > 0) { // 正数累加到 positive_sum 中 positive_sum += b[i]; } else if(b[i] < 0) { // 负数累加到 negative_sum 中 negative_sum += b[i]; } } // 输出结果 printf("所有正数为:%d\n", positive_sum); printf("所有负数为:%d\n", negative_sum); return 0; } ``` 注意事项: 1. 在输入数据时,需要遵循 scanf 的用法,使用 & 取地址符。 2. 在计算正数负数时,需要注意 0 不是正数也不是负数,因此不能将其归为任何一类。如果需要计算 0 的个数,可以单独使用一个变量进行计数。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值