我对下面的代码有问题:
void swap(int* a, int* b) {
__asm {
mov eax, a;
mov ebx, b;
push[eax];
push[ebx];
pop[eax];
pop[ebx];
}
}
int main() {
int a = 3, b = 6;
printf("a: %d\tb: %d\n", a, b);
swap(&a, &b);
printf("a: %d\tb: %d\n", a, b);
}
Run Code Online (Sandbox Code Playgroud)
我正在 Visual Studio 中运行此代码,当我运行此代码时,它显示:
运行时检查失败 - ESP 的值未在函数调用中正确保存。这通常是用一种调用约定声明的函数和用另一种调用约定声明的函数指针调用的结果。
我缺少什么?
我有以下代码.
#include<iostream>
using namespace std;
int main() {
int result=0;
_asm {
mov eax,2
mov eax,result;
}
cout<<result<<endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我知道汇编程序很好,但为什么程序输出2到屏幕?
我的程序差不多完成了.我试图将CBA0123h除以B000h.商出来了.但是,应该在dx寄存器中的余数应该是:EA61(http://www.miniwebtool.com/hex-calculator/?number1=CBA0123&operate=4&number2=B000),而不是它的A123.我认为这与小端或其他东西有关.但我需要解决这个问题.我怎么能够?我旋转位?我以前从未见过如何做到这一点.如何从这个除法问题中得到正确的余数?
int main(int argc, char* argv[])
{
unsigned short int IDQUO = 0x0;
unsigned short int IDREM = 0x0;
mov dx, 0CBAh
mov ax, 0123h
mov bx, 0B000h
div bx
mov IDQUO, ax
mov IDREM, dx
return(0);
}
Run Code Online (Sandbox Code Playgroud) 如何使用 Delphi 的内联汇编器获取数字的位数?
例如 :
13452 should return 5
1344 should return 4
9721343 should return 7
Run Code Online (Sandbox Code Playgroud)
等等
我的尝试是这样的:
function CalculateLength(Number : integer) : Integer;
begin
asm
PUSH Length(Number)
MOV @Result, EAX
end;
end;
Run Code Online (Sandbox Code Playgroud) 首先,不,我不是在谈论 C++ 范围解析运算符。
我有以下语法:
asm(
"mov R0,%0\n"
"mov R1,%1\n"
"mov R3,%2\n"
"mov R4,%3\n"
"mov R5,%4\n"
::"r"(<A_VALUE>),
"r"(<A_VALUE>),
"r"(<A_VALUE>),
"r"(<A_VALUE>),
"r"(<A_VALUE>),
:"r0","r1","r2"
)
Run Code Online (Sandbox Code Playgroud)
冒号和双冒号是什么意思?我确实记得在动态创建变量名时与字符串连接有关。
万提前致谢!
我在这做错了什么?
int val = 15;
asm ("movl %1, %%eax"::"r"(val):"%eax" );
__asm__ volatile ("int $0x80");
Run Code Online (Sandbox Code Playgroud)
我想在eax中移动15然后调用中断
"错误":'asm':操作数超出范围
我正在尝试1.34 *sqrt(lght)使用内联汇编在此函数中进行计算,但出现以下错误:
'_asm' 未声明(首次在此函数中使用)每个未声明的标识符仅针对它出现在预期中的每个函数报告一次 ';' 在“{”标记之前
我一直在研究如何解决这个问题,但找不到太多信息。有人可以建议一种方法来让它发挥作用吗?
我的代码是:
double hullSpeed(double lgth) {
_asm {
global _start
fld lght; //load lght
fld st(0); //duplicate lght on Top of stack
fsqrt;
square root of lght
fld st(0); //load square result on top of stack
fld 1.34; //load 1.34 on top of stack
fld st(i);
duplicate 1.34 on TOS
fmulp st(0), st(i); //multiply them
fst z;
save result in z
}
return z; // return result of [ 1.34 *sqrt(lght) ] …Run Code Online (Sandbox Code Playgroud) assembly ×6
c ×5
x86 ×4
gcc ×2
c++ ×1
colon ×1
delphi ×1
division ×1
intel-syntax ×1
visual-c++ ×1