如何在汇编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
答案 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
的内容为00303035
,ecx
为00393031
。最后一个值加载为00363035
。
您尝试将字符串加载为无符号的32位值。你真的想比较字符串吗?