首页
学习
活动
专区
圈层
工具
发布

C语言在ARM中函数调用时,栈是如何变化的?

r0-r3 用作传入函数参数,传出函数返回值。在子程序调用之间,可以将 r0-r3 用于任何用途。被调用函数在返回之前不必恢复 r0-r3。...---如果调用函数需要再次使用 r0-r3 的内容,则它必须保留这些内容。 2. r4-r11 被用来存放函数的局部变量。如果被调用函数使用了这些寄存器,它在返回之前必须恢复这些寄存器的值。...被调用函数在返回之前不必恢复 r12。 4. 寄存器 r13 是栈指针 sp。它不能用于任何其它用途。sp 中存放的值在退出被调用函数时必须与进入时的值相同。 5....如果您保存了返回地址,则可以在调用之间将 r14 用于其它用途,程序返回时要恢复 6. 寄存器 r15 是程序计数器 pc。它不能用于任何其它用途。...演示代码 假如现在你已经掌握了 arm 指令的用法,即便没有掌握也没关系,“书到用时回头翻”。

16.3K84

函数调用时,CPU在背后偷偷干了什么?看完这篇我悟了!

正在调用那个函数,ebp和esp就调用哪个函数,ebp和esp之间的空间一直在变 执行时,每个函数都要开辟空间,如下图所示 2.1 push 从调用main函数的函数开始 转到反汇编...=x+y时 刚好ebp+8对应a和ebp+12对应b,参数是从右向左传,先b再a,并且形参根本不是在add函数内部创建的,找的是传参压进来的空间(验证了形参是实参的临时拷贝,改变形参不会影响实参...栈帧空间里面初始化一部分之后,然后局部变量在栈帧中分配空间 为什么局部变量的值是随机值?...形参是在压栈时开辟的空间,它和实参只是值上面是相同的,空间是独立的,形参是实参的临时拷贝 函数调用是怎么做的? 函数调用是结束后怎么返回的?...在调用函数之前就把Call指令的下一条指令的地址压栈压进去,把调用这个函数的上一个函数的edp压栈压进去了,当函数调用完放回时,弹出edp后,edp里面装的更新为上一个main函数的edp,跳到Call

9010
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    熬夜总结了 “HTML5画布” 的知识点(共10条)

    一般把静态场景绘制在离屏canvas上,更新动态场景的时候,把静态场景copy过来,而不是重新绘制。...,绘制一幅图像,需要有三个重载的方法: 使用: drawImage(image, x, y) // 在画布上定位图像 // 方法在画布上绘制图像、画布或视频。...destination-atop 已有的内容只在它和新的图形重叠的地方保留,新图形绘制在内容后 destination-in 在新图形和已有画布重叠的地方,已有内容都保留,所有其他内容成为透明 destination-out...,不创建线条 lineTo()添加一个新点,在画布中创建从该点到最后指定点的线条 clip() 从原始画布剪切任意形状和尺寸的区域 arcTo() 创建两切线之间的弧/曲线 quadraticCurveTo...默认为10,只有miter使用时有效 lineJoin = [value]; round // 两条线段的外边缘应该和一个填充的弧结合 bevel // 两条线段的外边缘应该和一个填充的三角形相交

    8.8K10

    熬夜总结了 “HTML5画布” 的知识点(共10条)

    一般把静态场景绘制在离屏canvas上,更新动态场景的时候,把静态场景copy过来,而不是重新绘制。...使用drawImage()方法可以将图像添加到Canvas画布中,绘制一幅图像,需要有三个重载的方法: 使用: drawImage(image, x, y) // 在画布上定位图像 // 方法在画布上绘制图像...destY 在画布上放置图像的 y 坐标位置 destWidth 要使用的图像的宽度 destHeight 要使用的图像的高度 插入图像: ?...destination-atop 已有的内容只在它和新的图形重叠的地方保留,新图形绘制在内容后 destination-in 在新图形和已有画布重叠的地方,已有内容都保留,所有其他内容成为透明 destination-out...,不创建线条 lineTo()添加一个新点,在画布中创建从该点到最后指定点的线条 clip() 从原始画布剪切任意形状和尺寸的区域 arcTo() 创建两切线之间的弧/曲线 quadraticCurveTo

    8.3K21

    Canvas

    绘制的API在绘制上下文中定义。而不在画布中定义。 需要获得上下文对象的时候,需要调用画布的getContext方法,获得绘画的上下文。...或者一直延伸到路径所在的区域外某点的射线,现在从0开始初始化一个计数器,对穿过这条射线的路径进行枚举,每当一条路径顺时针方向穿过射线的时候,计数器加1,逆时针减1,最后,枚举完所有路径以后,如果计时器的值不是...0,那么就认为p在路径内,反过来,计数器的值为0,p在路径外。...js根据非零绕数原则确定那个在路径内,那个在路径外,用于进行填充。...("2d"); // 工具函数,角度转弧度 function rads(x) { return Math.PI * x / 180; } // 绘制园 context.beginPath();

    2.4K10

    Excel VBA解读(143): 在自定义函数中使用整列引用时,如何更有效率?

    在VBA用户自定义函数中处理此问题的标准方法是获取整列引用和已使用单元格区域的交叉区域,以便用户自定义函数只需处理实际使用的整列的一部分。...问题是自定义函数会对传递给其的每个单元格区域进行检查,即使它不是真正需要的。 影响运行时间的实际上是包含数据或格式(或以前包含数据或格式)的单元格数量,而不是已使用单元格区域中的最后一个单元格。...执行此操作的一种方法是使用Application对象的AfterCalculate事件(在Excel 2007中引入)清空缓存。...然后,只有为每个工作表请求已使用单元格区域的第一个用户自定义函数使用时间来查找已使用的单元格区域,并且(假设计算本身不会改变已使用的单元格区域)将总是检索正确的数字。...这种技术的效率较低,因为在每个计算周期中工作表可能被计算几次。 如果想找到包含数据的最后一行,当有许多包含数据的单元格时,使用Range.Find会更快。

    3.7K20

    第05步《前端篇》第1章创建第一个小游戏项目第2课

    主要知识点/技能点 在小游戏中画布是使用 wx.createCanvas接口创建的,第一个被创建的是上屏画布,第二次、第三次及后面第N次创建的画布则是离屏画布,离屏画布上绘制的内容默认不会显示在屏幕上。...在画布上,可以使用 Canvas.getContext("2d")获取 2D 渲染上下文对象RenderingContext,继而再用 RenderingContext对象的fillRect 方法绘制几何矩形...在小游戏中,共有6种作用域:区块作用域、函数/方法作用域、类作用域、文件作用域、全局作用域和开放数据域。 在浏览器宿主环境中,如果想声明一个全局变量,可以在全局对象 window 上定义。...在函数内声明的变量就是局部变量,局部变量的作用域局限于函数之内,一般在函数退出后,函数的作用域也就销毁了,局部变量自然也就不能访问了。...实践疑难点 在绘制代码没有生效时,要注意考察画布是不是离屏画布。

    1.5K20

    【Golang语言社区】前端编程- 从零开始开发一款H5小游戏(一) 重温canvas的基础用法

    context上下文: var canvas = document.getElementById('canvas'); var cxt = canvas.getContext('2d'); 我们的图形并不是直接花在...传入的2d参数则表示我们创建的是一个2d的画布。后面所有的绘画都是直接操作cxt这个画布对象。 这个画布对象的全称是 CanvasRenderingContext2D,上面实现了很多绘制方法。...基础开发中很少会使用到,可以用时再查阅文档。 为了能在一张画图上绘制多个图形而互不影响,CanvasRenderingContext2D提供了 beginPath和 closePath。...beginPath 用于在开始绘制一个独立图形的时候声明,在beginPath之后定义的画笔,颜料都不会影响到画图中的其他图形。...var canvas = document.getElementById("canvas");var ctx = canvas.getContext("2d");//第一条路径ctx.beginPath

    1.3K140

    canvas-入门

    大意: 使用JS脚本可以绘制图形、简单的动画 注:canvas只是一个普通无色透明区域,可理解为画布,同时绘制图形不是用鼠标,而是用JS脚本。 因为是新增元素,兼容性方面如下: ?...不支持canvas"文案 canvas不像img标签,canvas需要结束标签 canvas可以应用border、background-color、margin等属性 canvas在没有指定宽高时...,默认300 * 150 操作canvas // 获得canvasvar canvas = document.getElementById('j-canvas');// 获得画布var ctx = canvas.getContext...('2d'); 检测支持性 var canvas = document.getElementById('j-canvas');if (canvas.getContext) { var ctx = canvas.getContext...在canvas中坐标系分2D、3D坐标系统,除了默认的还有 坐标系转换 的概念,我们这次只探讨2D默认坐标系,如下: ?

    838100

    Canvas 动画: atan2 三角函数与鼠标跟随效果

    项目需求 我们的目标是在一个画布上绘制一个箭头,并让这个箭头随着鼠标的移动自动旋转,始终指向鼠标的位置。...我们使用标签来创建一个画布,之后在这个画布上绘制箭头。canvas.getContext('2d')提供了一个2D绘图上下文,通过这个上下文可以绘制图形、设置颜色、处理旋转等操作。...监听mousemove事件:每次鼠标在画布上移动时,都会触发mousemove事件,这时我们计算鼠标相对于画布的x、y坐标,并存储在mouse对象中。...draw方法:用于在画布上绘制箭头。...绘制箭头:在计算完旋转角度后,我们调用arrow.draw(context),根据新的角度在画布上绘制箭头。这使得箭头能够实时指向鼠标的位置。

    67710

    Canvas网页涂鸦板再次增强版

    第一版Canvas涂鸦板 实现功能:在涂鸦板上鼠标按下去拖动的涂鸦效果 实现思路:监听鼠标按下、移动、松开事件,将鼠标按下的值赋值给moveTo的x和y值,作为起始位置。...在移动事件中,将鼠标距离可视区x和y值赋给lineTo,再进行描边。 实现代码 <!...canvas = document.getElementById('cavsElem'); //准备画笔(获取上下文对象) var context = canvas.getContext...var canvas = document.getElementById('cavsElem'); //准备画笔(获取上下文对象) var context = canvas.getContext...选择画布颜色功能有两种(获取颜色板的方法和第二版设置画笔颜色相同) 第一种就是将颜色设置为画布的css背景颜色,但是实现生成图片的时候不会把背景颜色生成 第二种就是直接在画布上画一个填充矩形,设置填充颜色

    1.6K30
    领券