一个简单的问题 c语言调用matlab函数汇编代码再调用Messagebox函数,求代码分析

求大神指点一下关于C语言快排的问题,我自己写了一个代码,却不知道怎么传递给执行快排的函数_百度知道
函数定义那第一个形参为什么要两个*号,去掉一个,调用直接写p
那是指针的指针
其他类似问题
c语言的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁如何在C语言中嵌入汇编?_百度知道
如何在C语言中嵌入汇编?
只要帮我把上边那个编译过去就行了RT;hello\是undefined symbol我应该怎么写代码才能通过编译啊,01h
printf(&quot,真正的作业是要嵌入一段显示图形的代码;);}上边那个例子用VC6?谢谢上面的只是一个简单的例子;void main(){
mov ah.0编译的时候不能通过;__asm&quot,如下;stdio&gt,说那个int 21h中断有问题但是在TC环境下却说&n&quot:#include&lt
提问者采纳
因此它能非常容易地整合到 C&#47, OFFSET pbBuff
。否则;C++ 函数必须由调用者清除参数堆栈。例如。它能做一些对于单独使用 C/&C++ 变量:参数是按从右往左的顺序压入堆栈的:使用函数名作为标号
,并且把汇编代码和 C&#47,包括, CL
,汇编风格的注释(&quot,因此不需要配置诸如 MASM 一类的独立汇编工具。例如,你可以仅仅使用它的成员名称来引用它, 0xD007
&#92。MASM32 的主页是;C++ 风格的注释;ftTest&quot,又因为定义为宏的一个语句块会被认为是一个逻辑行;C++ 代码中嵌入汇编语言指令:如果程序中改变了用于 STD 和 CLD 的方向标志, int iPower)
MOV EAX; __asm 标号
C_Dest。2。但是不能访问 C++ 类的成员函数;&#47.masm32、BP 和标志寄存器,我们可以自己编写干干净净的函数.
,则结果为 1); PowerA
JMP C_Dest
。当需要的时候,所有引用 SameName 成员的地方都必须使用变量名,也可以在 __asm 块中转跳到 __asm 块里面或外面的标号处。MASM 中的结构和记录也不再有效。另外;
&#47!, ESP
,但是 _EMIT 一次只能在当前代码段(.
,应该在命令行中加入&C++ 或汇编语言的基数计数法,下面定义了一个简单的宏;C++ 变量的作用范围:
MOV EBX,常用于条件跳转中。
提示; 全局变量用 OFFSET
EAX,所以可以把多条汇编指令放在同一行;
那么,如果你的程序打算在不同类型的机器(比如 x86 和 Alpha)上运行,包括符号常量和枚举型成员, AL
&#92. MASM 宏指示符
内联汇编不是宏汇编。例如。这里:
struct FIRST_TYPE
char *pszW属性&和&
&#47、EDX:
__asm &#47。
例如;C++ 宏
C&#47、REPT。
如果调用 __stdcall 方式的函数。这里特别指出;
char szWorld[] = &quot,可以使用所有的 MASM 表达式(MASM 表达式是指用来计算一个数值或一个地址的操作符和操作数的组合);、DQ:
TCHAR g_tszAppName[] = TEXT(&quot.TYPE);& Load address of pbBuff
因为 C/C++ 语句看起来会被认为是汇编指令;C++ 变量以及很多其它的 C/ Store 0 at iArray + 12
iArray[6] = 0,可以在命令行中加入&quot. 用内联汇编写函数
如果用内联汇编写函数的话, 0xD007
__asm OUT AL,调用函数之后要调整堆栈
ESP;。比如,下面两条语句是一样的:http。然而;C++ 代码中嵌入汇编语言指令。5;{ }&quot:
使用花括号把 __asm 块包围住,包括标号。
如果要在汇编文件中调用 Windows API:
char szFormat[] = &quot,可以使用 C&#47, 2
__asm MOV DX; 错误
JMP A_Dest
&#47。MASM 保留字包含指令名称(如 PUSH)和寄存器名称(如 ESI)等、SS,但它支持 EVEN 和 ALIGN, DX
}在每条汇编指令之前加 __asm 关键字.NET 2003 为背景.sbr 文件;Zi&quot.masm32:
使用汇编语言编写特定的函数. 指令集
内联汇编支持 Intel Pentium 4 和 AMD Athlon 的所有指令; 这里是代码
_EMIT 0x90
。比如, int iPower);),介绍在 Visual C++ 中使用内联汇的相关知识(如果是早期的版本:符号, __LOCAL_SIZE
}参数,0x100 和 100H 是相等的。
括号也是需要的;C++ 中数组的元素个数(如果不是一个数组:可以不受限制地访问 C++ 成员变量。
* LENGTH 操作符用来取得 C&#47。在 __asm 块中。例如;&#47, EBP
SUB ESP;和&quot:
内联汇编中调用声明为 __cdecl 方式(默认)的 C&#47。例如;操作符),必须将其恢复到原来的值。
如果一个函数声明为 __fastcall 调用方式,ECX 寄存器是必须一直保留的;C++ 与汇编语言可以混合使用; Store 0 at iArray + 123:省略变量名仅仅是为了书写代码方便。为了不会出现问题:
,也不允许使用 DUP 和 THIS 操作符;C++ 变量 iVar 在作用范围内;* comment *&#47。4, iNum
。我们来看一些例子; PowerC。三。其实它们是需要的;C++ 一致;C++ 代码清楚地分开;
}6,如果成员不是唯一的,C&#47。四,你不需要保存它; typedef 名称。 在 __asm 块中不能使用对于 MASM 来说是保留字的 C&#47.c
int GetPowerC(int iN,介绍在 Visual C++ 中使用内联汇的相关知识(如果是早期的版本;C++ 元素
MB_OK OR MB_ICONINFORMATION
OFFSET g_tszAppName
__asm MOV AL; Get second argument
MOV DX, OFFSET szWorld
EAX。为了避免以上的冲突.obj
如果要生成调试信息;
&#92,生成的汇编指令还是一样的;/&#47. 可用的 C&#47,都被认为是汇编语言的操作符;
}, world.五. 段
必须使用寄存器而不是名称来指明段(段名称&quot, 5)),我们就以 Visual SftTest&quot,因此推荐使用第一种方法; { __asm MOV AL。例如。
* SIZE 操作符可以获取 C&#47, 0xD007
OUT AL;INCLUDE&quot。相应地。二。7;C++ 符号(不区分大小写), 2
&#92,__asm 块的&quot,也允许通过名称来访问堆栈参数和局部堆栈变量),第一种方法与 C/ comment&quot, 0
. EVEN 和 ALIGN 指示符
尽管内联汇编不支持大多数 MASM 指示符。
内联汇编代码可以使用 C/ &I X,Visual C++ 支持标准 C++ 的 asm 关键字;& And we must provide epilog、实用宏以及大量的 Win32 汇编例子等),下面的两个结构都具有 SameName 这个成员变量,因此不需要配置诸如 MASM 一类的独立汇编工具;),你必须在&&#47,不能假定某个寄存器在 __asm 块开始的时候有已知的值;;
__asm MOV DX;C++ 的风格很一致。
下面的程序是使用内联汇编写的。另外。
不要不加选择地调用这种类型的宏, iPower .&
int SameN/ 正确
JMP c_&)。9;c /C++ 里面使用 goto 转跳到 __asm 块中的标号处,在定义 __asm 块为宏时请使用经典 C 风格的注释(&C++ 的函数, 2
__asm MOV DX。 在 __asm 块中引用函数必须先声明.NET 2003 中调用 MASM 编译独立汇编文件的步骤, [EBP+6]
、ESI 和 EDI 寄存器,如 ES;C++ 宏将会展开到一个逻辑行中。 在 __asm 块中不能识别结构和联合标签;)也可能会出现错误. 注释
内联汇编中可以使用汇编语言的注释.Hello,此时我们必须自己动手做一些有关函数初始化和扫尾的工作;C++ 注释(&quot.exe &#47:
int iArray[10];$(InputName);
\Hello&quot,__asm 块后面的 C&#47,因此它能非常容易地整合到 C/
如果按下面方式声明变量、 汇编语言1:ML;$(InputPath)&quot、IRC; Get first argument
MOV ECX;、非常完整的 Windows API 头文件&#47,而且不需要额外的汇编和连接步骤:
LENGTH iArray
sizeof(iArray)&#47。因为这种函数的返回指令是 RETC++ 元素1、IRP 和 ENDM)和宏操作符(&lt:如果使用 EAX; Naked functions must provide their own prolog、RECORD;自定义生成步骤&quot,还可以根据需要生成 ,包含 __asm 块的函数不要声明为 __fastcall 调用方式。__asm 块内的标号是不区分大小写的(指令; EAX = EAX * (2 to the power of CL)
char szHello[] = &quot,选择&quot,比较一下用独立汇编和内联汇编写的函数;
}提示,右击这个文件,而是调用重定位过的函数地址
}提示。但是这其中需要额外地注意:$(IntDir)&#92。由于 GetPowerC 函数没有执行 C 的 return 语句;CODE&#39. 转跳
__asm MOV iArray[6]。 提示:
&#47,这些指示符在汇编代码里面加入 NOP 指令(空操作)使标号对齐到特定边界. 数据指示符和操作符
虽然 __asm 块中允许使用 C&#47,则在 __asm 块中可以只通过成员名称来访问(省略&quot。5:
,如果省略了它; Get second argument
SHL EAX,否则将转跳到函数中执行;
MOV ESI;n&quot,但它不能使用 MASM 指示符和操作符来定义数据对象,_asm 和 __asm 具有相同的意义; EAX = EAX * (2 ^ CL)
EBPC++ 符号:
void MyFunction()
goto C_Dest, OFFSET szHello
EAX,设置如下项目,在声明为 __fastcall 的函数中调用汇编语言宏可能会导致不可预料的结果(请参看前文的说明),它的作用仅限于使编译器不会出现编译错误、 优点
使用内联汇编可以在 C/C++ 中的数据
内联汇编的一个非常大的方便之处是它可以使用名称来引用 C&#47。
下面是在内联汇编中使用 C/
输出。同时;* C&#47、&、DT 和 DF)。
和 C&#47,而且不需要额外的汇编和连接步骤.obj&quot,下面是一个调用 C/-Fo$(IntDir)&#92,它可以出现在任何允许 C&#47.
美元符号&quot,因为 SameName 不是唯一的;用于指定当前指令位置,内联汇编不接受 STRUC;
下面是 C 和汇编表达式中得到的 iArray 及其元素的相关值,而且嵌套也不会影响变量的作用范围;$&%s %s&#92、 使用 C&#47:操作符之前加上变量名或 typedef 名称。3,不能使用这种宏作为 C/&#47:
__asm MOV EAX;操作符之前的变量名或 typedef 名称);
乍一看来;C++ 变量和类型的大大小,下面的转跳将不会到 exit 标号处.
、EBX.NET 2003 为背景. 寄存器使用
、,点击&quot,包括变量名称,编译器会自动帮我们生成函数的初始化(构建参数指针和分配局部变量等)和结束代码(平衡堆栈和返回一个值等), [EBX],或者使用指定的的结构或枚举成员。
在 Visual C++ 工程中;,则其参数将通过寄存器而不是堆栈来传递。
内联汇编的用途包括;C++ 来说非常笨重或不可能完成的任务;&lt,你可能需要在不同的模块中使用特定的机器代码。
不像在 C&#47。
同样是由于宏展开的原因,可以用 LENGTH;& Store 0 at iArray+12 (Scaled)
提示; Stores the value of iVar in EAX
&#47、SP;&
goto a_dest。寄存器的值将不能保证会从 __asm 块保留到另外一个 __asm 块中. 调用 C/ 在设备驱动程序中直接访问硬件;* 错误 *&#47:
JMP _CodeLabel
_EMIT 0x00C++ 符号使用
在 __asm 块中可以引用所有在作用范围内的 C/ Save EBP
_Label,转跳到了这里C++ 宏一样 __asm 块写的宏也可以拥有参数,__asm 宏不能返回一个值;C++ 符号;C++ 宏不一样的是,所以上面的函数中需要通过堆栈位置来访问它的参数(在 MASM 或其它一些汇编工具中,内联汇编是内置的编译器; 注意这里不是 CALL MessageBox,由于 exit 是 C&#47。在一条汇编指令中,因为宏将被扩展到一个单行中; 必须使用&quot, iVar
,通常使用 PTR 和 TYPE 操作符;
goto c_dest, DX因为 __asm 关键字是语句分隔符.
,由于上面的 pszWeasel 变量具有唯一的名称;;C++ 标号 */
GetPowerAsm PROC
MOV ESP;* 正确 */C++ 符号的一些限制;)、WIDTH 或者 MASK;* comment */ 把 __asm 关键字放在每条汇编指令之前:
struct FIRST_TYPE ftT* Port output *&#47,__asm 块可以嵌套;sizeof(iArray[0])
SIZE iArray
sizeof(iArray)
TYPE iArray
sizeof(iArray[0])
48;C++ 注释(&quot:
简单的 __asm 块;C++ 中的类;C++ 类型和变量的大小(如果变量是一个数组。一,编译器将不知道汇编代码在哪里结束. _EMIT 伪指令
_EMIT 伪指令相当于 MASM 中的 DB,可能会有些许出入);C++ 和 MASM 共有的操作符(比如&[]&quot. 操作符使用
内联汇编中不能使用诸如&&quot, AL }
从扩展后的代码中可以看出; 定义混合在代码段的数据
_EMIT 0x01
_CodeLabel,程序中定义了一个 8 维的整数型变量;3 times 2 to the power of 5 is %d\&#47, 12
}提示. 定义 __asm 块为 C/*&quot:在内联汇编中,但是它不会生成任何指令。在 Visual C++ 中在 Visual C++ 中使用内联汇编- -使用内联汇编可以在 C&#47
其他类似问题
1人觉得有用
c语言的相关知识
按默认排序
其他1条回答
你写int 21H当然不会通过了。应该写 int 0x21才对
您可能关注的推广
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁}

我要回帖

更多关于 c语言函数调用过程 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信