From: Rod Pemberton on

Just an FYI,

I was cleaning up the 16-bit .asm I created from NASM's 0.98.39 insns.dat to
find errors with Willow's Crudasm. I ran the resulting NASM 0.98.39 .bin
file through Ndisasm.exe from NASM 2.03.01 (both for DOS). This is a list
of those instructions which didn't disassemble the same. If it appeared
that 2.03.01 had a completely disassembled instruction, it follows after the
semi-colon. I also noticed that 'lfs' and 'lgs' disassembled correctly, but
not 'lds' and 'les'...(?)


BITS 16

cmpxchg486 [0xBBEE],al
cmpxchg486 al,bl
cmpxchg486 [0xBBEE],ax
cmpxchg486 ax,bx
cmpxchg486 [0xBBEE],eax
cmpxchg486 eax,ebx
ibts [0xBBEE],ax
ibts ax,bx
ibts [0xBBEE],eax
ibts eax,ebx
lds ax,[0xBBEE]
lds eax,[0xBBEE]
les ax,[0xBBEE]
les eax,[0xBBEE]
mov eax,tr3
mov tr3,eax
pmvgezb mm1,[0xBBEE] ;subps xmm1,[0xbbee]
pmvlzb mm1,[0xBBEE] ;cvtdq2ps xmm1,[0xbbee]
pmvnzb mm1,[0xBBEE] ;cvtps2pd xmm1,[0xbbee]
pmvzb mm1,[0xBBEE] ;addps xmm1,[0xbbee]
pop cs ;nop word [bx]
psubsiw mm1,[0xBBEE] ;andnps xmm1,[0xbbee]
psubsiw mm0,mm1 ;andnps xmm0,xmm1
smi
smint
smintold
xbts ax,[0xBBEE]
xbts ax,bx
xbts eax,[0xBBEE]
xbts eax,ebx
pshuflw xmm0,xmm1,byte 0x33 ;db 0xF2 pshufw mm0,mm1,0x33
pshuflw xmm1,[0xBBEE],byte 0x33 ;db 0xF2 pshufw mm1,[0xbbee],0x33
rsdc es,tword [0xBBEE] ;vmwrite eax,dword [0xbbee]
svdc tword [0xBBEE],es ;vmread dword [0xbbee],eax
svldt tword [0xBBEE]
movdq2q mm1,xmm1

HTH,


Rod Pemberton

From: Rod Pemberton on
"Rod Pemberton" <do_not_have(a)nohavenot.cmm> wrote in message
news:g82i1m$822$1(a)aioe.org...
>
> Just an FYI,
>
> I was cleaning up the 16-bit .asm I created from NASM's 0.98.39 insns.dat
to
> find errors with Willow's Crudasm. I ran the resulting NASM 0.98.39 .bin
> file through Ndisasm.exe from NASM 2.03.01 (both for DOS). This is a list
> of those instructions which didn't disassemble the same. If it appeared
> that 2.03.01 had a completely disassembled instruction, it follows after
the
> semi-colon. I also noticed that 'lfs' and 'lgs' disassembled correctly,
but
> not 'lds' and 'les'...(?)
>
>
> BITS 16
>
> cmpxchg486 [0xBBEE],al
> cmpxchg486 al,bl
> cmpxchg486 [0xBBEE],ax
> cmpxchg486 ax,bx
> cmpxchg486 [0xBBEE],eax
> cmpxchg486 eax,ebx
> ibts [0xBBEE],ax
> ibts ax,bx
> ibts [0xBBEE],eax
> ibts eax,ebx
> lds ax,[0xBBEE]
> lds eax,[0xBBEE]
> les ax,[0xBBEE]
> les eax,[0xBBEE]
> mov eax,tr3
> mov tr3,eax
> pmvgezb mm1,[0xBBEE] ;subps xmm1,[0xbbee]
> pmvlzb mm1,[0xBBEE] ;cvtdq2ps xmm1,[0xbbee]
> pmvnzb mm1,[0xBBEE] ;cvtps2pd xmm1,[0xbbee]
> pmvzb mm1,[0xBBEE] ;addps xmm1,[0xbbee]
> pop cs ;nop word [bx]
> psubsiw mm1,[0xBBEE] ;andnps xmm1,[0xbbee]
> psubsiw mm0,mm1 ;andnps xmm0,xmm1
> smi
> smint
> smintold
> xbts ax,[0xBBEE]
> xbts ax,bx
> xbts eax,[0xBBEE]
> xbts eax,ebx
> pshuflw xmm0,xmm1,byte 0x33 ;db 0xF2 pshufw mm0,mm1,0x33
> pshuflw xmm1,[0xBBEE],byte 0x33 ;db 0xF2 pshufw mm1,[0xbbee],0x33
> rsdc es,tword [0xBBEE] ;vmwrite eax,dword [0xbbee]
> svdc tword [0xBBEE],es ;vmread dword [0xbbee],eax
> svldt tword [0xBBEE]
> movdq2q mm1,xmm1
>
>

And, some more differences... E.g., sal as shl and register/memory
reversals on test and xchg.

icebp ;int1
paddsiw mm1,[0xBBEE] ;sqrtps xmm1,[0xbbee]
paddsiw mm0,mm1 ;sqrtps xmm0,xmm1
paveb mm0,mm1 ;movmskps eax,xmm1
pdistib mm1,[0xBBEE] ;andps xmm1,[0xbbee]
pmachriw mm1,[0xBBEE] ;divps xmm1,[0xbbee]
pmagw mm1,[0xBBEE] ;rsqrtps xmm1,[0xbbee]
pmagw mm0,mm1 ;rsqrtps xmm0,xmm1
pmulhriw mm1,[0xBBEE] ;minps xmm1,[0xbbee]
pmulhriw mm0,mm1 ;minps xmm0,xmm1
pmulhrwc mm1,[0xBBEE] ;mulps xmm1,[0xbbee]
pmulhrwc mm0,mm1 ;mulps xmm0,xmm1
syscall ;loadall286
sysret ;loadall
test al,[0xBBEE] ;test [0xbbee],al
test ax,[0xBBEE] ;test [0xbbee],ax
test eax,[0xBBEE] ;test [0xbbee],eax
umov [0xBBEE],al ;movups xmm0,[0xbbee]
umov al,bl ;movups xmm3,xmm0
umov [0xBBEE],ax ;movups [0xbbee],xmm0
umov ax,bx ;movups xmm0,xmm3
umov [0xBBEE],eax ;movupd [0xbbee],xmm0
umov eax,ebx ;movupd xmm3,xmm0
umov al,[0xBBEE] ;movlps xmm0,[0xbbee]
umov al,bl ;movups xmm3,xmm0
umov ax,[0xBBEE] ;movlps [0xbbee],xmm0
umov ax,bx ;movups xmm0,xmm3
umov eax,[0xBBEE] ;movlpd [0xbbee],xmm0
umov eax,ebx ;movupd xmm3,xmm0
xchg [0xBBEE],al ;xchg al,[0xbbee]
xchg [0xBBEE],ax ;xchg ax,[0xbbee]
xchg [0xBBEE],eax ;xchg eax,[0xbbee]
movd xmm1,eax ;movd mm1,eax
movd xmm1,[0xBBEE] ;movd mm1,[0xbbee]

HTH,


Rod Pemberton

From: Wolfgang Kern on

Rod Pemberton posted (in part):

....
>> ibts [0xBBEE],ax
>> xbts ax,[0xBBEE]
>> smint
>> smintold
>> rsdc es,tword [0xBBEE] ;vmwrite eax,dword [0xbbee]
>> svdc tword [0xBBEE],es ;vmread dword [0xbbee],eax
>> svldt tword [0xBBEE]

I haven't any of these in my list,
which instructions/opcodes are meant with the above ?

__
wolfgang






From: Rod Pemberton on
"Wolfgang Kern" <nowhere(a)never.at> wrote in message
news:g83bsa$opk$2(a)newsreader2.utanet.at...
>
> Rod Pemberton posted (in part):
>
> ...
> >> ibts [0xBBEE],ax
> >> xbts ax,[0xBBEE]
> >> smint
> >> smintold
> >> rsdc es,tword [0xBBEE] ;vmwrite eax,dword [0xbbee]
> >> svdc tword [0xBBEE],es ;vmread dword [0xbbee],eax
> >> svldt tword [0xBBEE]
>
> I haven't any of these in my list,
> which instructions/opcodes are meant with the above ?
>

These are in described in the NASM 0.98.39 nasmdoc.txt. The complete
descriptions are too much to post (and probably copyrighted), so these are
first couple of lines from it for each instruction. (You'll notice that
IBTS and XBTS have the same opcode as CMPXCHG486.)

B.4.116 `IBTS': Insert Bit String

IBTS r/m16,reg16 ; o16 0F A7 /r [386,UNDOC]
IBTS r/m32,reg32 ; o32 0F A7 /r [386,UNDOC]

B.4.332 `XBTS': Extract Bit String

XBTS reg16,r/m16 ; o16 0F A6 /r [386,UNDOC]
XBTS reg32,r/m32 ; o32 0F A6 /r [386,UNDOC]

B.4.295 `SMINT', `SMINTOLD': Software SMM Entry (CYRIX)

SMINT ; 0F 38 [PENT,CYRIX]
SMINTOLD ; 0F 7E [486,CYRIX]

B.4.276 `RSDC': Restore Segment Register and Descriptor

RSDC segreg,m80 ; 0F 79 /r [486,CYRIX,SMM]

B.4.310 `SVDC': Save Segment Register and Descriptor

SVDC m80,segreg ; 0F 78 /r [486,CYRIX,SMM]

B.4.311 `SVLDT': Save LDTR and Descriptor

SVLDT m80 ; 0F 7A /0 [486,CYRIX,SMM]


Rod Pemberton

From: Frank Kotler on
Rod Pemberton wrote:

....
> I also noticed that 'lfs' and 'lgs' disassembled correctly, but
> not 'lds' and 'les'...(?)

This is one that's been discovered and fixed. Get the very latest, hot
off the presses, version here:

ftp://ftp.zytor.com/pub/nasm/snapshots/

Or watch it as it happens:

http://repo.or.cz/w/nasm.git

Sorry 'bout the "instability"... They complained when it was "dead",
too... :)

Best,
Frank