【问题标题】:Comparing the elements of an array in 8086比较8086中数组的元素
【发布时间】:2014-05-01 06:23:52
【问题描述】:

我需要将数组的第一个元素与最后一个元素进行比较,依此类推。这就像我有一个数组 A[9](大小为 10)。所以我需要将 A[0] 与 A[9] 进行比较,如果 A[0] > [9] 那么我需要 减去它们 将其存储在另一个数组中。该过程从 A[1] 到 A[8]、A[2] 到 A[7] 继续进行,直到到达 A[4] 到 A[5] 我的程序用 C 语言分解,但我真的不知道如何用汇编语言进行。

比较两个不同的变量更容易。但是,如果有人能告诉我如何比较同一数组的不同元素,那将会很有帮助。谢谢。

【问题讨论】:

  • 汇编程序中没有“数组”之类的东西。您所拥有的只是内存地址和寄存器中的加载值。因此,让“esi”指向第一个数组元素的地址,“edi”指向最后一个并从那里开始计算。
  • 我没有时间想出一个完整的答案,但我会尝试用一些字符串前缀指令 (rep) 来解决这个问题:fermimn.gov.it/linux/quarta/x86/rep.htm 这些指令对一串字节重复操作直到到达终点。我认为这就是你所需要的。请注意,在我提到的链接中,一些说明是 80386 及更高版本。你真的只绑定8086吗?
  • @CsabaToth : 不幸的是,我们目前只在大学学习 8086
  • 汇编器数组使用 db(字节)、dw(字)、dd(双字或 dq(四字)声明。由于这个 8086,您可能会有一个字节或字数组例如 | mybytes db 1,2,3,4 | 或 | mywords dw 1,2,3,4 | . 对于 MASM 和 ML,“sizeof”获取数组的大小(以字节为单位),“lengthof”获取数字元素。
  • @rcgldr 我正在使用 TASM。我已经将数组声明为 A db 10(?) 和 B db 5 (?)。我还创建了一个循环来输入 10 个数字。我被困在我需要比较第一个元素的部分,即 A[0] 和 A[9] 并且如果 A[0] 大于 A[9] 然后减去它们并将结果存储在 B[0 ]。在通过 cmp 和 jmp 语句输入 10 个元素之前,我已经创建了 1/4,但我不确定如何比较存储在同一数组中的元素。

标签: arrays assembly x86-16


【解决方案1】:

您只需将“di”移动到数组的最后一个索引,并将“si”指向数组的第一个索引 然后您必须通过取消引用运算符 [] 比较 si 和 di 的内容,并增加 si 并减少 di 例如: 。数据 数组分贝 1,2,3,4,5,6 。代码 移动斧头,@数据 mov dx,ax

mov si,偏移数组

mov di,偏移数组

添加di,5

; di 现在将指向最后一个索引,您也可以这样做;如果将数组作为输入并且非常大,则使用循环 mov cx,6

循环1:

mov al,[si]

cmp al,[di]

;如果这些值等于或不等;或高于或低于等,这是你想要做的条件

公司

十进制

循环循环1

退出:

mov ah,4ch

int 21h

结束

【讨论】:

    猜你喜欢
    • 2016-03-25
    • 1970-01-01
    • 2011-12-16
    • 1970-01-01
    • 1970-01-01
    • 2023-01-13
    • 2015-07-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多