19、计算机编程中的循环、跳转与调用

计算机编程中的循环、跳转与调用

1. 计算与循环的本质

生活中充满了重复,如地球自转、月球绕地球公转、地球绕太阳公转等自然节奏,我们通过这些来计算日子。从某种意义上说,重复也是计算的本质。计算两个数相加,我们无需计算机,但计算一千或一百万个数相加,计算机就派上用场了。

在编程里,循环是一种重要的重复机制。早期,Ada Lovelace 在讨论 Charles Babbage 的分析机时提到,重复的操作组被称为循环(cycle),现在我们通常称其为“循环(loop)”,而她所说的“循环的循环”如今被叫做“嵌套循环(nested loop)”。

2. 简单循环程序的问题与解决方案

之前展示过一个将存储在内存地址 1000h 开始的 5 个字节相加的小程序。若要将一百或一千个字节相加,不断添加 INX 和 ADD 指令并非好办法,缺乏通用性。

为解决这个问题,我们需要一个能重复执行特定指令序列(如 INX 和 ADD 指令)的新指令。在正常情况下,CPU 取每条指令字节后,程序计数器会递增,使 CPU 从一条指令推进到下一条。而实现循环的指令需要以不同方式改变程序计数器。

2.1 JMP 指令

我们引入 JMP(jump)指令,它后面跟着 2 个字节,共同构成一个 16 位地址。例如,每次执行 INX 和 ADD 指令后,JMP 指令会使程序计数器跳转到指定地址(如 0005h),继续执行 INX 和 ADD 指令,形成循环。不过,仅使用 JMP 指令会导致程序陷入无限循环,因为没有办法停止循环。

2.2 条件跳转指令

为了控制循环的终止,我们可以利用 C

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值