8086汇编统计正负数的个数
时间: 2023-09-28 21:05:27 浏览: 270
统计你输入的正负数的个数
下面是一个简单的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,需要修改程序中的变量类型。
阅读全文