程序集masm无法弄清楚如何做一个if if not less then语句

时间:2013-04-18 02:59:18

标签: windows vb.net assembly if-statement masm

如何在汇编masm中执行if if not less then语句

我在vb.net中有这段代码

 If Not variable1 < variable2 Then
                count += 1
            End If

If Not variable1 < variable3 Then
                count += 1
            End If

msgbox.show(count)

此代码计数= 1

我尝试了以下所有代码但它不起作用。它或者给我最后的count = 2或者最后的count = 0。它应该给我数= 1

这是汇编masm的代码

.data

variable1        dd ?
variable2       dd ?
variable3       dd ?

这就是假设发生的事情。我从文本文件中读取了3个值,它们是500,109,500 它们存储在3个变量中,所以

variable1 = 500
variable2 = 109
variable3 = 506

然后我需要按照从最小到最大的顺序列出这些,所以我试着比较这些。

我尝试了所有这些变化,但没有一个工作

    mov esi, offset variable1
    mov ecx, offset variable2

    .if esi > ecx
    inc count
    .endif

 mov ecx, offset variable3

.if esi > ecx
    inc count
    .endif

    .if variable1 > offset variable2
        inc count
        .endif

.if variable1 > offset variable3
        inc count
        .endif

 mov esi, offset variable1
        mov ecx, offset variable2

    cmp esi,ecx
    JB n2
    inc count
    n2:

mov ecx, offset variable3

    cmp esi,ecx
    JB n3
    inc count
    n3:

    mov esi, offset variable1
        mov ecx, offset variable2

    cmp esi,ecx
    JG n3
    inc count
    n3:

mov ecx, offset variable3

    cmp esi,ecx
    JG n4
    inc count
    n4:

mov esi, [variable1]
mov ecx, [variable2]
cmp esi, ecx
ja n1
inc Level3DNS1rank
n1:

mov ecx, [variable3]
cmp esi, ecx
ja n2
inc Level3DNS1rank
n2:

如何将上述vb.net代码转换为masm程序集

谢谢

更新

这是这两个问题的答案

我需要做的是将字符串转换为整数。我使用此代码执行invoke atodw,ADDR variable1,因为if not not in assembly我刚刚将if not variable1 < variable2更改为if variable1 > variable2

1 个答案:

答案 0 :(得分:0)

也许:

mov esi, [variable1]
mov ecx, [variable2]
cmp esi, ecx
jge n2

更新

啊哈。我现在看到了问题。你有:

variable1        db "500",0
variable2       db "109",0
variable3       db "506",0

它作为(十六进制字节)存储在内存中:

variable1  35 30 30 00
variable2  31 30 39 00
variable3  35 30 36 00

但是当你从内存中加载一个寄存器时,它会将它加载到little-endian。所以当你有:

mov esi, [variable1]
mov ecx, [variable2]

esi的内容为00303035ecx00393031。最后一个值加载为00363035

您尝试将字符串加载为无符号的32位值。你真的想比较字符串吗?