第三篇 子程序调用与返回的一点小问题

PERL语言入门:第四章:子程序(函数) :调用子程序与子程序返回值 调用子函数, 这样: &SUMDATA; 或 &SUMDATA($a, $b); 当然, 有些情况可以省略&号或括号: SUMDATA($a, $b); SUMDATA $a, $b (这种情况要前面先定义了才行) 函数的返回值: 在perl 中函数返回值为最后一条语句的返回值: sub SUMDATA{ $a + $b; #这里的$a+$b为返回值 } sub SUM 阅读详情

这篇博文主要是为了简单介绍下,子程序调用的两种情况,调用在定义前和定义在调用前。

一、调用在定义前

1、近调用

code segment
	assume cs:code
start:
	call f

	mov ah,4ch
	int 21h

f proc
	mov ax,0ffffh
	ret
f endp

code ends
	end start

2、远调用

code segment
	assume cs:code
start:
	call far ptr f

	mov ah,4ch
	int 21h

f proc far
	mov ax,0ffffh
	ret
f endp

code ends
	end start

注意,当调用在定义前时,如果过程的类型是far,则调用时必须显示用far ptr说明,否则编译出错。

 

二、定义在调用前

1、近调用

code segment
	assume cs:code

f proc
	mov ax,0ffffh
	ret
f endp

start:
	call f

	mov ah,4ch
	int 21h
code ends
	end start

2、远调用

code segment
	assume cs:code

f proc far
	mov ax,0ffffh
	ret
f endp

start:
	call f       

	mov ah,4ch
	int 21h
code ends
	end start

注意,定义在调用前时,远调用则不必须用far ptr说明。当然用上也行。

 

三、为什么会出现上述的不同呢?

这是因为,过程的调用是在汇编时决定的,通俗一点也就是masm.exe(微软宏汇编)决定的。缺省的调用

是near型的,也就是说如果masm.exe汇编到call f时任然不能确定过程的类型,则缺省为near型。所以,如

果调用在定以前,并且是远调用,则必须显示告诉汇编器;而定以前在调用前,汇编调用语句时,汇编器已

经知道过程类型了,自然会自动确定。

 

四、另外,过程的返回也是在编译时就确定的。汇编返回指令ret时过程的类型肯定已经确定了,所以不必用

retn或retf指明了。


 


 

 

汇编语言--如何调用子程序 最近刚学了汇编语言的子程序调用,刚开始有些迷惑,现在大概弄懂了点。 1:程序内部调用子程序              先看个例子: 编制一个子程序,求y=x^4,x为字节,y为字,且不会溢出 版本1:子程序的参数由寄存器bl提供,返回结果在ax中 阅读详情

相关推荐

LC-3 子程序调用与模拟栈调用递归函数

在LC-3的编程中,有时候需要重复调用一些子程序,但是又不能像c语言一样定义函数,但是LC-3提供了相当的机制供我们使用 TRAP机制调用子程序 在上一篇文章【LC-3简易四子棋(深大计系1实验4) 思路+代码+详细注释】中,我们提到: 对于输入输出,我们通过一些“伪操作”进行“系统调用”来实现读取字符,输出字符,可是这些操作的本质是TRAP机制来完成的调用 TRAP调用 TRAP将目标中断矢量(也就是trap的操作数,比如TRAP x21操作数是0x21)的高位补0得到一个数x,然后去内存x处寻找下一条

AKGWSB 's blog 3295

调用指令(Call)

调用指令分为近(near)调用和远(far)调用。 如果被调用子程序的属性是近的,那么,CALL指令将产生一个近调用,它把该指令之后地址的偏移量(用一个字来表示的)压栈,把被调用子程序入口地址的偏移量送给指令指针寄存器IP即可实现执行程序的转移。 [color=red]注意:因为将下一条指令地址入栈了,所以根据ebp访问第一参数时地址要增加四个字节[/color] 如果被调用子程...

run_xiao 2981

调用返回风格(面向对象与主程序子程序)

调用返回风格 1、  主程序-子程序风格 2、  面向对象风格 主程序-子程序: 组件–主程序、子程序 连接件–调用-返回机制 拓扑结构–层次化结构 主程序-子过程风格的优点与缺点 §优点: –有效地将一个较复杂的程序系统设计任务分解成许多易于控制和处理的子任务,便于开发和维护–已被证明是成功的设计方法,可以被用于较大程序 缺点: –规模:程序超过10万行,表现不好;程序太大

嘿,牛慧升的博客 8019

主程序调用子程序的c语言例子,子程序调用M98编程举例

编程时,为了简化程序的编制,当一个工件上有相同的加工内容时,常用调子程序的方法进行编程。调用子程序的程序叫做主程序。子程序的编号与一般程序基本相同,只是程序结束字为M99表示子程序结束,并返回到调用子程序的主程序中。调用子程序的编程格式 M98 P~ ;式中:P―表示子程序调用情况。P后共有8位数字,前四位为调用次数,省略时为调用一次;后四位为所调用的子程序号。例:如图所示,在一块平板上加工6个边...

weixin_28785069的博客 1万+

Syzkaller实战教程2:运行环境配置+实例运行

本文详细介绍了在linux系统上搭建Syzkaller内核模糊测试环境的完整流程。 1.环境配置:通过VMware创建Ubuntu20.04虚拟机A,配置QEMU/KVM虚拟化环境,安装Go语言工具链和Syzkaller; 2.内核编译:下载Linux内核源码并配置KCOV等调试选项,编译生成带覆盖率支持的bzImage内核镜像; 3.测试环境构建:使用debootstrap创建Debian虚拟机镜像,通过QEMU启动嵌套虚拟机B; 实例测试: 4.演示两种测试场景 - 提供完整上手教程

cuguanren的博客 1378

使用RustDesk或者AnyDesk的TCP隧道实现Codesys系列PLC的远程调试和下载

Codesys远程调试

exat500g的博客 7280

c语言怎么在其他函数中调用主函数中的变量地址

在 C 语言中,主函数中的变量可以通过在函数定义中声明指针来调用。 例如,假设主函数中有一个名为 x 的变量,想要在其他函数 foo 中调用它的地址,可以这样声明 foo 函数: void foo(int *x) { // 在这里可以使用 x 的地址 } 然后在主函数中调用 foo 函数时,可以将 x 的地址作为参数传递过去: int main() { int x = 10; foo...

weixin_35750483的博客 1312

Vue3多级路由缓存失效的深度解析与实战解决方案

本文深度解析了Vue3项目中多级路由下keep-alive缓存失效的根本原因,并提供了三种实战解决方案:通过路由扁平化根治问题、利用状态管理精细模拟缓存效果,以及借助keep-alive-vue3插件快速修复。文章旨在帮助开发者彻底理解Vue Router与keep-alive的协作机制,从而根据项目情况选择最佳策略,有效解决页面状态丢失的难题。

weixin_29015801的博客 285

汇编语言——子程序调用

主程序与子程序 调用语句CALL CALL指令分成4种类型 CALL子程序名 ;段内直接调用 CALL far ptr子程序名; 段间直接调用 不是很常用的 CALL r16 CALL WORD PTR m16;段内间接调用(IP发生改变) CALL DWORD ptr mem;段间间接调用(存储器) CALL指令需要保存返回地址: 段内调用——在同一代码段内进行, 也称近调用偏移地址IP入栈 SP←SP- 2, SS:[S

olivia12344321的博客 2万+

CentOS7下Ollama部署全攻略:从安装到自定义端口配置(附国内加速技巧)

本文详细介绍了在CentOS7系统上部署Ollama的完整流程,包括环境准备、模型下载优化、服务化部署及端口配置等关键步骤。特别针对国内网络环境提供了加速安装方案和镜像源配置技巧,帮助开发者快速搭建稳定的本地AI运行环境。

mmm90的博客 289

FPGA_AD9361实战

1.参考网站。

Pual_Georg的博客 750

调用子程序指令及子程序返回指令 与 堆栈 和 PC 的关联

调用子程序指令(如LCALL)和子程序返回指令(如RET)与堆栈和PC有着密切的关联。调用子程序时,当前PC值(返回地址)被压入堆栈,并设置新的PC值以跳转到子程序地址。在调用子程序时,堆栈用于保存当前的PC值(即返回地址),在子程序执行完毕后,从堆栈中弹出返回地址以恢复程序的正常执行。本文将详细探讨调用子程序指令(如LCALL)及子程序返回指令(如RET)与堆栈和PC的关系。当调用子程序或发生中断时,PC的值需要保存,以便在子程序执行完毕或中断处理完成后能够恢复程序的正常执行。

分享各种学习心得和遇到的问题 1555

4D毫米波雷达与激光雷达融合评测:3种主流融合框架在极端天气下的性能对比

本文深度评测了4D毫米波雷达与激光雷达在极端天气下的三大融合框架性能,包括前融合、特征级融合和后融合。通过实测数据对比,揭示了多传感器融合在暴雨、浓雾等恶劣环境中的显著优势,为自动驾驶感知系统提供了关键的技术参考和工程实践指南。

weixin_28677005的博客 331

matlab中主程序如何调用其它子程序,主程序怎样调用子程序

快速导读:Q1:vbs怎么调用子程序?你可以这样操作比如你要调用C:\m.exe Set ws = CreateObject("Wscript.Shell") Set fs = CreateObject("Scripting.FileSystemObject") ws.Run "c:\m.exe" 希望能帮助你!!!!!Q2:matlab中如何用主程序调用子程序形式必须有函数文件存在时,才能调用其...

weixin_28872035的博客 1万+

基于STM32L4XX、HAL库的ESP32-C3-WROOM-02-N4 WIFI模块驱动程序设计

支持802.11 b/g/n Wi-Fi (2.4GHz)RISC-V 32位单核处理器,主频高达160MHz。封装尺寸:18mm × 20mm × 3mm。工作温度范围:-40°C ~ 85°C。// 设置WiFi模式为STA。支持Bluetooth 5 (LE)// 发送AT指令测试通信。// 检查响应是否包含OK。内置4MB SPI Flash。// 连接TCP服务器。// 发送HTTP请求。// 初始化UART。// 建立TCP连接。低功耗设计,适合IoT应用。

zhusl6688的博客 385

WinCC实现定时存储数据至SQLServer

环境 Win10 WinCC V7.5 SQL Server 2016 运行结果 流程 WinCC变量 全局VB脚本 (我设置的是每2秒存一次,因此周期性触发器设置1秒)

skr? 3990

ARM子程序调用与返回

子程序(也叫过程、函数、方法)是一个能被调用和执行并返回到调用点那条指令的代码段。两个问题:如何将参数传递给子程序或从子程序中传递出来?怎么从子程序返回到调用点?指令BSR Proc_A调用子程序Proc_A。处理器将调用代码中要执行的下一条指令的地址保存到一个安全的地方,然后把目标地址Proc_A,子程序的第一条指令,加载到程序计数器中。把一个非顺序地址加载到PC就强制跳转到子程序中。在子程序末尾,从子程序中返回指令RTS,使处理器返回到子程序调用点的下一条指令。

Tzecto 709

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

[ARM 汇编]进阶篇—数据处理指令—2.2.3 子程序调用和返回指令

子程序调用和返回指令用于控制程序从一个位置跳转到子程序,执行子程序后再返回到跳转前的位置继续执行。在本节中,我们将详细介绍 ARM 汇编中的子程序调用和返回指令,并通过实例帮助你更好地理解和掌握这些指令。注意:在子程序中可能会修改到一些寄存器的值,为了避免影响到调用处的状态,通常会在子程序开始时使用 PUSH 指令保存这些寄存器的值,然后在子程序结束之前使用 POP 指令恢复这些寄存器的值。在这个示例中,BX LR 指令用于从名为 func 的子程序返回到调用处。子程序返回指令用于从子程序返回到调用处。

Andy0214的专栏 9727

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

中断调用与子程序调用

1、两过程定义与作用 子程序是微机基本程序结构中的1种,基本程序结构包括顺序(简单)、分支(判断)、循环、子程序和查表等5种。 子程序是一组可以公用的指令序列,只要给出子程序的入口地址就能从主程序转入子程序。子程序在功能上具有相对的独立性,在执行主程序的过程中往往被多次调用,甚至被不同的程序所调用。一般微机首先执行主程序,碰到调用指令就转去执行子程序,子程序执行完后,返回指令就返回主程序断点...

qq_45763093的博客 2806

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

7.2.子程序的调用和返回指令

子程序调用指令本身的执行不影响任何标志位,但子程序体中指令的执行会改变标志位,所以,如果希望子程序的执行不能改变调用指令前后的标志位,那么,就要在子程序的开始处保护标志位,在子程序的返回前恢复标志位。一方面,之所以说是转移,是因为当调用一个子程序时,程序的执行顺序被改变,CPU将转而执行子程序中的指令序列,在这方面,调用子程序的操作含有转移指令的功能,子程序的返回指令的转移特性与此类似;在近类型的子程序中,返回指令RET是近返回,其功能是把栈顶之值弹出到指令指针寄存器IP中,SP会被加2。

qq_41237850的博客 711

中断调用和子程序的调用的异同

1、两过程定义与作用 子程序是微机基本程序结构中的1种,基本程序结构包括顺序(简单)、分支(判断)、循环、子程序和查表等5种。 子程序是一组可以公用的指令序列,只要给出子程序的入口地址就能从主程序转入子程序。子程序在功能上具有相对的独立性,在执行主程序的过程中往往被多次调用,甚至被不同的程序所调用。一般微机首先执行主程序,碰到调用指令就转去执行子程序,子程序执行完后,返回指令就返回主程...

weixin_30815469的博客 4456

汇编 子程序设计

汇编之子程序设计 1. 子程序的概念 1.1 子程序的引入 在程序设计中,我们会发现一些多次无规律重复的程序段或语句序列。解决此类问题一个行之有效的方法就是将它们设计成可供反复调用的独立的子程序结构,以便在需要时调用。 1.2 子程序和主程序 子程序(过程):是指功能相对独立的一段程序。 主程序:调用子程序的程序称为主调程序或主程序。 子程序与主程序的关系:调用与被调用的关系。 1.3 子程序的优点 子程序作为一个功能性模块,供一个程序甚至多个程序使用; 可以简化源程序结构; 提高程序的可读性与可

好学者的博客 7741

python的subprocess:子程序调用(调用执行其他命令);获取子程序脚本当前路径问题

python subprocess用于程序执行时调用子程序,通过stdout,stdin和stderr进行交互。 Stdout子程序执行结果返回,如文件、屏幕等 Stdin 子程序执行时的输入,如文件 Stderr错误输出python subprocess类似os的部分功能,可以说是优化的专项功能类, os调用子程序参见http://blog.youkuaiyun.com/longshenlmj/art

longshenlmj的专栏 2万+

《汇编》子程序

结构流程图 main proc 子程序调用语句(EIP自动的由主程序指向子程序)→执行子程序段 ↓ ...

FZUMRWANG的博客 3100
上一篇: 第二篇 溢出标志 CF与OF
下一篇: 第四篇 操作80*25彩色字符显示缓冲区
lulipeng_cpp
博客等级 码龄15年 169粉丝 130原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值