使用MASM生成目标文件并将其与MSVC目标文件链接

时间:2019-03-01 15:14:45

标签: c linker masm

我想将仅包含一个函数的程序集文件与生成的目标文件链接。我想知道如何在MASM中创建.obj文件,还需要知道如何创建这样的函数。这对于将两个整数加在一起的函数是否足够?

 public void openImg(){
    Intent photoPic = new Intent(Intent.ACTION_PICK);
    photoPic.setType("image/*");
    startActivityForResult(photoPic, SELECT_PHOTO);
}

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    switch (requestCode){
        case SELECT_PHOTO:
            if(resultCode == RESULT_OK){

                Uri selectedImage = data.getData();
                img1.setImageURI(selectedImage);
                InputStream imageStream = null;

                try {
                    //getting the image
                    imageStream = getActivity().getContentResolver().openInputStream(selectedImage);
                    imageStream.close();
                }catch (IOException e){
                    e.printStackTrace();
                }//end try-catch


                if(i1 == true){
                    img1.setImageURI(selectedImage);
                    i1 = false;
                    b1 = true;
                }
                if(i2 == true){
                    img2.setImageURI(selectedImage);
                    i2 = false;
                    b2 = true;
                }
                if(i3 == true){
                    img3.setImageURI(selectedImage);
                    i3 = false;
                    b3 = true;
                }
                if(i4 == true){
                    img4.setImageURI(selectedImage);
                    i4 = false;
                    b4 = true;
                }
                if(i5 == true){
                    img5.setImageURI(selectedImage);
                    i5 = false;
                    b5 = true;
                }
                if(i6 == true){
                    img6.setImageURI(selectedImage);
                    i6 = false;
                    b6 = true;
                }
                if(i7 == true){
                    img7.setImageURI(selectedImage);
                    i7 = false;
                    b8 = true;
                }
                if(i8 == true){
                    img8.setImageURI(selectedImage);
                    i8 = false;
                    b8 = true;
                }
            }//end of 1st IF

            else{
            Toast.makeText(getContext(),"Fail To Get Image", Toast.LENGTH_SHORT).show();
        }

    }//end of Switch
}//end of Method

如果我创建并链接obj文件,我可以做

intadd PROC int1:DWORD int2:DWORD
mov eax, int1
mov ebx, int2
add eax, ebx
intadd ENDP

获得2个?

总结:如果我的代码包含上述宏,我需要知道如何从MASM创建.obj文件,以及如果我的代码不起作用,如何从HLL调用宏。

1 个答案:

答案 0 :(得分:1)

我相信Visual C ++的标准安装还将安装ml.exeml64.exe,它们两者都产生与该版本的Visual C ++ .obj兼容的link.exe文件。

您可以做的是,将ml /c asmfile.asm的汇编文件组装成.obj文件后,在.c文件中添加以下行:

extern int intadd(DWORD int1, DWORD int2);

使用.c编译cl /c cfile.c代码,然后使用.obj将两个link asmfile.obj cfile.obj /OUT:exefile.exe文件链接到最终可执行文件中。

请注意,您的汇编功能无效,因为一旦丢失了ret语句-调用该语句将使程序崩溃。

如果您要查找有关如何在Visual Studio中将程序集文件集成到Visual C ++项目中的信息,this question将提供一些信息。