This is a test piece for a technique to compare two memory operands in a convenient manner using .if blocks. First use of the new editor. :biggrin:
; «»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»
include \masm64\include64\masm64rt.inc
eql MACRO var1,var2
rcall iseq,var1,var2
EXITM <rax>
ENDM
geq MACRO var1,var2
rcall isge,var1,var2
EXITM <rax>
ENDM
leq MACRO var1,var2
rcall isle,var1,var2
EXITM <rax>
ENDM
lth MACRO var1,var2
rcall islt,var1,var2
EXITM <rax>
ENDM
gth MACRO var1,var2
rcall isgt,var1,var2
EXITM <rax>
ENDM
.code
; «»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»
entry_point proc
LOCAL var1 :QWORD
LOCAL var2 :QWORD
conout " ----------------------------------------",lf
conout " Simple memory comparisons for .if blocks",lf
conout " to use with both procedures and macros.",lf
conout " ----------------------------------------",lf
; «»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»
mov var1, 3
mov var2, 2
conout " proc iseq",lf
.if eql(var1,var2) == 0
conout " eql - Variables are not equal",lf
.else
conout " eql - Variables are equal",lf
.endif
mov var1, 2
mov var2, 2
.if eql(var1,var2) == 0
conout " eql - Variables are not equal",lf
.else
conout " eql - Variables are equal",lf,lf
.endif
; «»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»
mov var1, 3
mov var2, 2
conout " proc isge",lf
.if geq(var1,var2) == 0
conout " geq - Variable 2 is not greater or equal",lf
.else
conout " geq - Variable 2 is greater or equal",lf
.endif
mov var1, 3
mov var2, 4
.if geq(var1,var2) == 0
conout " geq - Variable 2 is not greater or equal",lf
.else
conout " geq - Variable 2 is greater or equal",lf,lf
.endif
; «»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»
mov var1, 3
mov var2, 4
conout " proc isle",lf
.if leq(var1,var2) == 0
conout " leq - Variable 2 is not less or equal",lf
.else
conout " leq - Variable 2 is less or equal",lf
.endif
mov var1, 4
mov var2, 3
.if leq(var1,var2) == 0
conout " leq - Variable 2 is not less or equal",lf
.else
conout " leq - Variable 2 is less or equal",lf,lf
.endif
; «»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»
mov var1, 3
mov var2, 4
conout " proc islt",lf
.if lth(var1,var2) == 0
conout " lth - Variable 2 is not less than",lf
.else
conout " lth - Variable 2 is less than",lf
.endif
mov var1, 4
mov var2, 3
.if lth(var1,var2) == 0
conout " lth - Variable 2 is not less than",lf
.else
conout " lth - Variable 2 is less than",lf,lf
.endif
; «»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»
mov var1, 4
mov var2, 3
conout " proc isgt",lf
.if gth(var1,var2) == 0
conout " gth - Variable 2 is not greater than",lf
.else
conout " gth - Variable 2 is greater than",lf
.endif
mov var1, 3
mov var2, 4
.if gth(var1,var2) == 0
conout " gth - Variable 2 is not greater than",lf
.else
conout " gth - Variable 2 is greater than",lf,lf
.endif
; «»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»
waitkey " That's all folks, press any key ...."
.exit
entry_point endp
; «»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»
; «»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»
NOSTACKFRAME
iseq proc ; is equal
cmp rcx, rdx
jne @F
mov rax, 1
ret
@@:
xor rax, rax
ret
iseq endp
STACKFRAME
; «»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»
NOSTACKFRAME
isle proc ; is less that or equal
cmp rcx, rdx
jle @F
mov rax, 1
ret
@@:
xor rax, rax
ret
isle endp
STACKFRAME
; «»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»
NOSTACKFRAME
isge proc ; is greater than or equal
cmp rcx, rdx
jge @F
mov rax, 1
ret
@@:
xor rax, rax
ret
isge endp
STACKFRAME
; «»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»
NOSTACKFRAME
islt proc ; is less than
cmp rcx, rdx
jl @F
mov rax, 1
ret
@@:
xor rax, rax
ret
islt endp
STACKFRAME
; «»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»
NOSTACKFRAME
isgt proc ; is greater
cmp rcx, rdx
jg @F
mov rax, 1
ret
@@:
xor rax, rax
ret
isgt endp
STACKFRAME
; «»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»
end
['tt]
10 bytes instead of 17 (and probably a tick faster)
isle proc ; is less that or equal
cmp rcx, rdx
setg al
movzx eax, al
ret
isle endp
:biggrin:
For a total of 35 bytes, I sit up at night sobbing silently into my last bottle of GlenMorangie. :tongue: