many fixes, found by actually running the code

This commit is contained in:
ceriel 1989-10-10 11:38:18 +00:00
parent 2364f3f6b0
commit 010bade227
12 changed files with 27 additions and 48 deletions

View file

@ -9,9 +9,7 @@
! eax is source
cmp edx,1
jne 2f
o16 cbw ! needs operand size toggle to convert
! from one to two bytes.
cwde
movsxb eax,al
mov edx,4
jmp 1f
2:

View file

@ -5,7 +5,7 @@
.sect .text
.exg:
push edi
mov esp,edi
mov edi,esp
add edi,8
mov ebx,edi
add ebx,ecx
@ -14,6 +14,8 @@
mov eax,(ebx)
xchg eax,(edi)
mov (ebx),eax
add edi,4
add ebx,4
loop 1b
2:
pop edi

View file

@ -8,12 +8,11 @@
cmp edx,4
.extern .unknown
jne .unknown
pop ebx ! descriptor address
pop eax ! index
pop edx ! array base
pop ebx ! descriptor address
pop eax ! index
sub eax,(ebx)
mul 8(ebx)
mov ebx,edx
pop ebx ! array base
add ebx,eax
push ecx
ret

View file

@ -8,7 +8,7 @@
mov edx,edi
mov edi,esp
add edi,ecx
sar ecx,1
sar ecx,2
1:
pop eax
or eax,(edi)

View file

@ -5,18 +5,16 @@
.lar4:
! ebx, descriptor address
! eax, index
pop ecx
pop edx ! base address
push ecx
sub eax,(ebx)
mov ecx,8(ebx)
imul ecx
pop ebx
pop edx ! base address
add edx,eax
sar ecx,1
jnb 1f
xor eax,eax
movb al,(edx)
pop ebx
push eax
jmp ebx
1:
@ -24,13 +22,12 @@
jnb 1f
xor eax,eax
o16 mov ax,(edx)
pop ebx
push eax
jmp ebx
1:
mov edx,esi ! saved esi
mov eax,8(ebx)
pop ebx ! return address
xchg edx,esi ! saved esi
mov eax,ecx
sal eax,2
sub esp,eax
mov eax,edi ! save edi
mov edi,esp

View file

@ -11,20 +11,20 @@
mov eax,ecx
sar ecx,1
jnb 1f
xor eax,eax
movb al,(edx)
movsxb eax,(ebx)
push eax
jmp edx
1:
sar ecx,1
jnb 1f
xor eax,eax
o16 mov ax,(edx)
movsx eax,(ebx)
push eax
jmp edx
1:
mov ebx,edx
push edx
mov edx,esi
mov esi,ebx
pop ebx
sub esp,eax
jmp 1f

View file

@ -3,22 +3,8 @@
.define .nop
.extern printd, printc, hol0
SIO_S = 0xDA
SIO_D = 0xD8
RXRDY = 0x02
.nop:
mov eax,(hol0)
call printd
! movb al,' '
! call printc
! mov eax,esp
! call printd
!1:
! inb SIO_S
! andb al,RXRDY
! jz 1b
! inb SIO_D
! call printc
movb al,'\n'
jmp printc

View file

@ -5,30 +5,24 @@
.sar4:
! ebx, descriptor address
! eax, index
pop ecx
pop edx ! base address
push ecx
sub eax,(ebx)
mov ecx,8(ebx)
push edx
imul ecx
pop edx
pop ebx
pop edx ! base address
add edx,eax
sar ecx,1
jnb 1f
pop ebx
pop eax
movb (edx),al
jmp ebx
1:
sar ecx,1
jnb 1f
pop ebx
pop eax
o16 mov (edx),ax
jmp ebx
1:
pop ebx
xchg edi,edx ! edi = base address, edx is saved edi
mov eax,esi
mov esi,esp

View file

@ -13,9 +13,9 @@
push edi
mov ebx,esp
xor edi,edi
sar ecx,1
sar ecx,2
1:
mov 4(ebx)(edi),edx
mov 8(ebx)(edi),edx
add edi,4
loop 1b
!endif

View file

@ -20,8 +20,10 @@
o16 mov (ebx),ax
jmp edx
1:
mov ebx,edx
push edx
mov edx,edi
mov edi,ebx
pop ebx
jmp 1f
.sti:
! only called with count >> 4

View file

@ -2,4 +2,4 @@
.sect .text
.define .stop
.stop:
int 3
jmp _exit

View file

@ -14,4 +14,5 @@
pop eax
ret
2:
push eax
call .stop