汇编实验:统计正数、负数、零的个数

统计数组BUF中正数、负数、0的个数顺序存放在变量NUM中

DATAS SEGMENT
    BUF DB 5,6,1,0,-8,6,0
    N=$-BUF
    NUM DB 3 DUP(?)
DATAS ENDS
 
CODES SEGMENT
    ASSUME CS:CODES,DS:DATAS
START:
	MOV  AX,DATAS
	MOV  DS,AX
	
	MOV  CX,N
	MOV  SI,OFFSET BUF 
	   	    
CYCLE:	
	CMP  BYTE PTR [SI],0
	JL   A1
	JZ   A2
	INC  NUM
	JMP  A3
	
A1:		
	INC  NUM+1
	JMP  A3
	
A2:		
	INC  NUM+2
	
A3:		
	INC  SI
	LOOP CYCLE	
	
	;取消注释如下代码可以运行后看到分别看到正数,负数,0的个数
	;MOV AH,2
	;MOV DL,NUM
	;OR DL,30H
	;INT 21H
	
	;MOV AH,2
	;MOV DL,NUM+1
	;OR DL,30H
	;INT 21H
	
	;MOV AH,2
	;MOV DL,NUM+2
	;OR DL,30H
	;INT 21H
	
	MOV  AH,4CH
	INT  21H
CODES ENDS
    END START
  • 3
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
下面是一个简单的8086汇编程序,用于统计输入数组中正数负数个数: ``` assume cs:code, ds:data data segment arr db 1, -2, 3, -4, 5, -6, 7, -8, 9, -10, '$' ; 输入数组 pos_cnt db 0 ; 正数个数 neg_cnt db 0 ; 负数个数 data ends code segment start: mov ax, data ; 加载数据段到 DS 寄存器 mov ds, ax mov si, offset arr ; 将数组首地址存入 SI 寄存器 mov cx, 10 ; 输入数组长度为 10 count_loop: mov al, [si] ; 将当前元素存入 AL 寄存器 cmp al, 0 ; 判断当前元素是否为 0 jz zero ; 如果是 0,跳转到 zero 标签 cmp al, 0 ; 判断当前元素是否为正数 jg positive ; 如果是正数,跳转到 positive 标签 inc neg_cnt ; 如果是负数负数个数加 1 jmp next ; 跳过 positive 标签 positive: inc pos_cnt ; 正数个数加 1 next: inc si ; 指向下一个元素 loop count_loop ; 继续循环 ; 输出正数个数 mov ah, 9 mov dx, offset pos_msg int 21h mov al, pos_cnt add al, '0' mov ah, 2 int 21h ; 输出负数个数 mov ah, 9 mov dx, offset neg_msg int 21h mov al, neg_cnt add al, '0' mov ah, 2 int 21h ; 程序结束 mov ah, 4ch int 21h zero: ; 如果当前元素是 0,跳过并指向下一个元素 inc si loop count_loop pos_msg db 'Positive count: ' neg_msg db 'Negative count: ' code ends end start ``` 该程序首先将输入数组加载到数据段,然后使用循环遍历数组中的每个元素,判断其是否为正数负数,然后分别累加正数负数个数。最后,使用 DOS 中断输出正数负数个数,并结束程序。 需要注意的是,该程序只能统计有限长度的输入数组。如果输入数组长度超过 255,需要修改程序中的变量类型。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值