forked from KolibriOS/kolibrios
mtdbg: small improvements in disassembler (but it is still incomplete)
git-svn-id: svn://kolibrios.org@809 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
parent
c8bb74ecc2
commit
37d1685bad
@ -1030,7 +1030,8 @@ draw_window:
|
|||||||
call draw_dump
|
call draw_dump
|
||||||
call draw_disasm
|
call draw_disasm
|
||||||
; end redraw
|
; end redraw
|
||||||
mov al, 12
|
push 12
|
||||||
|
pop eax
|
||||||
push 2
|
push 2
|
||||||
pop ebx
|
pop ebx
|
||||||
mcall
|
mcall
|
||||||
@ -3306,8 +3307,6 @@ disasm_loop1:
|
|||||||
|
|
||||||
cop0:
|
cop0:
|
||||||
clock:
|
clock:
|
||||||
crepnz:
|
|
||||||
crep:
|
|
||||||
csegcs:
|
csegcs:
|
||||||
csegds:
|
csegds:
|
||||||
cseges:
|
cseges:
|
||||||
@ -3356,8 +3355,6 @@ cmd1:
|
|||||||
db 0xC9,5,'leave'
|
db 0xC9,5,'leave'
|
||||||
db 0xCC,4,'int3'
|
db 0xCC,4,'int3'
|
||||||
db 0xF0,4,'lock'
|
db 0xF0,4,'lock'
|
||||||
db 0xF2,5,'repnz'
|
|
||||||
db 0xF3,6,'rep(z)'
|
|
||||||
db 0xF5,3,'cmc'
|
db 0xF5,3,'cmc'
|
||||||
db 0xF8,3,'clc'
|
db 0xF8,3,'clc'
|
||||||
db 0xF9,3,'stc'
|
db 0xF9,3,'stc'
|
||||||
@ -3367,17 +3364,17 @@ cmd1:
|
|||||||
db 0xFD,3,'std'
|
db 0xFD,3,'std'
|
||||||
cmd2:
|
cmd2:
|
||||||
db 0x05,7,'syscall'
|
db 0x05,7,'syscall'
|
||||||
|
db 0x06,4,'clts'
|
||||||
db 0x31,5,'rdtsc'
|
db 0x31,5,'rdtsc'
|
||||||
db 0x34,8,'sysenter'
|
db 0x34,8,'sysenter'
|
||||||
db 0xA2,5,'cpuid'
|
db 0xA2,5,'cpuid'
|
||||||
db 0x77,4,'emms'
|
db 0x77,4,'emms'
|
||||||
endg
|
endg
|
||||||
jmp @f
|
jmp @f
|
||||||
csysenter:
|
|
||||||
csyscall:
|
|
||||||
ccpuid:
|
ccpuid:
|
||||||
crdtsc:
|
crdtsc:
|
||||||
cemms:
|
cemms:
|
||||||
|
cop0_F:
|
||||||
mov esi, cmd2
|
mov esi, cmd2
|
||||||
@@:
|
@@:
|
||||||
cmp al, [esi]
|
cmp al, [esi]
|
||||||
@ -3418,13 +3415,7 @@ c66:
|
|||||||
or ch, 1
|
or ch, 1
|
||||||
jmp disasm_loop1
|
jmp disasm_loop1
|
||||||
|
|
||||||
center:
|
|
||||||
caam:
|
|
||||||
cxlat:
|
cxlat:
|
||||||
ccmpxchg:
|
|
||||||
cbsf:
|
|
||||||
cbsr:
|
|
||||||
ccmpxchg8b:
|
|
||||||
cunk:
|
cunk:
|
||||||
cerr:
|
cerr:
|
||||||
mov eax, '???'
|
mov eax, '???'
|
||||||
@ -3436,6 +3427,162 @@ cF:
|
|||||||
call disasm_get_byte
|
call disasm_get_byte
|
||||||
jmp dword [disasm_table_2 + eax*4]
|
jmp dword [disasm_table_2 + eax*4]
|
||||||
|
|
||||||
|
crep:
|
||||||
|
push [disasm_cur_pos]
|
||||||
|
call disasm_get_byte
|
||||||
|
cmp al, 0x0F
|
||||||
|
jz .sse
|
||||||
|
mov dl, al
|
||||||
|
mov eax, 'rep '
|
||||||
|
stosd
|
||||||
|
mov al, dl
|
||||||
|
@@:
|
||||||
|
and eax, not 1
|
||||||
|
cmp al, 0x66
|
||||||
|
jnz @f
|
||||||
|
call disasm_get_byte
|
||||||
|
mov dl, al
|
||||||
|
jmp @b
|
||||||
|
@@:
|
||||||
|
cmp al, 0xA6
|
||||||
|
jz .repz
|
||||||
|
cmp al, 0xAE
|
||||||
|
jz .repz
|
||||||
|
cmp al, 0xA4
|
||||||
|
jz .prefix
|
||||||
|
cmp al, 0xAA
|
||||||
|
jz .prefix
|
||||||
|
cmp al, 0xAC
|
||||||
|
jz .prefix
|
||||||
|
cmp al, 0x6C
|
||||||
|
jz .prefix
|
||||||
|
cmp al, 0x6E
|
||||||
|
jz .prefix
|
||||||
|
.noprefix:
|
||||||
|
pop [disasm_cur_pos]
|
||||||
|
and byte [edi-1], 0
|
||||||
|
ret
|
||||||
|
.repz:
|
||||||
|
mov byte [edi-1], 'z'
|
||||||
|
mov al, ' '
|
||||||
|
stosb
|
||||||
|
.prefix:
|
||||||
|
pop [disasm_cur_pos]
|
||||||
|
jmp disasm_loop1
|
||||||
|
.sse:
|
||||||
|
pop eax
|
||||||
|
call disasm_get_byte
|
||||||
|
iglobal
|
||||||
|
rep_sse_cmds:
|
||||||
|
db 0x58,3,'add'
|
||||||
|
db 0xC2,3,'cmp'
|
||||||
|
db 0,0
|
||||||
|
endg
|
||||||
|
mov esi, rep_sse_cmds+1
|
||||||
|
@@:
|
||||||
|
movzx edx, byte [esi]
|
||||||
|
cmp al, [esi-1]
|
||||||
|
jz @f
|
||||||
|
lea esi, [esi+edx+2]
|
||||||
|
cmp byte [esi], 0
|
||||||
|
jnz @b
|
||||||
|
sub [disasm_cur_pos], 2
|
||||||
|
mov eax, 'rep'
|
||||||
|
stosd
|
||||||
|
ret
|
||||||
|
@@:
|
||||||
|
push ecx
|
||||||
|
mov ecx, edx
|
||||||
|
inc esi
|
||||||
|
rep movsb
|
||||||
|
pop ecx
|
||||||
|
mov al, 's'
|
||||||
|
stosb
|
||||||
|
jmp rep_sse_final
|
||||||
|
|
||||||
|
crepnz:
|
||||||
|
call disasm_get_byte
|
||||||
|
cmp al, 0x0F
|
||||||
|
jz .sse
|
||||||
|
mov dl, al
|
||||||
|
mov eax, 'repn'
|
||||||
|
stosd
|
||||||
|
mov al, 'z'
|
||||||
|
stosb
|
||||||
|
mov al, ' '
|
||||||
|
stosb
|
||||||
|
movzx eax, dl
|
||||||
|
cmp al, 0x6C
|
||||||
|
jb crep.noprefix
|
||||||
|
cmp al, 0x6F
|
||||||
|
jbe .prefix
|
||||||
|
cmp al, 0xA4
|
||||||
|
jb crep.noprefix
|
||||||
|
cmp al, 0xA7
|
||||||
|
jbe .prefix
|
||||||
|
cmp al, 0xAA
|
||||||
|
jb crep.noprefix
|
||||||
|
cmp al, 0xAF
|
||||||
|
ja crep.noprefix
|
||||||
|
.prefix:
|
||||||
|
jmp cop0
|
||||||
|
.sse:
|
||||||
|
call disasm_get_byte
|
||||||
|
mov esi, rep_sse_cmds+1
|
||||||
|
@@:
|
||||||
|
movzx edx, byte [esi]
|
||||||
|
cmp al, [esi-1]
|
||||||
|
jz .found0
|
||||||
|
lea esi, [esi+edx+2]
|
||||||
|
cmp byte [esi], 0
|
||||||
|
jnz @b
|
||||||
|
mov esi, sse_cmds2+1
|
||||||
|
@@:
|
||||||
|
movzx edx, byte [esi]
|
||||||
|
cmp al, [esi-1]
|
||||||
|
jz .found1
|
||||||
|
lea esi, [esi+edx+2]
|
||||||
|
cmp byte [esi], 0
|
||||||
|
jnz @b
|
||||||
|
sub [disasm_cur_pos], 2
|
||||||
|
mov eax, 'repn'
|
||||||
|
stosd
|
||||||
|
mov al, 'z'
|
||||||
|
stosb
|
||||||
|
and byte [edi], 0
|
||||||
|
ret
|
||||||
|
.found0:
|
||||||
|
push ecx
|
||||||
|
mov ecx, edx
|
||||||
|
inc esi
|
||||||
|
rep movsb
|
||||||
|
pop ecx
|
||||||
|
mov al, 's'
|
||||||
|
stosb
|
||||||
|
mov al, 'd'
|
||||||
|
jmp rep_sse_final
|
||||||
|
.found1:
|
||||||
|
push ecx
|
||||||
|
mov ecx, edx
|
||||||
|
inc esi
|
||||||
|
rep movsb
|
||||||
|
pop ecx
|
||||||
|
mov al, 'p'
|
||||||
|
stosb
|
||||||
|
mov al, 's'
|
||||||
|
rep_sse_final:
|
||||||
|
stosb
|
||||||
|
push ecx
|
||||||
|
push 5
|
||||||
|
pop ecx
|
||||||
|
sub ecx, edx
|
||||||
|
adc ecx, 1
|
||||||
|
mov al, ' '
|
||||||
|
rep stosb
|
||||||
|
pop ecx
|
||||||
|
or ch, 1
|
||||||
|
jmp disasm_mmx1
|
||||||
|
|
||||||
macro disasm_set_modew
|
macro disasm_set_modew
|
||||||
{
|
{
|
||||||
test al, 1
|
test al, 1
|
||||||
@ -3838,10 +3985,27 @@ cpush22:
|
|||||||
stosd
|
stosd
|
||||||
call disasm_get_byte
|
call disasm_get_byte
|
||||||
movsx eax, al
|
movsx eax, al
|
||||||
|
@@:
|
||||||
call disasm_write_num
|
call disasm_write_num
|
||||||
and byte [edi], 0
|
and byte [edi], 0
|
||||||
ret
|
ret
|
||||||
|
|
||||||
|
center:
|
||||||
|
mov eax, 'ente'
|
||||||
|
stosd
|
||||||
|
mov eax, 'r '
|
||||||
|
stosd
|
||||||
|
xor eax, eax
|
||||||
|
call disasm_get_word
|
||||||
|
call disasm_write_num
|
||||||
|
mov al, ','
|
||||||
|
stosb
|
||||||
|
mov al, ' '
|
||||||
|
stosb
|
||||||
|
xor eax, eax
|
||||||
|
call disasm_get_byte
|
||||||
|
jmp @b
|
||||||
|
|
||||||
cinc1:
|
cinc1:
|
||||||
; inc reg32
|
; inc reg32
|
||||||
cdec1:
|
cdec1:
|
||||||
@ -3984,6 +4148,23 @@ cshift1:
|
|||||||
stosw
|
stosw
|
||||||
jmp disasm_i8u
|
jmp disasm_i8u
|
||||||
|
|
||||||
|
caam:
|
||||||
|
mov eax, 'aam '
|
||||||
|
jmp @f
|
||||||
|
caad:
|
||||||
|
mov eax, 'aad '
|
||||||
|
@@:
|
||||||
|
stosd
|
||||||
|
mov eax, ' '
|
||||||
|
stosd
|
||||||
|
xor eax, eax
|
||||||
|
call disasm_get_byte
|
||||||
|
cmp al, 10
|
||||||
|
jz @f
|
||||||
|
call disasm_write_num
|
||||||
|
@@:
|
||||||
|
and byte [edi], 0
|
||||||
|
ret
|
||||||
|
|
||||||
cmov3:
|
cmov3:
|
||||||
; A0: mov al,[ofs32]
|
; A0: mov al,[ofs32]
|
||||||
@ -4117,6 +4298,25 @@ cop21:
|
|||||||
and byte [edi], 0
|
and byte [edi], 0
|
||||||
ret
|
ret
|
||||||
|
|
||||||
|
carpl:
|
||||||
|
xor edx, edx
|
||||||
|
or ch, 0C1h
|
||||||
|
mov eax, 'arpl'
|
||||||
|
jmp cop22.d2
|
||||||
|
|
||||||
|
ccmpxchg:
|
||||||
|
xor edx, edx
|
||||||
|
disasm_set_modew
|
||||||
|
or ch, 40h
|
||||||
|
mov eax, 'cmpx'
|
||||||
|
stosd
|
||||||
|
mov eax, 'chg '
|
||||||
|
jmp cop22.d1
|
||||||
|
|
||||||
|
cbsf:
|
||||||
|
cbsr:
|
||||||
|
or ch, 80h
|
||||||
|
|
||||||
cop22:
|
cop22:
|
||||||
disasm_set_modew
|
disasm_set_modew
|
||||||
or ch, 40h
|
or ch, 40h
|
||||||
@ -4127,6 +4327,12 @@ cop22:
|
|||||||
mov esi, 'imul'
|
mov esi, 'imul'
|
||||||
cmp al, 0xAF
|
cmp al, 0xAF
|
||||||
jz @f
|
jz @f
|
||||||
|
mov esi, 'bsf '
|
||||||
|
cmp al, 0BCh
|
||||||
|
jz @f
|
||||||
|
mov esi, 'bsr '
|
||||||
|
cmp al, 0BDh
|
||||||
|
jz @f
|
||||||
mov esi, 'mov '
|
mov esi, 'mov '
|
||||||
cmp al, 88h
|
cmp al, 88h
|
||||||
jae @f
|
jae @f
|
||||||
@ -4141,8 +4347,10 @@ cop22:
|
|||||||
mov esi, [disasm_op2cmds+eax*4]
|
mov esi, [disasm_op2cmds+eax*4]
|
||||||
@@:
|
@@:
|
||||||
xchg eax, esi
|
xchg eax, esi
|
||||||
|
.d2:
|
||||||
stosd
|
stosd
|
||||||
mov eax, ' '
|
mov eax, ' '
|
||||||
|
.d1:
|
||||||
stosd
|
stosd
|
||||||
call disasm_get_byte
|
call disasm_get_byte
|
||||||
dec [disasm_cur_pos]
|
dec [disasm_cur_pos]
|
||||||
@ -4154,6 +4362,10 @@ cop22:
|
|||||||
jz @f
|
jz @f
|
||||||
cmp dl, 0x87
|
cmp dl, 0x87
|
||||||
jz @f
|
jz @f
|
||||||
|
cmp dl, 0xBC
|
||||||
|
jz @f
|
||||||
|
cmp dl, 0xBD
|
||||||
|
jz @f
|
||||||
test dl, 2
|
test dl, 2
|
||||||
jz .d0
|
jz .d0
|
||||||
@@:
|
@@:
|
||||||
@ -4173,6 +4385,14 @@ cop22:
|
|||||||
and byte [edi], 0
|
and byte [edi], 0
|
||||||
ret
|
ret
|
||||||
|
|
||||||
|
cbound:
|
||||||
|
mov edx, eax
|
||||||
|
mov eax, 'boun'
|
||||||
|
stosd
|
||||||
|
mov eax, 'd '
|
||||||
|
or ch, 0xC0
|
||||||
|
jmp cop22.d1
|
||||||
|
|
||||||
cop23:
|
cop23:
|
||||||
disasm_set_modew
|
disasm_set_modew
|
||||||
xchg eax, edx
|
xchg eax, edx
|
||||||
@ -4332,8 +4552,51 @@ cjcc2:
|
|||||||
stosd
|
stosd
|
||||||
mov eax, ' '
|
mov eax, ' '
|
||||||
stosd
|
stosd
|
||||||
|
test ch, 1
|
||||||
|
jnz @f
|
||||||
call disasm_get_dword
|
call disasm_get_dword
|
||||||
jmp disasm_rva
|
jmp disasm_rva
|
||||||
|
@@:
|
||||||
|
call disasm_get_word
|
||||||
|
add eax, [disasm_cur_pos]
|
||||||
|
and eax, 0xFFFF
|
||||||
|
call disasm_write_num
|
||||||
|
and byte [edi], 0
|
||||||
|
ret
|
||||||
|
|
||||||
|
ccallf:
|
||||||
|
mov eax, 'call'
|
||||||
|
stosd
|
||||||
|
mov eax, ' '
|
||||||
|
stosd
|
||||||
|
mov al, 'd'
|
||||||
|
test ch, 1
|
||||||
|
jnz @f
|
||||||
|
mov al, 'p'
|
||||||
|
@@:
|
||||||
|
stosb
|
||||||
|
mov eax, 'word'
|
||||||
|
stosd
|
||||||
|
mov al, ' '
|
||||||
|
stosb
|
||||||
|
test ch, 1
|
||||||
|
jnz .1
|
||||||
|
call disasm_get_dword
|
||||||
|
jmp .2
|
||||||
|
.1:
|
||||||
|
xor eax, eax
|
||||||
|
call disasm_get_word
|
||||||
|
.2:
|
||||||
|
push eax
|
||||||
|
xor eax, eax
|
||||||
|
call disasm_get_word
|
||||||
|
call disasm_write_num
|
||||||
|
mov al, ':'
|
||||||
|
stosb
|
||||||
|
pop eax
|
||||||
|
call disasm_write_num
|
||||||
|
and byte [edi], 0
|
||||||
|
ret
|
||||||
|
|
||||||
iglobal
|
iglobal
|
||||||
op11codes dd 'test',0,'not ','neg ','mul ','imul','div ','idiv'
|
op11codes dd 'test',0,'not ','neg ','mul ','imul','div ','idiv'
|
||||||
@ -4343,28 +4606,59 @@ cop1:
|
|||||||
disasm_set_modew
|
disasm_set_modew
|
||||||
xchg eax, edx
|
xchg eax, edx
|
||||||
call disasm_get_byte
|
call disasm_get_byte
|
||||||
|
movzx esi, al
|
||||||
dec [disasm_cur_pos]
|
dec [disasm_cur_pos]
|
||||||
shr al, 3
|
shr al, 3
|
||||||
and eax, 7
|
and eax, 7
|
||||||
cmp dl, 0xFE
|
cmp dl, 0xFE
|
||||||
jnz @f
|
jnz @f
|
||||||
cmp al, 1
|
cmp al, 1
|
||||||
ja cunk
|
jbe @f
|
||||||
|
.0:
|
||||||
|
inc [disasm_cur_pos]
|
||||||
|
jmp cunk
|
||||||
@@:
|
@@:
|
||||||
and edx, 8
|
and edx, 8
|
||||||
add eax, edx
|
add eax, edx
|
||||||
|
cmp al, 11
|
||||||
|
jz .callfar
|
||||||
|
cmp al, 13
|
||||||
|
jz .jmpfar
|
||||||
mov eax, [op11codes+eax*4]
|
mov eax, [op11codes+eax*4]
|
||||||
test eax, eax
|
test eax, eax
|
||||||
jz cunk
|
jz .0
|
||||||
cmp eax, 'test'
|
cmp eax, 'test'
|
||||||
jz ctest
|
jz ctest
|
||||||
@@:
|
.2:
|
||||||
stosd
|
stosd
|
||||||
mov eax, ' '
|
mov eax, ' '
|
||||||
stosd
|
stosd
|
||||||
call disasm_readrmop
|
call disasm_readrmop
|
||||||
and byte [edi], 0
|
and byte [edi], 0
|
||||||
ret
|
ret
|
||||||
|
.callfar:
|
||||||
|
mov eax, 'call'
|
||||||
|
.1:
|
||||||
|
cmp esi, 0xC0
|
||||||
|
jae .0
|
||||||
|
stosd
|
||||||
|
mov eax, ' '
|
||||||
|
stosd
|
||||||
|
mov eax, 'far '
|
||||||
|
stosd
|
||||||
|
mov al, 'd'
|
||||||
|
test ch, 1
|
||||||
|
jnz @f
|
||||||
|
mov al, 'p'
|
||||||
|
@@:
|
||||||
|
stosb
|
||||||
|
or ch, 1
|
||||||
|
call disasm_readrmop
|
||||||
|
and byte [edi], 0
|
||||||
|
ret
|
||||||
|
.jmpfar:
|
||||||
|
mov eax, 'jmp '
|
||||||
|
jmp .1
|
||||||
|
|
||||||
cpop2:
|
cpop2:
|
||||||
or ch, 80h
|
or ch, 80h
|
||||||
@ -4373,7 +4667,7 @@ cpop2:
|
|||||||
test al, 00111000b
|
test al, 00111000b
|
||||||
jnz cunk
|
jnz cunk
|
||||||
mov eax, 'pop '
|
mov eax, 'pop '
|
||||||
jmp @b
|
jmp cop1.2
|
||||||
|
|
||||||
cloopnz:
|
cloopnz:
|
||||||
mov eax, 'loop'
|
mov eax, 'loop'
|
||||||
@ -4504,7 +4798,7 @@ ccbw:
|
|||||||
jnz @f
|
jnz @f
|
||||||
mov eax, 'cwde'
|
mov eax, 'cwde'
|
||||||
@@: stosd
|
@@: stosd
|
||||||
and byte [edi+1], 0
|
and byte [edi], 0
|
||||||
ret
|
ret
|
||||||
ccwd:
|
ccwd:
|
||||||
mov eax, 'cwd '
|
mov eax, 'cwd '
|
||||||
@ -4513,6 +4807,28 @@ ccwd:
|
|||||||
mov eax, 'cdq '
|
mov eax, 'cdq '
|
||||||
jmp @b
|
jmp @b
|
||||||
|
|
||||||
|
ccmpxchg8b:
|
||||||
|
call disasm_get_byte
|
||||||
|
cmp al, 0xC0
|
||||||
|
jae cerr
|
||||||
|
shr al, 3
|
||||||
|
and al, 7
|
||||||
|
cmp al, 1
|
||||||
|
jnz cerr
|
||||||
|
dec [disasm_cur_pos]
|
||||||
|
mov eax, 'cmpx'
|
||||||
|
stosd
|
||||||
|
mov eax, 'chg8'
|
||||||
|
stosd
|
||||||
|
mov al, 'b'
|
||||||
|
stosb
|
||||||
|
mov al, ' '
|
||||||
|
stosb
|
||||||
|
or ch, 40h
|
||||||
|
call disasm_readrmop
|
||||||
|
and byte [edi], 0
|
||||||
|
ret
|
||||||
|
|
||||||
iglobal
|
iglobal
|
||||||
fpuD8 dd 'add ','mul ','com ','comp','sub ','subr','div ','divr'
|
fpuD8 dd 'add ','mul ','com ','comp','sub ','subr','div ','divr'
|
||||||
endg
|
endg
|
||||||
@ -5052,8 +5368,67 @@ disasm_mmx1:
|
|||||||
mov ax, ', '
|
mov ax, ', '
|
||||||
stosw
|
stosw
|
||||||
call disasm_readrmop
|
call disasm_readrmop
|
||||||
|
cmp word [disasm_string], 'cm'
|
||||||
|
jz .cmp
|
||||||
and byte [edi], 0
|
and byte [edi], 0
|
||||||
ret
|
ret
|
||||||
|
.cmp:
|
||||||
|
call disasm_get_byte
|
||||||
|
and eax, 7
|
||||||
|
mov dx, 'eq'
|
||||||
|
dec eax
|
||||||
|
js @f
|
||||||
|
mov dx, 'lt'
|
||||||
|
jz @f
|
||||||
|
mov dh, 'e'
|
||||||
|
dec eax
|
||||||
|
jnz .no2
|
||||||
|
@@:
|
||||||
|
xchg dx, word [disasm_string+3]
|
||||||
|
mov word [disasm_string+5], dx
|
||||||
|
and byte [edi], 0
|
||||||
|
ret
|
||||||
|
.no2:
|
||||||
|
dec eax
|
||||||
|
jnz @f
|
||||||
|
add edi, 2
|
||||||
|
push edi
|
||||||
|
lea esi, [edi-3]
|
||||||
|
lea ecx, [esi-(disasm_string+8)+2]
|
||||||
|
std
|
||||||
|
rep movsb
|
||||||
|
cld
|
||||||
|
mov cx, word [esi-3]
|
||||||
|
mov dword [esi-3], 'unor'
|
||||||
|
mov byte [esi+1], 'd'
|
||||||
|
mov word [esi+2], cx
|
||||||
|
pop edi
|
||||||
|
and byte [edi+1], 0
|
||||||
|
ret
|
||||||
|
@@:
|
||||||
|
mov edx, 'neq'
|
||||||
|
dec eax
|
||||||
|
jz @f
|
||||||
|
mov edx, 'nlt'
|
||||||
|
dec eax
|
||||||
|
jz @f
|
||||||
|
mov edx, 'nle'
|
||||||
|
dec eax
|
||||||
|
jz @f
|
||||||
|
mov edx, 'ord'
|
||||||
|
@@:
|
||||||
|
push edi
|
||||||
|
lea esi, [edi-1]
|
||||||
|
lea ecx, [esi-(disasm_string+8)+2]
|
||||||
|
std
|
||||||
|
rep movsb
|
||||||
|
cld
|
||||||
|
mov cx, word [esi-3]
|
||||||
|
mov dword [esi-3], edx
|
||||||
|
mov word [esi], cx
|
||||||
|
pop edi
|
||||||
|
and byte [edi+1], 0
|
||||||
|
ret
|
||||||
|
|
||||||
cpsrlw:
|
cpsrlw:
|
||||||
mov eax, 'psrl'
|
mov eax, 'psrl'
|
||||||
@ -5092,6 +5467,63 @@ cpsllq:
|
|||||||
stosd
|
stosd
|
||||||
jmp disasm_mmx1
|
jmp disasm_mmx1
|
||||||
|
|
||||||
|
csse1:
|
||||||
|
iglobal
|
||||||
|
sse_cmds1:
|
||||||
|
db 0x2F,4,'comi'
|
||||||
|
db 0x54,3,'and'
|
||||||
|
db 0x55,4,'andn'
|
||||||
|
db 0x58,3,'add'
|
||||||
|
db 0xC2,3,'cmp'
|
||||||
|
endg
|
||||||
|
mov esi, sse_cmds1+1
|
||||||
|
.1:
|
||||||
|
@@:
|
||||||
|
movzx edx, byte [esi]
|
||||||
|
cmp al, [esi-1]
|
||||||
|
jz @f
|
||||||
|
lea esi, [esi+edx+2]
|
||||||
|
jmp @b
|
||||||
|
@@:
|
||||||
|
push ecx
|
||||||
|
mov ecx, edx
|
||||||
|
inc esi
|
||||||
|
rep movsb
|
||||||
|
pop ecx
|
||||||
|
mov al, 's'
|
||||||
|
cmp byte [edi-1], 'i'
|
||||||
|
jz @f
|
||||||
|
mov al, 'p'
|
||||||
|
@@:
|
||||||
|
stosb
|
||||||
|
mov al, 'd'
|
||||||
|
test ch, 1
|
||||||
|
jnz @f
|
||||||
|
mov al, 's'
|
||||||
|
@@:
|
||||||
|
stosb
|
||||||
|
push ecx
|
||||||
|
push 5
|
||||||
|
pop ecx
|
||||||
|
sub ecx, edx
|
||||||
|
adc ecx, 1
|
||||||
|
mov al, ' '
|
||||||
|
rep stosb
|
||||||
|
pop ecx
|
||||||
|
or ch, 1 ; force XMM reg
|
||||||
|
jmp disasm_mmx1
|
||||||
|
|
||||||
|
csse2:
|
||||||
|
iglobal
|
||||||
|
sse_cmds2:
|
||||||
|
db 0xD0,6,'addsub'
|
||||||
|
db 0,0
|
||||||
|
endg
|
||||||
|
test ch, 1
|
||||||
|
jz cerr
|
||||||
|
mov esi, sse_cmds2+1
|
||||||
|
jmp csse1.1
|
||||||
|
|
||||||
cpshift:
|
cpshift:
|
||||||
mov dl, al
|
mov dl, al
|
||||||
mov ax, 'ps'
|
mov ax, 'ps'
|
||||||
@ -5149,13 +5581,35 @@ cpshift:
|
|||||||
and byte [edi], 0
|
and byte [edi], 0
|
||||||
ret
|
ret
|
||||||
|
|
||||||
|
iglobal
|
||||||
|
grp15c1 dq 'fxsave ','fxrstor ','ldmxcsr ','stmxcsr ',0,0,0,'clflush '
|
||||||
|
endg
|
||||||
|
cgrp15:
|
||||||
|
call disasm_get_byte
|
||||||
|
cmp al, 0xC0
|
||||||
|
jae cunk
|
||||||
|
shr al, 3
|
||||||
|
and eax, 7
|
||||||
|
mov edx, eax
|
||||||
|
mov eax, dword [grp15c1+eax*8]
|
||||||
|
test eax, eax
|
||||||
|
jz cerr
|
||||||
|
dec [disasm_cur_pos]
|
||||||
|
stosd
|
||||||
|
mov eax, dword [grp15c1+4+edx*8]
|
||||||
|
stosd
|
||||||
|
or ch, 40h
|
||||||
|
call disasm_readrmop
|
||||||
|
and byte [edi], 0
|
||||||
|
ret
|
||||||
|
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; DATA ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; DATA ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
|
||||||
caption_str db 'Kolibri Debugger',0
|
caption_str db 'Kolibri Debugger',0
|
||||||
caption_len = $ - caption_str
|
caption_len = $ - caption_str
|
||||||
begin_str db 'Kolibri Debugger, version 0.3',10
|
begin_str db 'Kolibri Debugger, version 0.31',10
|
||||||
db 'Hint: type "help" for help, "quit" for quit'
|
db 'Hint: type "help" for help, "quit" for quit'
|
||||||
newline db 10,0
|
newline db 10,0
|
||||||
prompt db '> ',0
|
prompt db '> ',0
|
||||||
@ -5475,21 +5929,21 @@ disasm_table_1:
|
|||||||
dd cdec1, cdec1, cdec1, cdec1, cdec1, cdec1, cdec1, cdec1
|
dd cdec1, cdec1, cdec1, cdec1, cdec1, cdec1, cdec1, cdec1
|
||||||
dd cpush1,cpush1,cpush1,cpush1,cpush1,cpush1,cpush1,cpush1 ; 5x
|
dd cpush1,cpush1,cpush1,cpush1,cpush1,cpush1,cpush1,cpush1 ; 5x
|
||||||
dd cpop1, cpop1, cpop1, cpop1, cpop1, cpop1, cpop1, cpop1
|
dd cpop1, cpop1, cpop1, cpop1, cpop1, cpop1, cpop1, cpop1
|
||||||
dd cop0, cop0, cunk, cunk, csegfs,cseggs,c66, c67 ; 6x
|
dd cop0, cop0, cbound,carpl, csegfs,cseggs,c66, c67 ; 6x
|
||||||
dd cpush21,cimul1,cpush22,cimul1,cunk,cunk, cunk, cunk
|
dd cpush21,cimul1,cpush22,cimul1,cunk,cunk, cunk, cunk
|
||||||
dd cjcc1, cjcc1, cjcc1, cjcc1, cjcc1, cjcc1, cjcc1, cjcc1 ; 7x
|
dd cjcc1, cjcc1, cjcc1, cjcc1, cjcc1, cjcc1, cjcc1, cjcc1 ; 7x
|
||||||
dd cjcc1, cjcc1, cjcc1, cjcc1, cjcc1, cjcc1, cjcc1, cjcc1
|
dd cjcc1, cjcc1, cjcc1, cjcc1, cjcc1, cjcc1, cjcc1, cjcc1
|
||||||
dd cop23, cop23, cop23, cop23, cop22, cop22, cop22, cop22 ; 8x
|
dd cop23, cop23, cop23, cop23, cop22, cop22, cop22, cop22 ; 8x
|
||||||
dd cop22, cop22, cop22, cop22, cunk, cop22, cunk, cpop2
|
dd cop22, cop22, cop22, cop22, cunk, cop22, cunk, cpop2
|
||||||
dd cop0, cxchg1,cxchg1,cxchg1,cxchg1,cxchg1,cxchg1,cxchg1 ; 9x
|
dd cop0, cxchg1,cxchg1,cxchg1,cxchg1,cxchg1,cxchg1,cxchg1 ; 9x
|
||||||
dd ccbw, ccwd, cunk, cop0, cop0, cop0, cop0, cop0
|
dd ccbw, ccwd, ccallf,cop0, cop0, cop0, cop0, cop0
|
||||||
dd cmov3, cmov3, cmov3, cmov3, cop0, cop0, cop0, cop0 ; Ax
|
dd cmov3, cmov3, cmov3, cmov3, cop0, cop0, cop0, cop0 ; Ax
|
||||||
dd cop21, cop21, cop0, cop0, cop0, cop0, cop0, cop0
|
dd cop21, cop21, cop0, cop0, cop0, cop0, cop0, cop0
|
||||||
dd cmov11,cmov11,cmov11,cmov11,cmov11,cmov11,cmov11,cmov11 ; Bx
|
dd cmov11,cmov11,cmov11,cmov11,cmov11,cmov11,cmov11,cmov11 ; Bx
|
||||||
dd cmov12,cmov12,cmov12,cmov12,cmov12,cmov12,cmov12,cmov12
|
dd cmov12,cmov12,cmov12,cmov12,cmov12,cmov12,cmov12,cmov12
|
||||||
dd cshift1,cshift1,cret2,cop0, cunk, cunk, cmov2, cmov2 ; Cx
|
dd cshift1,cshift1,cret2,cop0, cunk, cunk, cmov2, cmov2 ; Cx
|
||||||
dd center,cop0, cunk, cunk, cop0, cint, cunk, cunk
|
dd center,cop0, cunk, cunk, cop0, cint, cunk, cunk
|
||||||
dd cshift2,cshift2,cshift3,cshift3,caam,cunk,cunk, cxlat ; Dx
|
dd cshift2,cshift2,cshift3,cshift3,caam,caad,cunk, cxlat ; Dx
|
||||||
dd cD8, cD9, cDA, cDB, cDC, cDD, cDE, cDF
|
dd cD8, cD9, cDA, cDB, cDC, cDD, cDE, cDF
|
||||||
dd cloopnz,cloopz,cloop,cjcxz, cunk, cunk, cunk, cunk ; Ex
|
dd cloopnz,cloopz,cloop,cjcxz, cunk, cunk, cunk, cunk ; Ex
|
||||||
dd ccall1,cjmp1, cunk, cjmp2, cunk, cunk, cunk, cunk
|
dd ccall1,cjmp1, cunk, cjmp2, cunk, cunk, cunk, cunk
|
||||||
@ -5497,18 +5951,18 @@ disasm_table_1:
|
|||||||
dd cop0, cop0, cop0, cop0, cop0, cop0, cop1, cop1
|
dd cop0, cop0, cop0, cop0, cop0, cop0, cop1, cop1
|
||||||
|
|
||||||
disasm_table_2:
|
disasm_table_2:
|
||||||
dd cunk, cunk, cunk, cunk, cunk, csyscall,cunk,cunk ; 0x
|
dd cunk, cunk, cunk, cunk, cunk, cop0_F,cop0_F,cunk ; 0x
|
||||||
dd cunk, cunk, cunk, cunk, cunk, cunk, cunk, cunk
|
dd cunk, cunk, cunk, cunk, cunk, cunk, cunk, cunk
|
||||||
dd cunk, cunk, cunk, cunk, cunk, cunk, cunk, cunk ; 1x
|
dd cunk, cunk, cunk, cunk, cunk, cunk, cunk, cunk ; 1x
|
||||||
dd cunk, cunk, cunk, cunk, cunk, cunk, cunk, cunk
|
dd cunk, cunk, cunk, cunk, cunk, cunk, cunk, cunk
|
||||||
dd cunk, cunk, cunk, cunk, cunk, cunk, cunk, cunk ; 2x
|
dd cunk, cunk, cunk, cunk, cunk, cunk, cunk, cunk ; 2x
|
||||||
dd cunk, cunk, cunk, cunk, cunk, cunk, cunk, cunk
|
dd cunk, cunk, cunk, cunk, cunk, cunk, cunk, csse1
|
||||||
dd cunk, crdtsc,cunk, cunk, csysenter,cunk,cunk, cunk ; 3x
|
dd cunk, crdtsc,cunk, cunk, cop0_F,cunk, cunk, cunk ; 3x
|
||||||
dd cunk, cunk, cunk, cunk, cunk, cunk, cunk, cunk
|
dd cunk, cunk, cunk, cunk, cunk, cunk, cunk, cunk
|
||||||
dd cmovcc,cmovcc,cmovcc,cmovcc,cmovcc,cmovcc,cmovcc,cmovcc ; 4x
|
dd cmovcc,cmovcc,cmovcc,cmovcc,cmovcc,cmovcc,cmovcc,cmovcc ; 4x
|
||||||
dd cmovcc,cmovcc,cmovcc,cmovcc,cmovcc,cmovcc,cmovcc,cmovcc
|
dd cmovcc,cmovcc,cmovcc,cmovcc,cmovcc,cmovcc,cmovcc,cmovcc
|
||||||
dd cunk, cunk, cunk, cunk, cunk, cunk, cunk, cunk ; 5x
|
dd cunk, cunk, cunk, cunk, csse1, csse1, cunk, cunk ; 5x
|
||||||
dd cunk, cunk, cunk, cunk, cunk, cunk, cunk, cunk
|
dd csse1, cunk, cunk, cunk, cunk, cunk, cunk, cunk
|
||||||
dd cpcmn, cpcmn, cpcmn, cpcmn, cpcmn, cpcmn, cpcmn, cpcmn ; 6x
|
dd cpcmn, cpcmn, cpcmn, cpcmn, cpcmn, cpcmn, cpcmn, cpcmn ; 6x
|
||||||
dd cpcmn, cpcmn, cpcmn, cpcmn, cunk, cunk, cmovd1,cmovq1
|
dd cpcmn, cpcmn, cpcmn, cpcmn, cunk, cunk, cmovd1,cmovq1
|
||||||
dd cunk, cpshift,cpshift,cpshift,cpcmn,cpcmn,cpcmn,cemms ; 7x
|
dd cunk, cpshift,cpshift,cpshift,cpcmn,cpcmn,cpcmn,cemms ; 7x
|
||||||
@ -5518,12 +5972,12 @@ disasm_table_2:
|
|||||||
dd csetcc,csetcc,csetcc,csetcc,csetcc,csetcc,csetcc,csetcc ; 9x
|
dd csetcc,csetcc,csetcc,csetcc,csetcc,csetcc,csetcc,csetcc ; 9x
|
||||||
dd csetcc,csetcc,csetcc,csetcc,csetcc,csetcc,csetcc,csetcc
|
dd csetcc,csetcc,csetcc,csetcc,csetcc,csetcc,csetcc,csetcc
|
||||||
dd cunk, cunk, ccpuid,cbtx2, cshld, cshld, cunk, cunk ; Ax
|
dd cunk, cunk, ccpuid,cbtx2, cshld, cshld, cunk, cunk ; Ax
|
||||||
dd cunk, cunk, cunk, cbtx2, cshrd, cshrd, cunk, cop22
|
dd cunk, cunk, cunk, cbtx2, cshrd, cshrd, cgrp15,cop22
|
||||||
dd ccmpxchg,ccmpxchg,cunk,cbtx2,cunk, cunk, cmovzx,cmovzx ; Bx
|
dd ccmpxchg,ccmpxchg,cunk,cbtx2,cunk, cunk, cmovzx,cmovzx ; Bx
|
||||||
dd cunk, cunk, cbtx1, cbtx2, cbsf, cbsr, cmovsx,cmovsx
|
dd cunk, cunk, cbtx1, cbtx2, cbsf, cbsr, cmovsx,cmovsx
|
||||||
dd cunk, cunk, cunk, cunk, cunk, cunk, cunk, ccmpxchg8b ; Cx
|
dd cunk, cunk, csse1, cunk, cunk, cunk, cunk, ccmpxchg8b ; Cx
|
||||||
dd cbswap,cbswap,cbswap,cbswap,cbswap,cbswap,cbswap,cbswap
|
dd cbswap,cbswap,cbswap,cbswap,cbswap,cbswap,cbswap,cbswap
|
||||||
dd cunk, cpsrlw,cpsrlw,cpsrlq,cpcmn, cpcmn, cunk, cunk ; Dx
|
dd csse2, cpsrlw,cpsrlw,cpsrlq,cpcmn, cpcmn, cunk, cunk ; Dx
|
||||||
dd cpcmn, cpcmn, cpcmn, cpcmn, cpcmn, cpcmn, cpcmn, cpcmn
|
dd cpcmn, cpcmn, cpcmn, cpcmn, cpcmn, cpcmn, cpcmn, cpcmn
|
||||||
dd cpcmn, cpsraw,cpsrad,cpcmn, cpcmn, cpcmn, cunk, cunk ; Ex
|
dd cpcmn, cpsraw,cpsrad,cpcmn, cpcmn, cpcmn, cunk, cunk ; Ex
|
||||||
dd cpcmn, cpcmn, cpcmn, cpcmn, cpcmn, cpcmn, cpcmn, cpcmn
|
dd cpcmn, cpcmn, cpcmn, cpcmn, cpcmn, cpcmn, cpcmn, cpcmn
|
||||||
|
Loading…
Reference in New Issue
Block a user