【问题标题】:How to write the following program for 8086 Assembly?如何为 8086 汇编编写以下程序?
【发布时间】:2021-06-09 03:07:56
【问题描述】:

最新的 11 个气压读数存储在一个数组中。编写程序查找 数组的奇数寻址元素和数组的偶数寻址元素的平均值 分别将值存储在 OddAvg 和 EvenAvg 变量中并显示消息 使用 DOS 中断“找到平均值”。

【问题讨论】:

    标签: assembly emu8086


    【解决方案1】:

    单击标签emu8086 并找到一个答案,该答案将向您展示如何使用 DOS 中断显示消息

    平均值定义为值的总和除以这些值的数量。 x86架构中有添加ADD和除法DIV的指令。

    Register AX 通常用于累加值的总和。每次相加后增加CX,所以它最终会得到值的数量(五个或六个),然后执行SUB DX,DXDIV CX 以获得AX 中的平均值。

    Register SI 是数组寻址的最佳选择,从奇数地址开始并在每次添加后增加它以指向下一个 odd 元素。然后用偶数个地址重复计算。

    【讨论】:

    • 如果求和到 AX,则需要将零扩展到另一个寄存器。否则,add ax, [si],您将在 AL 中添加偶数元素,在 AH 中添加奇数元素。 (假设它们没有溢出......)这是假设输入元素首先是 8 位整数。
    • @PeterCordes 这是一个很好的优化思路,当元素为int8 时,使用单个ADD AX,[SI] 计算AHAL 的加法。但是帕斯卡的气压恐怕不适合 0..255 的范围,所以元素可能是 int16int32,谁知道呢?
    • 问题是奇怪的 address (不是索引),如果准确则意味着字节。但是,是的,没有人知道,所以它还没有有用的答案。以 kPa 为单位的压力适合 int8(大气压 = 101),但您需要一个更宽的值才能求和而不会溢出。
    猜你喜欢
    • 2023-04-08
    • 2013-12-15
    • 2011-12-13
    • 1970-01-01
    • 2010-10-29
    • 1970-01-01
    • 1970-01-01
    • 2013-10-25
    相关资源
    最近更新 更多