📅  最后修改于: 2023-12-03 14:59:06.499000             🧑  作者: Mango
本程序是一段8086汇编语言程序,可用于查找给定序列中的奇数和。程序会首先要求用户输入一个序列,然后通过扫描序列中的每个数,找到其中的奇数并将其相加,最终返回奇数和。本程序可作为初学者学习8086汇编语言的一个练手项目。
.model small
.stack 100h
.data
array db 10 dup (0) ; 存储用户输入的序列
len db ? ; 序列长度
sum dw 0 ; 奇数的和
msg1 db 'Enter length of array:', '$'
msg2 db 'Enter element #', '$'
msg3 db 'The sum of odd numbers is:', '$'
.code
main proc
; 初始化堆栈和寄存器
mov ax, @data
mov ds, ax
mov ss, ax
mov sp, 100h
; 要求用户输入序列长度
lea dx, msg1
mov ah, 9h
int 21h
mov ah, 1h
int 21h
sub al, 30h
mov len, al
; 读入序列
lea si, array
mov cx, len
mov bl, 1
mov dl, 0
mov ah, 9h
lea dx, msg2
input_loop:
; 输出提示信息
int 21h
; 读取用户输入的数字
xor ah, ah
int 21h
; 判断是否超过数组长度
cmp bl, len
jg end_input_loop
; 存储数字到数组中
mov dl, al
mov [si], dl
; 更新指针和计数器
inc si
inc bl
jmp input_loop
end_input_loop:
; 查找奇数和
lea si, array
mov cx, len
sum_loop:
mov dl, [si]
test dl, 1 ; 判断是否为奇数
jz not_odd
add sum, dx
not_odd:
inc si
loop sum_loop
; 输出结果
lea dx, msg3
mov ah, 9h
int 21h
mov ax, sum
call print_word
jmp exit_program
exit_program:
mov ah, 4ch
int 21h
main endp
; 整数转字符串并输出
print_word proc near
push bx
push ax
mov bx, 10h
xor cx, cx
convert_loop:
xor dx, dx
div bx
push dx
inc cx
or ax, ax
jnz convert_loop
print_loop:
pop dx
add dl, 30h
mov ah, 2h
int 21h
loop print_loop
pop ax
pop bx
ret
print_word endp
end main
该程序使用了8086汇编语言,需要在DOSBox或其他模拟器中运行。在程序中,.model small
声明了模型类型,.stack 100h
用于设置堆栈大小,.data
声明了数据段,.code
声明了代码段。程序使用了DOS的中断来进行输入输出,比如使用了int 21h
中断来输出字符串。
程序使用了循环进行遍历数组,通过mov dl, [si]
语句读取数组中的数字,并通过add sum, dx
语句将奇数加和。
最后,通过调用print_word
过程将奇数和转换为字符串并输出。
这段程序虽然简单,但涵盖了8086汇编程序的基本概念和语法,适合初学者进行练手。