0

The assembly code below is equivalent to:

a=1;
b=1;
if(a=b){
x=2+2
}

It is generated code so don't worry about inefficiency. My problem is when I use the sete command I get the error "error: invalid combination of opcode and operands". Here is the code:

[list -]
%include 'win32n.inc'
[list +]

section .bss use32
section .data use32
section .code use32
	cpu 386

extern WriteFile
extern GetStdHandle
extern ExitProcess
import WriteFile kernel32.dll
import GetStdHandle kernel32.dll
import ExitProcess kernel32.dll

section .code

..start:
push	STD_OUTPUT_HANDLE
call	[GetStdHandle]			;Get stdout
mov	 [stdout_handle], eax	  ;Save the handle

mov		eax, 1
mov		[A], eax
mov		eax, 1
mov		[B], eax
mov		eax, [A]
push 	eax
mov		eax, [B]
pop		ebx
cmp 	eax, ebx
sete 	eax
test 	eax, 0
jz	L0
mov		eax, 2
push	eax
mov		eax, 2
pop		ebx
add		eax, ebx
mov		[X], eax
L0:
add		dword [X], 48

;Write a message to stdout
push	dword 0
push	dword 0
push	dword textlen
push	dword X
push	dword [stdout_handle]
call	[WriteFile]
jmp exit

exit:
push	dword 0					;Point at error code
call	[ExitProcess]
jmp		exit					;Should never reach here

section .data

stdout_handle	dd	0
string			dd	0
textlen			equ	$ - string
A			dd 0
X			dd 0
B			dd 0

What am I doing wrong?

1
Contributor
1
Reply
2
Views
6 Years
Discussion Span
Last Post by gsingh2011
This topic has been dead for over six months. Start a new discussion instead.
Have something to contribute to this discussion? Please be thoughtful, detailed and courteous, and be sure to adhere to our posting rules.