Click to See Complete Forum and Search --> : printing a character


access1011
April 15th, 2009, 02:16 PM
here is my code
.model small
.stack
include stdlib.a
includelib stdlib.lib

.data

word TYPEDEF byte
dseg segment para public 'data'

j word 0FF00h
k word 0FFF0h
l word ?
dseg ends
.code

main proc
mov ax, dseg
mov ds, ax
mov es, ax

mov ax, j
putc

main endp
end main




its giving me the error : OPERAND TYPES DO NOT MATCH

is it my TYPEDEF? whatS the problem?

rxbagain
April 15th, 2009, 04:27 PM
First, word and byte are both reserved words (data types) in assembly and you should not redefine them. You're lucky? you did not get an error in your typedef.

Second, byte accepts values of up to 0FFh only. Again, you're lucky? if you did not get any error in your j and k declarations :D

The "OPERAND TYPES DO NOT MATCH" is in "mov ax, j". j is a byte (1 byte) and you are trying to copy it to a WORD register (2 bytes) and so the assembler is complains about type mismatch.

Edit: you should use "CALL" in using a function (e.g. call putc). Also, you have to be careful in passing parameter as well as the calling convention used by the function (e.g. _cdecl, _stdcall, _pascal, etc.) to avoid stack corruption.