关于masm不能直接call imm的问题!

简介:

    很多人困惑为啥masm不能直接写call 立即数地址的汇编指令,如果你那样

写铁定报错的。但是查看intel指令手册这种指令编码方式是合法正确的。那么

只有推测是masm对此作了限制。

    解决的办法有很多,做一个间接调用 call [eax],或者call far xxx,或者直接

写byte码。

    其他的办法是在gcc内联汇编里写(VC的内联貌似还是不行):

__asm__ __volatile__("call 0x400000");

    但是这种写法会导致目标地址发生变化,要修正地址,即先算出修正增值:

addx,然后调用:

__asm__ __volatile__("call 0x400000+addx");

    最后完美的做法是用nasm,里面可以直接写:

    call 0x400000


相关文章
用IAR打开STM8时,出现“Unable to create configuration 'Debug' using tool chain ‘STM8’
用IAR打开STM8时,出现“Unable to create configuration 'Debug' using tool chain ‘STM8’
374 0
|
4月前
STM32 ST-LINK Utility程序烧录方法
STM32 ST-LINK Utility程序烧录方法
506 0
|
编解码 人工智能 算法
Rasterio:rasterio.open函数参数和用法解析(以GPM Imerg Early nc转tif为例)
Rasterio:rasterio.open函数参数和用法解析(以GPM Imerg Early nc转tif为例)
486 0
|
C++
DLL调用异常:The value of ESP was not properly
DLL调用异常:The value of ESP was not properly
82 0
|
内存技术 芯片
MDK st-link下载STM32程序出现Internal command error和Error:Flash download failed. Target DLL
MDK st-link下载STM32程序出现Internal command error和Error:Flash download failed. Target DLL   是因为目标板的芯片处于休眠的状态,在尝试连接目标板时候也会出现报错Internal command ...
3637 0
|
C++
C++Qt | 无法打开源文件:“x64\Debug\moc_xxx.cpp”怎么办。
编译时报错: 1>c1xx : fatal error C1083: 无法打开源文件:“x64\Debug\Res\src\Vlc\include\moc_AVPlayer.cpp”: No such file or directory的解决办法。
443 0
|
编译器 C语言 计算机视觉
QT5在windows下调用OpenCV库出现: undefined reference to `xxxxx' 错误解决办法(适用MinGW编译器)。
QT5在windows下调用OpenCV库出现: undefined reference to `xxxxx' 错误解决办法(适用MinGW编译器)。
1636 0
QT5在windows下调用OpenCV库出现: undefined reference to `xxxxx' 错误解决办法(适用MinGW编译器)。
汇编(七)[bx]、 loop指令、debug与masm
汇编、[bx]、 loop指令、debug与masm、汇编程序
4385 0