How to add an Assembler File to VC++ 6.0

visual4825 2005-04-16 11:07:36
rt.

...全文
83 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
idAnts 2005-04-17
  • 打赏
  • 举报
回复
你可以先用汇编的编译器将汇编编译完,然后将obj文件放入vc工程当中,然后将需要调用的函数在vc文件中申明,编译vc程序的时候连接器会自动在obj文件中找该函数,完成连接。
ok了就。注意申明函数的时候要注明调用规则。
Coder 青田 2005-04-17
  • 打赏
  • 举报
回复
楼上的楼上的
masterz 2005-04-17
  • 打赏
  • 举报
回复
How to use ASM in Class method?
#include "stdafx.h"
class ClassWithAsm
{
private:
int age;
char data[123];
char name[10];
public:
void SetName(char *name);
void SetData(char* pdata);
char* GetName()
{
return name;
}
char* GetData()
{
return data;
}
};
void ClassWithAsm::SetData(char* pdata)
{//thanks to Onega(www.fruitfruit.com)
int len = strlen(pdata);
_asm
{
mov edi,this ;
add edi, ClassWithAsm::data
mov esi,pdata
mov ecx ,len
rep movs byte ptr [edi], byte ptr [esi]
}
data[len]=0;
}
void ClassWithAsm::SetName(char *pname)
{// thanks to broadoceans(broadoceans)
int len = strlen(pname);
char *p = this->name;
_asm
{
mov esi,pname
mov edi,p
mov ecx ,len
rep movs byte ptr [edi], byte ptr [esi]
}
name[len]=0;
}

int _tmain(int argc, _TCHAR* argv[])
{
ClassWithAsm obj;
obj.SetName("testname");
obj.SetData("testdata");
printf("person:%s\n",obj.GetName());
printf(obj.GetData());
printf("\n");
return 0;
}



Ö÷¡¡¡¡Ì⣺ ÔÚVCÖÐǶÈë»ã±à³ÌÐòʱÓöµ½callÖ¸Áîʱ£¬±àÒëÆ÷Ìáʾlable´íÎ󣬸ÃÔõô°ì?
»Ø¸´ÈË£º Focus(ÀÏÓã)
asm{
.....
call wrt
}
wrt: asm{or al,80h
call wr2

mov bh,bl
or bh,10000000b ;110xxxxxx:read;110A5------A0(01)
call wr1
and al,7fh ;di=0
out dx,al
mov dx,379h ;????????????????????????
mov cx,0003h
}
wr2:asm{
...
}


If you asm use stdcall like this:
.386
.MODEL flat, stdcall
.CODE
....

Then you should define __stdcall in your C/C++ header file
extern "C" int __stdcall myproc();//notice the __stdcall
add xxx.obj(generated from your asm file) to the VC project by menu Project->Add to project->Files...


memcpyÊÇCµÄÔËÐÐʱº¯Êý£¬»ã±àÀïÃæµ÷ÓÃÓ¦¸Ã½«Ãû×ָijÉ_memcpy¡£Í¬Àí£¬¶ÔÓÚCµÄº¯ÊýÃû×Ömy_funciton1ÔÚÄ¿±êÄ£¿éÀï»á±ä³É_my_function1£¬Òò´ËÔÚ»ã±àÖÐÒ²Ó¦¸Ã½«º¯ÊýÃû×ָijÉ_my_function1¡¢_my_function2¡£
ÁíÍ⣬BorlandµÄÄ¿±êÎļþÓëMirosoftµÄÄ¿±êÎļþ¸ñʽ¿ÉÄܲ»¼æÈÝ£¨ÎÒûÊÔ¹ý£¬²»ÄÜÈ·ÐÅ£©£¬Äã×îºÃ¶¼ÓÃCOFF¸ñʽ¡£Óеĺ¯Êý»¹Òª¼ÓÉϱÈÈçµ¼ÈëhtonlÒªÉùÃ÷³É_htonl@4£¬ºóÃ滹Ҫ¼Ó@4£¬Õâ¸ö"4"ÊǸù¾Ý²ÎÊýµÄ¶àÉÙÈ·¶¨µÄ

use ASM and CPP together:
1. create an ASM file
;;;;;;;;;;;;; asmsrc.asm:
.386
.model flat, stdcall
option casemap :none
.code

myasmproc proc dw1:DWORD,dw2:DWORD
mov eax,dw1
add eax,dw2
ret
myasmproc endp
end
;;;;;;;;;;;;end of asmsrc.asm

2. create a VC project name: useasm, type console application, A "Hello World" application

3. move the asm file to your project directory, then in VC project menu->Add to Project...->Files...
Files of type change to "all files", then you can select the asmsrc.asm, and click OK

4.in workspace window, FileView tab, select asmsrc.asm, right click to select "settings..." menu, custom build tab, put the following in commands edit box :
d:\masm32\bin\ml.exe /nologo /coff /Zf /c /Sa $(InputName).asm
put the following in Outputs edit box:
$(InputName).obj

5.edit your useasm.cpp as the following:
//////////////////////useasm.cpp///////////////////////////////
#include "stdafx.h"
#include <windows.h>
extern "C" int __stdcall myasmproc(DWORD d1,DWORD d2);
int main(int argc, char* argv[])
{
printf("test of using cpp and asm together, if it works, it is done by masterz,otherwise I don't know who write this^_^\n");
int ret=myasmproc(22,33);
printf("ASM result:%d\n",ret);
return 0;
}

//////////////////////end of useasm.cpp///////////////////////////////

6. build the project and run it, it works.

notes: I assume you have installed masm32V8(you can get it from http://www.movsd.com/masmdl.htm) at D:\masm32

16,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧