home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
FreeWare Collection 2
/
FreeSoftwareCollection2pd199x-jp.img
/
ms_dos
/
exetoexp
/
execnv.asm
< prev
next >
Wrap
Assembly Source File
|
1990-06-14
|
2KB
|
161 lines
.286c
page 60,130
title Master
;
;
;
;
code segment
assume cs:code,ds:code,es:code,ss:code
;
;
;
org 80h
argv label byte
org 100h
;
;
;
entry:
st1: mov dx,offset msg1 ;オープニングメッセージ
mov ah,09h
int 21h
cld ;ファイルオープン
mov bp,sp
mov si,offset argv+1
lp1: lodsb
cmp al,20h
je lp1
cmp al,09h
je lp1
cmp al,0dh
jne ps1
mov dx,offset msg2
mov ah,09h
int 21h
mov dx,offset inp
mov ah,0ah
int 21h
mov si,offset inp+3
ps1: dec si
mov dx,si
lp2: lodsb
cmp al,'.'
je short ps2
cmp al,20h
ja short lp2
ps2: mov word ptr[si-1],'E.'
mov word ptr[si+1],'EX'
mov byte ptr[si+3],0
mov ax,3d00h
int 21h
jc short ps3
push ax
mov byte ptr[si+2],'P'
mov cx,0
mov ax,3c00h
int 21h
ps3: jc short ps4
push ax
mov bx,[bp-2] ;ヘッダー読込
mov dx,offset buf
mov cx,400h
mov ah,3fh
int 21h
ps4: jc near ptr fal
push ax
mov si,offset buf ;ヘッダー書き換え
mov di,si
mov byte ptr[si+1],50h ;.exp
mov ax,[si+0ah] ; adjust page size(512byte=>4096byte)
add ax,0ffh
shr ax,8
mov [si+0ah],ax
mov word ptr[si+0ch],0ffffh
add si,0eh ;[ss:sp] => esp
xchg ax,[si]
xchg ax,[si+2]
xchg ax,[si]
call scnv
mov si,di
mov word ptr[si+12h],0cccdh ;check sum ?
add si,14h ;[cs:ip] => eip
call scnv
mov si,di
mov word ptr[si+18h],001eh ;relocofs ?
mov word ptr[si+1ah],0 ;numover ?
mov word ptr[si+1ch],1 ;dummy ?
add di,1eh ;clr relocate table
mov cx,[si+8]
shl cx,4
sub cx,1eh
mov al,0
rep stosb
fbr: mov bx,[bp-4] ;ファイル転送
mov dx,offset buf
mov cx,[bp-6]
mov ah,40h
int 21h
cmp ax,1
jb short lend
mov bx,[bp-2]
mov cx,400h
mov ah,3fh
int 21h
jc short fal
mov [bp-6],ax
jmp short fbr
fal: mov dx,offset msg3 ;エラー処理
mov ah,09h
int 21h
mov sp,bp
mov ax,4c01h
int 21h
lend: mov bx,[bp-2] ;後処理
mov ah,3eh
int 21h
mov bx,[bp-4]
mov ah,3eh
int 21h
;
mov sp,bp
mov ax,4c00h
int 21h
scnv proc ;[セグメント:オフセット] => 32bit オフセット
mov ax,[si+2]
shl ax,4
xor dh,dh
mov dl,[si+3]
shr dl,4
add ax,[si]
adc dx,0
mov [si],ax
mov [si+2],dx
ret
scnv endp
;
;
;
msg1 db '.exe => .exp 変換ユーティリティー',0dh,0ah
db ' programmed by N.YAMAZAKI',0dh,0ah,'$'
msg2 db '.exe file name[.exe]=','$'
msg3 db '失敗!',0dh,0ah,'$'
inp db 040h,?,040h dup(0)
buf db 400h dup(0)
code ends
end entry