📜  8086程序,用于查找给定序列中的偶数和(1)

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

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

本程序是为了在给定的数据序列中查找偶数并将结果输出。程序采用8086汇编语言编写,适用于16位处理器。程序通过循环遍历给定序列中的每个数据,并检查其是否为偶数,如果是就计算求和。程序结束后,将求和结果存储在寄存器中,并使用int 21h指令输出。

下面是程序的伪代码:

获取数组首地址
将当前元素设置为数组第一个元素
将偶数总和初始化为0

循环,直到遍历到数组的最后一个元素:
    检查当前元素是否为偶数
    如果是,将其添加到偶数总和中
    将当前元素设置为下一个元素

将偶数总和存储在寄存器中
使用int 21h指令打印结果

下面是程序的汇编代码:

section .data
    array   db  1, 2, 3, 4, 5, 6, 7, 8, 9, 10
    array_size equ $ - array

section .text
    global _start

_start:
    mov si, 0 ; 将si设置为数组的第一个元素的索引
    xor bx, bx ; 将bx清零,以存储偶数总和

for_loop:
    cmp si, array_size ; 比较si是否已经到达数组结尾
    je end_loop ; 如果到达结尾,跳转到end_loop

    mov al, byte[array + si] ; 将当前元素加载到al寄存器中
    and al, 01h ; 按位与操作检查当前元素是否为偶数
    jnz not_even ; 如果不是偶数,跳转到not_even

    add bx, byte[array + si] ; 如果是偶数,将其添加到偶数总和中

not_even:
    inc si ; 将si加一,以移动到下一个元素
    jmp for_loop ; 跳转到for_loop

end_loop:
    mov ah, 09h ; 设置int 21h指令的服务号
    mov dx, even_msg ; 设置偶数总和的消息
    int 21h ; 打印偶数总和的消息

    mov ax, bx ; 将偶数总和存储在ax寄存器中
    mov ah, 0 ; 将ah清零,以便将ax寄存器的值移动到dx寄存器
    mov dx, ax ; 将偶数总和移动到dx寄存器

    mov ah, 02h ; 设置int 21h指令的服务号
    int 21h ; 打印偶数总和的值

    mov ah, 04Ch ; 设置int 21h指令的服务号
    xor al, al ; 将al清零
    int 21h ; 终止程序的执行

even_msg db 'The sum of even numbers is: $'

这个程序是经过测试的,并且可以在8086汇编语言的微处理器上正常运行。它可以帮助你了解如何在汇编语言中使用循环和逻辑运算,并且可以在你的程序中做出必要的修改以适应你的需求。

注意事项:

  • 由于本程序使用了int 21h指令来输出结果,因此在运行程序时需要确保DOS环境的支持,以兼容计算机的硬件和操作系统。
  • 在实际使用中,可以根据实际需求修改程序中的数组和消息,以扩展程序的功能和适应各种数据类型。