【问题标题】:masm32: SIMPLE array manipulationmasm32:简单的数组操作
【发布时间】:2011-09-17 14:23:27
【问题描述】:

我有一个非常简单的问题:

我想将字节存储在masm32中的一维数组中(我昨天才开始使用它,之前用过c#),然后用一些简单的数学修改它,但是我在网上没有发现任何有用的东西。

tiles BYTE 12 dup (0) ; array of 12 bytes with value 0

这就是我在 .data 部分中声明数组的方式,基本上我想用 C# 语法做的是:

for(int i = 0; i < tiles.Length; i++)
    tiles[i] += 2;

【问题讨论】:

    标签: assembly masm32


    【解决方案1】:

    我不记得 masm32 使用的确切指令,但基本结构应该是这样的:

        mov edi, addr tiles ; might be called offset, some assemblers (notably gas) would use something like lea edi, [tiles] instead
        mov ecx, 12 ; the count, this could be gotten from an equ, read from a variable etc.
    for_loop:
        add byte ptr [edi], 2 ; tiles[i] += 2
        inc edi ; move to next tile
        dec ecx ; count--
        jnz for_loop ; if (count != 0) goto for_loop
    

    或者,如果您希望它的结构更像 c# 代码:

        mov edi, addr tiles
        sub ecx, ecx ; ecx = 0
    for_loop:
        cmp ecx, 12 ; ecx < tiles.Length ?
        jnl done ; jump not less
        add byte ptr [edi+ecx], 2 ; tiles[i] += 2
        inc ecx ; i++
        jmp for_loop
    done:
    

    请注意,如果您更改 tiles 的类型,某些代码将不得不更改(尤其是涉及 edi 的代码)。

    【讨论】:

      猜你喜欢
      • 2011-03-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-14
      • 1970-01-01
      • 2014-04-06
      相关资源
      最近更新 更多