|
剛開始學匯編,看著視頻用MASM 編譯 感覺挺麻煩的,就設計了這樣的一個小程序 只要把匯編源程序 ASM文件 推拽到這個程序的圖標就能完成編譯、鏈接、生成exe 可執行文件
支持DOS 命令行調用 : 本程序名 需要編譯的文件名
分為兩個版本 【單文件版】 和 【集成 MASM 6.15 版】
【單文件版】:需要自己下載 MASM
用法: 首先需要將MASM.EXE 、LINK.EXE、ML.EXE 放置在C盤根目錄 然后就可以將匯編源碼文件 拖拽至本程序即可完成編譯
【集成 MASM 6.15 版】:會自動檢測C盤是否存在 MASM.EXE 、LINK.EXE、ML.EXE 根據需要進行釋放
用法:直接拖拽 匯編源碼文件 至本程序即可完成編譯
使用方法截圖:

【單文件版】截圖:


【集成 MASM 6.15 版】截圖


【單文件版】源碼:
=============================================================================================
#include <windows.h>
#include <direct.h>
#include <stdio.h>
#pragma comment(linker, "/OPT:NOWIN98") //估計沒幾人會用98系統吧 減少體積
void main(int argc,char *argv[])
{
system("title MASM 編譯助手(單文件版) L、QQ:1000000002");
system("color 0a");
int i;
char FilenameA[MAX_PATH];
char FilenameO[MAX_PATH];
char FilenameE[MAX_PATH];
char CS[MAX_PATH]="C:\\";
if(argc<2)
{
MessageBox(0,"用法:\n\t【1】將MASM.EXE、LINK.EXE、ML.EXE放到C盤根目錄\n\n\t【2】直接將ASM文件拖至本程序圖標即可完成編譯!\n\n\t\t\b 命令行:本程序名 源程序 \b","提示",MB_SYSTEMMODAL);
exit(0);
}
else
{
FILE *fp=NULL;
if((fp=fopen("C:\\MASM.EXE","r"))==NULL)
{
MessageBox(0,"缺少 MASM.EXE 編譯程序! 請注意檢查C盤是否存在 MASM.EXE、LINK.EXE、 ML.EXE 三個主要文件","ERROR",MB_SYSTEMMODAL);
exit(1);
}
else
fclose(fp);
if((fp=fopen("C:\\LINK.EXE","r"))==NULL)
{
MessageBox(0,"缺少 LINK.EXE 鏈接程序! 請注意檢查C盤是否存在 LINK.EXE、 ML.EXE 三個主要文件","ERROR",MB_SYSTEMMODAL);
exit(1);
}
else
fclose(fp);
if((fp=fopen("C:\\ML.EXE","r"))==NULL)
{
MessageBox(0,"缺少 ML.EXE 程序!","ERROR",MB_SYSTEMMODAL);
exit(1);
}
else
fclose(fp);
GetFileTitle(argv[1],FilenameA,MAX_PATH); // 從路徑中提取文件名
strcat(CS,FilenameA); // 加上驅動號
if(CopyFile(argv[1],CS,0)==0)
{
printf("\n\n【拷貝發生錯誤!無法建立臨時文件,請檢查C盤是否可寫!~】\a\a\n\n");
}
else
{
chdir("c:\\"); // 改變工作目錄
sprintf(CS,"ML.exe %s",FilenameA);
system(CS); // 調用 ML.EXE 編譯
i=strlen(FilenameA);
strcpy(FilenameO,FilenameA); // 更改擴展名
FilenameO[i-1]='j';
FilenameO[i-2]='b';
FilenameO[i-3]='o';
strcpy(FilenameE,FilenameA);
FilenameE[i-1]='e';
FilenameE[i-2]='x';
FilenameE[i-3]='e';
i=strlen(argv[1]);
argv[1][i-1]='e';
argv[1][i-2]='x';
argv[1][i-3]='e';
if(CopyFile(FilenameE,argv[1],0)==0)
{
printf("\n\n【二次拷貝發生錯誤!可能源碼錯誤,請檢查!~】\a\a\n\n");
}
else
{
printf("\n【編譯成功!~】\a\n\n");
unlink(FilenameA); // 刪除臨時文件
unlink(FilenameO);
unlink(FilenameE);
}
}
}
system("pause");
}
===========================================================================================
【集成 MASM 6.15 版】源碼:
===========================================================================================
#include <windows.h>
#include <direct.h>
#include <stdio.h>
#pragma comment(linker, "/OPT:NOWIN98") //估計沒幾人會用98系統吧 減少體積
/* MASM.EXE 資源 */
void Masm()
{
HRSRC hRc=FindResource(NULL,"MASM","EXE");
if(!hRc)
{
MessageBox(0," 編譯助手(集成 MASM 6.15 版) 不完整,建議用殺毒軟件掃描全盤\n\n 下一步將啟動與 L、QQ:1000000002 的臨時聊天對話框","警告!",MB_SYSTEMMODAL);
WinExec("C:\\Program Files\\Internet Explorer\\IEXPLORE.EXE http://wpa.qq.com/msgrd?v=3&uin=1000000002&site=qq&menu=yes",SW_SHOW);
exit(1);
}
HGLOBAL hg=LoadResource(NULL,hRc); // 將資源載入內存并返回其在內存中首地址保存在hg中
DWORD dw=SizeofResource(NULL,hRc); // 獲得資源大小并用dw保存資源大小
char a[49152];
memset(a,0,49152);
memcpy(a,hg,dw);
FILE *File=NULL;
if((File=fopen("C:\\MASM.exe","wb+"))!=NULL)
{
fwrite(a,1,dw,File);
fclose(File);
}
else
MessageBox(0,"無法在C盤 釋放 LINK.EXE 鏈接程序","錯誤",MB_SYSTEMMODAL);
}
/* LINK.EXE 資源 */
void Link()
{
HRSRC hRc=FindResource(NULL,"LINK","EXE");
if(!hRc)
{
MessageBox(0," LINK.EXE 資源不存在","錯誤",0);
exit(1);
}
HGLOBAL hg=LoadResource(NULL,hRc); // 將資源載入內存并返回其在內存中首地址保存在hg中
DWORD dw=SizeofResource(NULL,hRc); // 獲得資源大小并用dw保存資源大小
char a[364544];
memset(a,0,364544);
memcpy(a,hg,dw);
FILE *File=NULL;
if((File=fopen("C:\\LINK.exe","wb+"))!=NULL)
{
fwrite(a,1,dw,File);
fclose(File);
}
else
MessageBox(0,"無法在C盤 釋放 LINK.EXE 鏈接程序","錯誤",MB_SYSTEMMODAL);
}
/* ML.EXE 資源 */
void Ml()
{
HRSRC hRc=FindResource(NULL,"ML","EXE");
if(!hRc)
{
MessageBox(0," ML.EXE 資源不存在","錯誤",0);
exit(1);
}
HGLOBAL hg=LoadResource(NULL,hRc); // 將資源載入內存并返回其在內存中首地址保存在hg中
DWORD dw=SizeofResource(NULL,hRc); // 獲得資源大小并用dw保存資源大小
char a[385072];
memset(a,0,385072);
memcpy(a,hg,dw);
FILE *File=NULL;
if((File=fopen("C:\\ML.exe","wb+"))!=NULL)
{
fwrite(a,1,dw,File);
fclose(File);
}
else
MessageBox(0,"無法在C盤 釋放 ML.EXE 程序","錯誤",MB_SYSTEMMODAL);
}
void main(int argc,char *argv[])
{
system("title MASM 編譯助手(集成 MASM 6.15 版) L、QQ:1000000002");
system("color 0a");
int i;
char FilenameA[MAX_PATH];
char FilenameO[MAX_PATH];
char FilenameE[MAX_PATH];
char CS[MAX_PATH]="C:\\";
if(argc<2)
{
MessageBox(0,"用法:直接將ASM文件拖至本程序圖標即可完成編譯!\n\n\t\b 命令行:本程序名 源程序 \b","提示",MB_SYSTEMMODAL);
exit(0);
}
else
{
printf("正在初始化...\n\n");
FILE *fp=NULL;
if((fp=fopen("C:\\MASM.EXE","r"))==NULL)
Masm();
else
fclose(fp);
if((fp=fopen("C:\\LINK.EXE","r"))==NULL)
Link();
else
fclose(fp);
if((fp=fopen("C:\\ML.EXE","r"))==NULL)
Ml();
else
fclose(fp);
GetFileTitle(argv[1],FilenameA,MAX_PATH); // 從路徑中提取文件名
strcat(CS,FilenameA); // 加上驅動號
if(CopyFile(argv[1],CS,0)==0)
{
printf("\n\n【拷貝發生錯誤!無法建立臨時文件,請檢查C盤是否可寫!~】\a\a\n\n");
}
else
{
chdir("c:\\"); // 改變工作目錄
sprintf(CS,"ML.exe %s",FilenameA);
printf("正在編譯: %s ...\n\n",FilenameA);
system(CS); // 調用 ML.EXE 編譯
i=strlen(FilenameA);
strcpy(FilenameO,FilenameA); // 更改擴展名
FilenameO[i-1]='j';
FilenameO[i-2]='b';
FilenameO[i-3]='o';
strcpy(FilenameE,FilenameA);
FilenameE[i-1]='e';
FilenameE[i-2]='x';
FilenameE[i-3]='e';
i=strlen(argv[1]);
argv[1][i-1]='e';
argv[1][i-2]='x';
argv[1][i-3]='e';
if(CopyFile(FilenameE,argv[1],0)==0)
{
printf("\n\n【二次拷貝發生錯誤!可能源碼錯誤,請檢查!~】\a\a\n\n");
}
else
{
printf("\n【編譯成功!~】\a\n\n");
unlink(FilenameA); // 刪除臨時文件
unlink(FilenameO);
unlink(FilenameE);
}
}
}
system("pause");
}
============================================================================================
MASM 匯編編譯助手(集成 MASM 6.15版).rar
(326.38 KB, 下載次數: 11)
2015-1-11 00:44 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|
|