📌  相关文章
📜  8086程序,用于查找给定序列中的奇数和(1)

📅  最后修改于: 2023-12-03 14:59:06.499000             🧑  作者: Mango

8086程序,用于查找给定序列中的奇数和

简介

本程序是一段8086汇编语言程序,可用于查找给定序列中的奇数和。程序会首先要求用户输入一个序列,然后通过扫描序列中的每个数,找到其中的奇数并将其相加,最终返回奇数和。本程序可作为初学者学习8086汇编语言的一个练手项目。

程序思路
  1. 要求用户输入序列的长度。
  2. 声明一个数组来存储用户输入的序列。
  3. 通过循环,逐个读入用户输入的序列中的数字,并存储到数组中。
  4. 直到序列输入结束后,再次循环遍历数组,找到其中的奇数并将其加和。
  5. 最终输出奇数的和。
程序示例
.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汇编程序的基本概念和语法,适合初学者进行练手。