0

你如何在汇编 masm 中做一个 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。它应该给我 count = 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 in assembly 执行此操作if not variable1 < variable2if variable1 > variable2

4

1 回答 1

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

但是当你从内存中加载一个寄存器时,它会以小端方式加载它。所以当你有:

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

esiis00303035ecxis的内容00393031。最后一个值加载为00363035.

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

于 2013-04-18T03:26:12.490 回答