主题:请问怎样把一个EXE文件转化为COM文件呢?
我编写了一个十进制转换为十六进制的汇编代码,最终实现了自己的功能。
但现在由于需要,我必须把它转换成COM文件,该怎么办呢?
代码如下:
DATA segment para public 'data'
msg1 DB 'Please input a number:'
DB '(0-65535):$'
msg2 db 'The hex result is:$'
msg3 db 'Input error!$'
nhex dw ? ;存放二进制结果
DATA ends
sseg segment stack
dw 100 dup (?)
sseg ends
CODE SEGMENT ;代码段开始
ASSUME CS:CODE, DS:DATA,SS: sseg
main proc far;主程序开始
start: push ds;
xor ax,ax;
push ax;标准序
MOV AX, DATA
MOV DS, AX
mov dx,offset msg1
mov ah, 9
int 21h;显示提示信息
call decibin;调用转换子程序
and al,al ;检查AL=0?
jnz main1;AL非0,出错
mov nhex,bx;存转换结果
call crlf;显示回车换行
mov dx,offset msg2
mov ah, 9;显示提示信息
int 21h;
call binihex;调用显示程序
jmp main2
main1: call crlf
lea dx,msg3;
mov ah,9;显示出错信息
int 21h;
main2: call crlf
ret ;返回DOS
main endp;主程序结束
decibin proc
XOR BX, BX
newchar: MOV AH, 1
INT 21H
CMP AL, 0DH
JE DONE
SUB AL, 30H
JL err
CMP AL,9
JG err
MOV CX, 0AH
CBW
XCHG AX, BX
MUL CX
ADD BX, AX
JMP newchar
err: MOV AL, 0ffh
RET
DONE: MOV AL,0
RET
decibin ENDP
binihex proc
mov ch, 4
rotate: mov cl, 4
rol bx, cl
mov al, bl
and al, 0fh
add al, 30h
cmp al, 3ah
jl printit
add al, 7
printit: mov dl, al
mov ah, 2
int 21h
dec ch
jnz rotate
ret
binihex endp
crlf proc ;回车换行子程序
push ax
push dx
mov dl,0dh
mov ah,2
int 21h
mov dl,0ah
mov ah,2
int 21h
pop dx
pop ax
ret
crlf endp
CODE ends;代码段结束
end start;汇编结束
由于急用,所以先谢谢大家了!
但现在由于需要,我必须把它转换成COM文件,该怎么办呢?
代码如下:
DATA segment para public 'data'
msg1 DB 'Please input a number:'
DB '(0-65535):$'
msg2 db 'The hex result is:$'
msg3 db 'Input error!$'
nhex dw ? ;存放二进制结果
DATA ends
sseg segment stack
dw 100 dup (?)
sseg ends
CODE SEGMENT ;代码段开始
ASSUME CS:CODE, DS:DATA,SS: sseg
main proc far;主程序开始
start: push ds;
xor ax,ax;
push ax;标准序
MOV AX, DATA
MOV DS, AX
mov dx,offset msg1
mov ah, 9
int 21h;显示提示信息
call decibin;调用转换子程序
and al,al ;检查AL=0?
jnz main1;AL非0,出错
mov nhex,bx;存转换结果
call crlf;显示回车换行
mov dx,offset msg2
mov ah, 9;显示提示信息
int 21h;
call binihex;调用显示程序
jmp main2
main1: call crlf
lea dx,msg3;
mov ah,9;显示出错信息
int 21h;
main2: call crlf
ret ;返回DOS
main endp;主程序结束
decibin proc
XOR BX, BX
newchar: MOV AH, 1
INT 21H
CMP AL, 0DH
JE DONE
SUB AL, 30H
JL err
CMP AL,9
JG err
MOV CX, 0AH
CBW
XCHG AX, BX
MUL CX
ADD BX, AX
JMP newchar
err: MOV AL, 0ffh
RET
DONE: MOV AL,0
RET
decibin ENDP
binihex proc
mov ch, 4
rotate: mov cl, 4
rol bx, cl
mov al, bl
and al, 0fh
add al, 30h
cmp al, 3ah
jl printit
add al, 7
printit: mov dl, al
mov ah, 2
int 21h
dec ch
jnz rotate
ret
binihex endp
crlf proc ;回车换行子程序
push ax
push dx
mov dl,0dh
mov ah,2
int 21h
mov dl,0ah
mov ah,2
int 21h
pop dx
pop ax
ret
crlf endp
CODE ends;代码段结束
end start;汇编结束
由于急用,所以先谢谢大家了!