16位汇编 call调用函数 通过栈来传递参数

X86 32位汇编利用堆栈传递函数参数的过程 当传递的参数较少时,还是可以用寄存器来传参的,但是一旦传递的参数多了,就没办法了。主程序将入口参数压入堆栈,子程序从堆栈中取出参数;出口参数通常不使用堆栈传递。高级语言进行函数调用时提供的参数实质上也是用堆栈传递的,高级语言还利用堆栈创建局部变量。保存参数和局部变量的堆栈区域称为堆栈帧,在函数调用时建立、返回后消失。esp通常用来储存栈顶,ebp通常用来储存栈底。 阅读详情

计算N的3次方,N做为参数放在栈上

assume cs:code, ds:data  
  
data segment  
    dw 0
data ends  
  
code segment  
      
    start:  
      
    mov ax,data
    mov ds,ax
    
    mov word ptr ds:[0],2
    push word ptr ds:[0]
    call cube

    mov ax,4c00h  
    int 21h  

    cube:
     mov ax,word ptr ds:[0]
     mov bx,ax
     mul bx
     mul bx
     ret    
      
code ends  
  
end start  
  
end  


鸿蒙内核源码分析(汇编传参篇) | 如何传递复杂的参数 因为寄存器数量有限,所以只能通过这种方式来传递大的参数,想想也只能在main函数栈中保存大部分参数,同时又必须确保数据的连续性,好像也只能用这种办法了,一部分通过寄存器传,一部分通过拷贝的方式倒是挺有意思的.如果你觉得这篇内容对你还蛮有帮助,我想邀请你帮我三个小忙:关注小编,同时可以期待后续文章ing🚀,不定期分享原创知识。 阅读详情

相关推荐

高通平台Camera sensor bring up!

Qualcomm Camera sensor bring up!0. 准确1. Kernel 底层驱动配置1.1 dtsi1.2 pinctrl2. Chi-Cdk XML 配置2.1 sensormodule2.2 sensor3. CHECK 本文主要针对高通平台SM7250进行描述,当然高通平台可能基本都差不多【第一个项目】 —only for sensor probe sucess. 0....

Understand-image 9239

函数调用过程探究

引言 如何定义函数、调用函数,是每个程序员学习编程的入门课。调用函数(caller)向被调函数(callee)传入参数,被调函数返回结果,看似简单的过程,其实CPU和系统内核在背后做了很多工作。下面我们通过反汇编工具,来看函数调用的底层实现。   基础知识 我们先来看几个概念,这有助于理解后面反汇编的输出结果。 栈(stack) 栈,相信大家都十分熟悉,push/pop,只允许在一端进...

weixin_33786077的博客 410

Godot4 TileMap分层绘制全攻略:解决角色、树木遮挡混乱,打造正确视觉层级

本文详细介绍了Godot4 TileMap分层绘制技术,通过图层管理和Y-Sort功能解决2D游戏中角色与物体的遮挡问题。从基础图层设置到高级优化策略,帮助开发者打造符合自然视觉规律的场景层次,提升游戏沉浸感。特别针对TileMap和TileSet的使用提供了实用技巧和代码示例。

weixin_28717411的博客 512

汇编学习--函数

函数是一个程序模块,用来实现一个特定的功能。一个函数包括函数名、入口参数、返回值、函数功能等功能。 一、函数的识别 程序通过调用程序来调用函数,在函数执行后又返回调用程序继续执行。调用函数的代码中保存了一个返回地址,该地址会与参数一起传递给被调用的函数。有多种方法可以实现这个功能,在绝大多数情况下,编译器会使用call和ret指令来调用函数及返回调用函数。 call指令:call指令与跳转指令功能...

gclome的博客 1503

CTFShow萌新区全攻略:从密码破解到Web渗透的实战解析

本文为CTFShow萌新区新手提供从密码破解到Web渗透的完整实战攻略。文章深入解析了密码学、隐写术、杂项和Web安全四大核心方向,分享了实用的解题工具、思维方法和绕过技巧,旨在帮助初学者建立系统的安全竞赛解题体系,而不仅仅是提供一份题解(WP)。

weixin_29216957的博客 299

YOLOv7独家原创改进:多种新颖的改进方式 | 保持原始信息-深度可分离卷积(MDSConv) | 全局感受野的空间金字塔 (Improve-SPPF)算法 | CA注意力改进版

多种新颖的改进方式 | 保持原始信息-深度可分离卷积(MDSConv) | 全局感受野的空间金字塔 (Improve-SPPF)算法 | CA注意力改进版

①答疑群聊服务;②YOLO大模型知识问答系统;③计算机视觉论文生成智能体; 1667

汇编(函数调用堆栈图)

本文介绍了x86架构下函数调用的关键机制。首先对比了JMP和CALL指令的区别,指出CALL在跳转时会将返回地址压栈,实现函数的多处调用。其次讲解了参数传递方法,当参数超过8个时需使用堆栈传参。然后详细阐述了堆栈平衡的概念,强调函数返回前要调整ESP指针恢复堆栈状态,可通过外平栈(add esp)或内平栈(ret n)实现。最后介绍了更安全的EBP寻址方式,通过保存/恢复EBP寄存器维护栈帧结构,避免直接使用ESP寻址的偏移计算问题。文中包含具体汇编代码示例说明各机制实现方法。

weixin_43754657的博客 704

ANPC三电平拓扑双脉冲试验的原理与实施

ANPC三电平拓扑因损耗低、谐波小、应力均衡而广泛应用,但其存在短、长两类换流通道,寄生电感和开关应力差异显著。短通道尖峰小、可靠性高;长通道应力严苛。因此需分别制定两套独立双脉冲测试方案,针对不同时段和器件(如T1、T5、T6、T4及对应二极管)全面考核开关特性。

嵌入式老牛的博客 350

学点汇编,用栈传递参数和返回值的汇编框架

在研究浮动电路CPU的过程中,遇到了汇编语言。这是一款运行在CPU内部的汇编语言,它通过栈传递参数和返回值,在栈里,一个单元是一比特。即每次push和pop操作都涉及一比特信息。一个例子如下: push p6 .. p1 call func,sp-2 pop r1 .. r3 func: # v1=sp[1], v2=sp[2] mov r1, sp[6] mov r2, sp[7] mov r3, sp[8] ret, sp

proorck2019的博客 594

【AI Agent】Harness Engineering实践

Harness(运行宿主)是围绕 LLM构建的一套确定性工程系统,其核心职责是:承认模型的固有局限,用可控的工程手段逐一弥补,使"强大但不可靠的推理引擎"变成"可信赖的生产级Agent"模型 是发动机——提供原始动力Agent 是驾驶员——做出决策Harness 是道路、地图、护栏、仪表盘、维修站和质检线——确保行驶安全有序没有Harness,模型越强,可能只是更快地制造混乱。

sysu_lluozh 192

Avalonia 超级详细学习指南

什么是 Avalonia?Avalonia 是一个开源的、跨平台的 GUI 框架,允许开发者使用 XAML 和 C# 构建现代化、高性能的桌面应用程序。与其他框架相比,Avalonia 具有强大的跨平台能力和灵活的界面设计。} }()Avalonia 的特点和优势跨平台性:Avalonia 可以在 Windows、Linux、macOS 等多个平台上运行,开发者可以编写一套代码,然后在不同的操作系统上运行相同的应用程序。

仰望星空的博客 1万+

汇编语言入门——1.1 初识16位汇编

这里的AH,指的是AX寄存器的高8位,下一句的AL,指的是AX寄存器的低8位。以上两句,第一句代表在你的DOS虚拟环境中挂载一个虚拟磁盘A盘,对应实机中的D:\asm目录,以后在DOS虚拟环境中操作A盘就是操作实机中的这个目录。如果手头有32位的win7或者xp,这些较早的系统是兼容DOS环境的,可以直接在命令提示符(WIN+R,输入cmd)中运行debug。显示的0B0B:0100是一个地址,冒号前面的段号可能每次打开都有所不同,后面的0100是一样的,表示我们编写的程序会保存在内存的这个地址中。

2603_95177945的博客 602

Qt C++ 串口调试助手

1. **串口配置**:支持自动检测可用串口,可配置波特率(9600~921600)、数据位(5~8)、校验位(无/奇/偶/标记/空格)、停止位(1/1.5/2)。- HEX 模式发送时,输入格式需为十六进制字符(0-9、A-F),可带空格(如 `01 A3 FF`)或不带空格(如 `01A3FF`)。// 发送模式:true=HEX,false=ASCII。// 字符串转HEX字节数组。ui->parity->addItems({"无", "奇校验", "偶校验", "标记校验", "空格校验"});

寒寒豆豆软件公司的博客 147

【汇编】模块化程序——call指令和ret指令作用、具有子程序的源程序框架、mul乘法指令、8位与16位乘法、寄存器冲突问题

【汇编】模块化程序——call指令和ret指令作用、具有子程序的源程序框架、mul乘法指令、8位与16位乘法、寄存器冲突问题

m0_62783065的博客 2046

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

64位和32位的寄存器和汇编的比较

64位寄存器分配的不同 区别有: 64位有16个寄存器,32位只有8个。但是32位前8个都有不同的命名,分别是e _ ,而64位前8个使用了r代替e,也就是r _。e开头的寄存器命名依然可以直接运用于相应寄存器的低32位。而剩下的寄存器名则是从r8 - r15,其低位分别用d,w,b指定长度。 32位使用栈帧来作为传递的参数的保存位置,而64位使用寄存器,分别用rdi,rsi,rdx,rcx,r

jmp esp 3万+

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

32位、64汇编区别

我在VS使用反汇编看到的依然是32位汇编。   1. 寄存器 64位有16个寄存器,32位只有8个。但是32位前8个都有不同的命名,分别是e _ ,而64位前8个使用了r代替e,也就是r _。e开头的寄存器命名依然可以直接运用于相应寄存器的低32位。而剩下的寄存器名则是从r8 - r15,其低位分别用d,w,b指定长度。 32位使用栈帧来作为传递的参数的保存位置,而64位使用寄存器,分别用...

墨痕诉清风的博客 6044

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

计算机组成原理-函数调用的汇编表示(call和ret指令 访问栈帧 切换栈帧 传递参数和返回值)

如果当前函数不会调用下一个函数,那么该当前函数的栈帧的大小不需要是16字节对齐的。x86默认指的是32为如果为64位可以叫x64或x86-64。此时caller栈帧中有add函数调用的参数信息。如果调用者有其他也使用的寄存器要被被调用者使用时。mov指令不支持两个操作数同时来自主存。相当于恢复之前使用call之后的状态。此时可以将调用者使用的寄存器压栈保存。跳转之前都是上一个函数的栈帧。执行push 和mov指令后。再执行下一条mov指令。再执行两天mov指令。再执行两个mov指令。执行完leave指令。

llovewuzhengzi的博客 1354

汇编call指令详解_GO汇编

AT&T格式汇编go汇编对比在go汇编中,寄存器的名字没有位数之分,比如AX寄存器没有EAX和RAX之类的名字,指令中一律使用AX,所以如果指令中有操作数寄存器或是指令需要访问内存,则操作码都要带上后缀:B(8位),W(16位),D(32位),Q(64位),例如:MOVQ BP, SP两个虚拟寄存器FP,主要用来引用函数参数和SB,保留程序地址空间的起始地址。函数定义,这里以go runt...

weixin_39983223的博客 3848

汇编:函数以及函数参数传递

函数在汇编中被定义为一个带有标签的代码块,通常使用proc和endp关键字来定义函数的开始和结束。;函数体。

WolvenSec的博客 5805

X86体系架构下的16位汇编语言的栈平衡与内存对齐(零基础入门)

本文探讨x86 16位汇编中栈平衡与内存对齐的核心概念: 栈平衡通过调用约定(cdecl/stdcall)确保函数调用前后栈指针一致,cdecl由调用者清理栈,stdcall由被调用者清理 栈帧通过BP寄存器管理,实现局部变量和参数的稳定访问 16位架构要求2字节对齐,未对齐访问可能降低性能或导致错误 栈操作自动保证对齐,数据段需使用ALIGN伪指令确保对齐 栈平衡与内存对齐相互关联,共同保障程序正确性和执行效率 (注:仅限学习用途,禁止非法使用)

fearhacker的专栏 1181

64位汇编入门

忽然间想记录一下64位的汇编...这里的话主要就是记录一下和32位汇编的一些比较大的差别,主要就是寄存器和函数调用这两方面,指令什么的话我觉得就遇到查就可以了,有时间的话整理吧。 首先先来看寄存器,如下图 对于上图而言,白色背景部分表示兼容x86的寄存器,支持所有的模式,而对于灰色部分而言,表示扩展的寄存器,只支持64位模式。 先来看通用寄存器,可以发现扩展了8个通用的寄存器,也就是R8-R15,并且由原先的32字节扩展为64个字节,总共16个寄存器 EAX -> RAX EBX -&g

小喇叭儿滴滴的吹 7283

16位汇编第九讲汇编指令以及逆向中的花指令

16位汇编第九讲汇编指令以及逆向中的花指令   一丶LOOP指令(循环指令) 作用:   循环指令利用cx计数器自动减1,方便实现计数循环的程序结构 例如:    mov cx,3 loop1:    ;标号 ..... LOOP loop1;不断的循环标号,然后cx-- 直到变为零 每次循环过后,cx都会自减,直到cx == 0,不过现

liuyu5210的博客 872

从汇编的角度去审视函数的调用【函数栈帧】

从汇编角度去看待函数调用的底层逻辑

qq_2972806103的博客 1576

X64位-汇编语言-汇编补丁-参数传递-堆栈对齐

文章目录1.32位指令区别2.64位指令文件执行3.64位调用约定4.当调用子函数时,堆栈指针RSP必须在16字节边界对齐上5.子函数开始预留空间计算6.总结   进行任意软件的汇编补丁开发,需要对汇编语言有一定程度的了解,本人在补丁开发过程中,经常遇到各类问题,究其根本还是源于对汇编的一些规则了解不够,本文整理X64位汇编,为大家做参考。 1.32位指令区别   64位指令集是在32位指令集上的扩展和发展,EIP扩展为RIP,EFLAGS扩展为RFLAGS。浮点栈寄存器没有变化,多媒体寄存器多个8个寄存器

插件开发 2686

(十)汇编语言——CALL和RET指令

(十)汇编语言——CALL和RET指令 CALL指令 功能 寄存器 内存 段间转移 返回指令 ret retf 实例 MUL指令 模块化程序设计 寄存器 内存单元 栈 寄存器冲突问题 方法 相信大家肯定在C语言里面接触过函数这个概念,或者是一些高级语言里面的方法,那么汇编语言有没有这样类似的概念呢,答案是当然的,接下来就让我们来介绍一下汇编的模块化程序设计。

weixin_66578482的博客 4677
上一篇: 16位汇编 cmp jne实现判断和循环
下一篇: 16位汇编 Hook int 0实例
sysprogram
博客等级 码龄17年 298粉丝 442原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值