判断并统计正负数的个数(汇编语言)

判断并统计正负数的个数

题目:统计正数和负数的个数

实现代码(有注释惹)

;判断并统计正负数个数
include irvine32.inc
.data
arr dd 10 dup(?)
count dd ($-arr)/4
sum1 dd 0
sum2 dd 0
.code
main proc
	mov edx,offset arr
	mov ecx,count
	call input	;调用输入子函数
	call jug	;调用判断函数
	mov eax,sum1
	call writeint	;输出负数
	call crlf	;换行
	mov eax,sum2	
	call writeint	;输出正数
	exit
main endp
	
input proc
	mov ebx,0
again1:
	cmp ebx,count
	je final1
	call readint
	mov [edx+ebx*4],eax
	inc ebx
	jmp again1
final1:
	ret
input endp

jug proc
	mov ebx,0		;i=ebx
again:
	cmp ebx,count		;比较i和数组元素个数大小
	je final2		;相等了就goto final2退出
	mov esi,[edx+ebx*4]	;esi=数组元素
	cmp esi,0		;比较每个数组元素和0的大小
	jl next1		;数组元素小于0就去next1
	cmp esi,0		;比较每个数组元素和0的大小
	jg next2		;数组元素大于0就去next2

next1:
	inc ebx			;i++
	inc sum1		;负数统计
	jmp again
next2:
	inc ebx			;i++
	inc sum2		;正数统计
	jmp again
final2:
	ret
jug endp
end main

运行结果
在这里插入图片描述
先输出的负数,后输出的正数…

下面是一个简单的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、付费专栏及课程。

余额充值