@@ -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:
@@ -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
pop edi
@@ -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
@@ -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)
@@ -5,18 +5,16 @@
.lar4:
! ebx, descriptor address
! eax, index
- pop ecx
- pop edx ! base address
- push ecx
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
@@ -24,13 +22,12 @@
o16 mov ax,(edx)
- 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
@@ -11,20 +11,20 @@
mov eax,ecx
- xor eax,eax
- movb al,(edx)
+ movsxb eax,(ebx)
jmp edx
- o16 mov ax,(edx)
+ movsx eax,(ebx)
+ push edx
mov edx,esi
+ mov esi,ebx
@@ -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
movb al,'\n'
jmp printc
@@ -5,30 +5,24 @@
.sar4:
- push edx
- pop edx
movb (edx),al
o16 mov (edx),ax
xchg edi,edx ! edi = base address, edx is saved edi
mov eax,esi
mov esi,esp
@@ -13,9 +13,9 @@
mov ebx,esp
xor edi,edi
- mov 4(ebx)(edi),edx
+ mov 8(ebx)(edi),edx
add edi,4
!endif
@@ -20,8 +20,10 @@
o16 mov (ebx),ax
+ mov edi,ebx
.sti:
! only called with count >> 4
@@ -2,4 +2,4 @@
.define .stop
.stop:
- int 3
+ jmp _exit
@@ -14,4 +14,5 @@
+ push eax
call .stop