8086汇编语言中,给定一个10字节的字节型数组varb db 15,-25,66,-17,78,-33,46,-96,71,80,编写一个完整的源程序,统计数组中奇数和偶数的个数,统计结果分别保存在ODDNUM和EVENNUM单元中
时间: 2024-05-12 22:13:21 浏览: 101
下面是一个完整的8086汇编语言源程序,用于统计给定的10字节字节型数组中奇数和偶数的个数,并将结果分别保存在ODDNUM和EVENNUM单元中:
```
.model small
.stack 100h
.data
varb db 15,-25,66,-17,78,-33,46,-96,71,80
ODDNUM dw ?
EVENNUM dw ?
.code
main proc
mov ax, @data
mov ds, ax
mov cx, 10 ; 数组元素个数
mov bx, 0 ; 计数器清零
; 统计奇数个数
mov si, offset varb
mov ax, 0 ; 奇数计数器清零
again1:
mov dl, [si]
and dl, 1 ; 判断是否为奇数
jnz is_odd ; 是奇数
inc si ; 指向下一个元素
loop again1
jmp end_count
is_odd:
inc ax ; 奇数计数器加1
inc si ; 指向下一个元素
loop again1
; 统计偶数个数
mov si, offset varb
mov ax, 0 ; 偶数计数器清零
again2:
mov dl, [si]
and dl, 1 ; 判断是否为奇数
jz is_even ; 是偶数
inc si ; 指向下一个元素
loop again2
jmp end_count
is_even:
inc ax ; 偶数计数器加1
inc si ; 指向下一个元素
loop again2
end_count:
mov ODDNUM, ax ; 保存奇数个数
mov EVENNUM, bx ; 保存偶数个数
mov ah, 4ch
int 21h
main endp
end main
```
程序首先声明了一个包含10个元素的字节数组varb,以及两个用于存储奇数和偶数个数的双字单元ODDNUM和EVENNUM。然后,在main过程中,程序使用MOV指令将DS寄存器设置为数据段的基地址,使用MOV指令将CX寄存器设置为数组元素的个数(即10),使用MOV指令将BX寄存器清零,以便统计偶数个数。
接下来,程序使用MOV指令将SI寄存器设置为数组varb的基地址,使用MOV指令将AX寄存器清零,以便统计奇数个数。程序使用一个循环来遍历数组中的每个元素。在循环中,程序首先使用MOV指令将DL寄存器设置为当前元素的值,然后使用AND指令将DL寄存器与1进行按位与运算,以判断当前元素是否为奇数。如果是奇数,程序使用INC指令将AX寄存器加1,以统计奇数个数。程序使用INC指令将SI寄存器指向下一个元素,并使用LOOP指令来判断是否遍历完了数组中的所有元素。如果没有遍历完,程序将跳转回循环的开头,继续处理下一个元素。
当程序遍历完数组中的所有元素后,程序使用JMP指令跳转到end_count标签处。在end_count标签处,程序使用MOV指令将AX寄存器的值保存到ODDNUM单元中,以保存奇数个数。然后,程序使用MOV指令将SI寄存器重新设置为数组varb的基地址,使用MOV指令将AX寄存器清零,以便统计偶数个数。程序使用一个类似的循环来统计偶数个数,并使用MOV指令将BX寄存器的值保存到EVENNUM单元中,以保存偶数个数。
最后,程序使用INT 21h中断结束程序的执行。
阅读全文