8. 转跳
可以在 C/C++ 里面使用 goto 转跳到 __asm 块中的标号处,也可以在 __asm 块中转跳到 __asm 块里面或外面的标号处 。__asm 块内的标号是不区分大小写的(指令、指示符等也是不区分大小写的) 。例如:
void MyFunction()
{
goto C_Dest;/* 正确 */
goto c_dest;/* 错误 */
goto A_Dest;/* 正确 */
goto a_dest;/* 正确 */
__asm
{
JMP C_Dest; 正确
JMP c_dest; 错误
JMP A_Dest; 正确
JMP a_dest; 正确
a_dest:; __asm 标号
}
C_Dest:/* C/C++ 标号 */
return;
}
不要使用函数名称当作标号,否则将转跳到函数中执行,而不是标号处 。例如,由于 exit 是 C/C++ 的函数,下面的转跳将不会到 exit 标号处:
; 错误:使用函数名作为标号
JNE exit
.
.
.
exit:
.
.
.
美元符号"$"用于指定当前指令位置,常用于条件跳转中,例如:
JNE $+5; 下面这条指令的长度是 5 个字节
JMP _Label
NOP; $+5,转跳到了这里
.
.
.
_Label:
.
.
.
五、在 Visual C++ 工程中使用独立汇编
内联汇编代码不易于移植,如果你的程序打算在不同类型的机器(比如 x86 和 Alpha)上运行,你可能需要在不同的模块中使用特定的机器代码 。这时候你可以使用 MASM(Microsoft Macro Assembler) , 因为 MASM 支持更多方便的宏指令和数据指示符 。
这里简单介绍一下在 Visual Studio .NET 2003 中调用 MASM 编译独立汇编文件的步骤 。
在 Visual C++ 工程中,添加按 MASM 的要求编写的 .asm 文件 。在解决方案资源管理器中 , 右击这个文件,选择"属性"菜单项,在属性对话框中,点击"自定义生成步骤",设置如下项目:
命令行:ML.exe /nologo /c /coff "-Fo$(IntDir)\$(InputName).obj" "$(InputPath)"
输出:$(IntDir)\$(InputName).obj
如果要生成调试信息,可以在命令行中加入"/Zi"参数 , 还可以根据需要生成 .lst 和 .sbr 文件 。
如果要在汇编文件中调用 Windows API,可以从网上下载 MASM32 包(包含了 MASM 汇编工具、非常完整的 Windows API 头文件/库文件、实用宏以及大量的 Win32 汇编例子等) 。相应地 , 应该在命令行中加入"/I X:\MASM32\INCLUDE"参数指定 Windows API 汇编头文件(.inc)的路径 。MASM32 的主页是:,里面可以下载最新版本的 MASM32 包 。
c语言内嵌汇编函数的介绍就聊到这里吧,感谢你花时间阅读本站内容 , 更多关于c语言嵌套汇编语言、c语言内嵌汇编函数的信息别忘了在本站进行查找喔 。
推荐阅读
- 恋爱游戏视频合集百度云,恋爱游戏观看
- 童装企业如何营销,童装企业如何营销策略
- 实验二sqlserver2008数据查询,实验二sql数据查询语句
- 直播间活跃的话术技巧,直播间活跃的话术技巧怎么写
- vb.net+运算+模 vbnet using
- 电视怎么切换路由器设备,电视换wifi路由器怎么设置方法
- 卖娱乐音响如何找渠道推广,卖音响技巧
- 一维数组追加数据php 一维数组添加元素
- mysql控制台不需要输入密码就能进入,控制台mysql语句