Code:
.model small
.386
.stack 200h
.data
msg1 db 13,10, "This is a program to perform logical operations $"
msg2 db 13,10, "on binary,  $"

msg4 db 13,10, "Enter first data(16bit ): $"
msg5 db 13,10, "Enter second data(16bit): $"
msg7 db 13,10, "Select operation: $"
msg8 db 13,10, "1-XOR 2-XNOR $"
msg9 db 13,10, "Invalid operand! Please reenter. $"
msg10 db 13,10, "Invalid operation! Please reenter. $"
msg11 db 13,10, "Answer: $"
msg12 db 13,10, "Enter y or Y to repeat the program. $"
msg13 db 13,10, "$"
opchoic db 2,3 dup(?)
bina1 db 17,18 dup(?)
data db 2,3 dup(?)

.code
start:
mov ax, seg msg1
mov ds, ax
mov dx, offset msg13
mov ah, 09h
int 21h
mov dx, offset msg1
int 21h
mov dx, offset msg2
int 21h

opchoice:			;choose operation
mov dx, offset msg7
mov ah, 09h
int 21h
mov dx, offset msg8
int 21h
mov dx, offset opchoic
mov ah, 0ah
int 21h
mov di, offset opchoic[2]
mov dh, 0
mov dl, [di]
cmp dx, 31h
je binain1
mov di, offset opchoic[2]
mov dh, 0
mov dl, [di]
cmp dx, 32h
je binain1



mov dx, offset msg10
mov ah, 09h
int 21h
jmp opchoice


binain1:			;first binary data input
mov bx, 0
mov dx, offset msg4
mov ah, 09h
int 21h
call binain
call binacheck
cmp bx, 1
je binain1
call binaconv



binain2:			;second binary data input
mov bx, 0
mov dx, offset msg5
mov ah, 09h
int 21h
call binain
call binacheck
cmp bx, 1
je binain2
call binaconv
jmp recheckopbi

recheckopbi:
mov di, offset opchoic+2
mov dh, 0
mov dl, [di]
cmp dx, 31h
je xorop
jmp xnorop


recheckophe:
mov di, offset opchoic+2
mov dh, 0
mov dl, [di]
cmp dx, 31h
je xorop


xorop:				;xor operation
pop bx
pop ax
xor ax, bx
push ax
jmp convbina

xnorop:
pop bx
pop ax
xor ax, bx
push ax
jmp notop

notop:
pop ax
not al
push ax
jmp convbina

convbina:			;convert hexadecimal to binary and display
mov cx, 16
pop ax
loopcbina1:
mov dx, 2
div dl
mov bh, 0
mov bl, ah
push bx
loop loopcbina1
mov dx, offset msg11
mov ah, 09h
int 21h
mov cx, 16
loopcbina2:
mov dx, 0
pop dx
add dx, 30h
mov ah, 06h
int 21h
loop loopcbina2
jmp finish


finish:
mov dx, offset msg12
mov ah, 09h
int 21h
mov dx, offset data
mov ah, 0ah
int 21h
mov di, offset data+2
mov dh, 0
mov dl, [di]
cmp dx, 59h
je start
cmp dx, 79h
je start
.exit

binain proc near		;binary input procedure
mov dx, offset bina1
mov ah, 0ah
int 21h
ret
binain endp



binacheck proc near		;binary validity checking procedure
mov cx, 16
mov di, offset bina1+2
binacheck1:
mov dh, 0
mov dl, [di]
inc di
cmp dx, 30h
je loopbina
cmp dx, 31h
je loopbina
mov bx, 1
mov dx, offset msg9
mov ah, 09h
int 21h
jmp donebck
loopbina:
loop binacheck1
donebck:
ret
binacheck endp



binaconv proc near		;binary to hexadecimal conversion procedure
mov bx, 0
mov cx, 16
mov di, offset bina1+9
mov dx, 1
binaconv1:
push dx
mov dl, [di]
dec di
mov ax, dx
pop dx
sub al, 30h
mul dl
add bx, ax
mov ax, dx
mov dx, 2
mul dl
mov dx, ax
loop binaconv1
pop dx
push bx
push dx
ret
binaconv endp


end start
this is my program... xor and xnor program.
suppose the input are 8 bit..
i want to make this program where the input can be up to two bytes( that is 16 bit) and give correct answer..
i have try to modify it, but the result are not correct.
pls help me.
where should i change the coding and what should i do..
thanks for the help...