【问题标题】:assembly x86 Using stack's value as pointer?程序集 x86 使用堆栈的值作为指针?
【发布时间】:2012-05-31 08:25:55
【问题描述】:

我想知道如何将指针参数传递给过程?

我必须创建具有 2 个参数的函数:

  1. 单词数组
  2. 数组的大小

该函数获取数组的大小并对列求和。

这就是我编写的代码:

.MODEL 小 .堆栈 64 ; +=================================+ ; |数据 | ; +=================================+ 。数据 array1 dw 1,2,3,4 array1size dw 4 结果 dw ? 地址 dw ? ;打印 TMP dw 0 ;一般临时变量.. 。代码 addNumbers 过程 ;重置结果 LEDI,结果 ;使用堆栈 移动 bp,sp ;获取 num 数组 mov bx,[bp+2] ;获取数字的数量 mov cx,[bp+4] ;加法 添加: 添加 [di],bx 公司 bx;去下一个bx 循环添加 保留 2 结束 ;开始 开始: 移动斧头,@DATA mov ds,ax ;设置字符串 推数组1大小 推送偏移数组1 调用 addNumbers ;打印 mov dx:ax,结果 调用 printNumber mov ah,4ch 移动,0 整数 21H 结束开始

问题 - 它添加到结果偏移量指针(这里是cs:0000,cs:0001,cs:0002,cs:0003)而不是偏移值(这里是:1,2,@ 987654327@,4)。

因此,结果将是 6 而不是 10。

有人可以帮我吗?

【问题讨论】:

    标签: assembly x86 x86-16


    【解决方案1】:
    INC BX
    

    当然会给 BX 中的指针加 1(字节)。如果你需要移动一个 WORD,你必须添加单词的大小。说是2个字节,那么你需要

    ADD BX, 2
    

    而不是INC

    您的另一个问题是您没有添加指向的值[BX],而是指针本身BX。您可以使用备用寄存器,例如 AX 来计算总和。

        MOV  AX,0
    adding:
        ADD  AX,[BX]
        ADD  BX,2
        LOOP adding
        MOV  [result],AX
    
        RET  4
    

    【讨论】:

      猜你喜欢
      • 2012-12-13
      • 1970-01-01
      • 1970-01-01
      • 2014-11-28
      • 1970-01-01
      • 2020-09-29
      • 2022-01-27
      • 2011-04-14
      • 2014-10-03
      相关资源
      最近更新 更多