sách gpt4 ai đã đi

Tôi cố gắng hiểu mã [c code -> assembly]

In lại 作者:行者123 更新时间:2023-11-30 19:41:41 30 4
mua khóa gpt4 Nike

我尝试理解[c代码 -> 汇编]代码

void node::Check( data & _data1, vector& _data2)
{

-> push ebp
-> mov ebp,esp
-> push ebx

if (TryToCheck(_data1.a, _data1.b))

-> mov ebx,dword ptr [_data1]
  1. 我不确定这一行的作用这行的含义是什么,

    push esi
    mov esi,ecx
  2. 据我所知,
  3. ecx 是一个计数值。为什么要将ecx的值保存在esi中?

    mov eax,dword ptr [esi+50h]
  4. 这个值 50h Điều này có nghĩa là gì?

    mov eax,dword ptr [eax+4]
    lea edx,[ebx+40h]
    lea ecx,[esi+50h]
    push edx
    lea edx,[ebx+50h]
    push edx
    call eax
    test al,al
    je node::Check+7Fh

1 Câu trả lời

push ebp
mov ebp,esp

这会保存调用者的堆栈帧指针 (push ebp) 并设置您的堆栈帧指针 (mov ebp,esp).

push ebx 

这会将 ebx 保存在堆栈上。稍后,在返回之前,您将看到一个 pop ebx.

mov ebx,dword ptr [_data1]

这会将位置 _data1 的内容移至 ebx 寄存器中。调试器会向您显示一个符号名称;如果你仔细观察,你会看到move ebx,dword ptr [ebp+12]。这里使用 ebp 中的堆栈帧指针访问调用者的参数。

push esi
mov esi,ecx

这会保存 esi,然后将 ecx 的值移至 esi.

mov eax,dword ptr [esi+50h]

这会将 esi+50h 处的内存位置的值移动到 eax ở giữa.

有时您不必太担心编译器生成的汇编程序。它可能不是最优的,也可能是优化过度导致您无法识别原始语句。

关于c - 我尝试理解 [c 代码 -> 汇编] 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33254393/

30 4 0
行者123
Hồ sơ cá nhân

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá Didi Taxi miễn phí
Mã giảm giá Didi Taxi
Giấy chứng nhận ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com