当前位置: 首页>移动开发>正文

ios汇编软件 汇编助手

刚开始学汇编,看着视频用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   根据需要进行释放

用法:直接拖拽 汇编源码文件 至本程序即可完成编译

使用方法截图:

ios汇编软件 汇编助手,ios汇编软件 汇编助手_ML,第1张

【单文件版】截图:

ios汇编软件 汇编助手,ios汇编软件 汇编助手_ML_02,第2张

ios汇编软件 汇编助手,ios汇编软件 汇编助手_hg_03,第3张

【集成 MASM 6.15 版】截图

ios汇编软件 汇编助手,ios汇编软件 汇编助手_ML_04,第4张

ios汇编软件 汇编助手,ios汇编软件 汇编助手_c语言汇编编译_05,第5张

【单文件版】源码:

=============================================================================================
#include 
#include 
#include 
#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 
#include 
#include 
#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");
}

https://www.xamrdz.com/mobile/4fq1961884.html

相关文章: