读王爽老师汇编语言笔记---[bx]loop指令以及多个段的程序

2013-7-3 19:38:42
[bx]和内存单元的描述
[bx]和[0]是类似的,[0]表示内存单元,它的偏移地址是0,
如:mov ax,[0]
将一个内存单元的内容送入ax,这个内存单元的长度,为2个字节,存放一个字,偏移地址为0,段地址

在ds中
同理 mov ax, [bx]
将一个内存单元的内容送入ax,这个内存单元的长度,为2个字节,存放一个字,偏移地址为bx,段地址

在ds中
功能:bx中存放的数据作为一个偏移地址EA,段地址为SA默认在ds中,将SA:EA处的数据送入ax中,
即 (ax) = ((dx)*16 + (bx));

mov [bx],ax
功能:bx中存放的数据作为一个偏移地址EA,段地址SA默认在ds中,将ax中的数据送入内存SA:EA处,
即 ((dx)*16 + (bx)) = (ax);

loop 指令
loop指令的格式:loop 标号, cpu执行loop指令的时候,要进行两部操作:
①(cx) = (cx)-1;
②判断cx中的值,不为零则转至标号处执行程序,如果为零,则向下执行
所以通常情况下:我们用loop指令来实现循环功能,cx中存放循环次数
用cx和loop指令相配合实现循环功能的基本框架:
mov cx,循环次数
s: …
   循环执行的程序段,
   …
   loop s
用cx和loop指令的实现循环的3个要点:
1、cx中存放循环的次数
2、loop指令中的标号所标识地址要在前面
3、要循环执行的程序段,要写在标号和loop指令的中间

 loop和[bx]的联合应用
在实际编程过程中,可能遇到的不是简单的数据循环操作,可能会遇到用一种方法处理地址连续的内存

单元的数据问题,这时我们要用到循环操作来解决这类问题,同事我们必须能够在每次循环的时候按照

同一种方法来改变要访问的内存单元的地址,这个时候我们可以循环的使用mov ax,[bx]指令来改变内存

单元,而不需要重新写新的指令,仅通过改变bx中的数值,来改变指令访问的内存单元。

段前缀
指令"mov ax,[bx]"中,内存单元的偏移地址有bx给出,而段地址是默认的ds中,我们可以在访问内存单

元的指令中,显示的给出内存单元的段地址所在的段寄存器
如 mov ax, ds:[bx];
将一个内存单元的内容送入ax,这个内存单元的长度为2个字节,存放一个字,偏移地址在bx中,段地址

在ds中。
包含多个段的程序
在操作系统的环境中,合法的通过操作系统取得的空间都是安全的,因为操作系统不会让一个程序所用

的空间和其他程序以及系统自己的空间相冲突。在操作系统允许的情况下,程序可以取得任意容量的空

间。通过以下两种途径:
1、加载程序的时候为程序分配
2、程序在执行过程中向系统申请。
我们若要一个程序在被加载的时候取得所需的空间,则必须要在源程序中做出说明。我们通过在源程序

中定义段来进行内存空间的获取。
上面是从内存空间来获取的角度上,谈定义段的问题,我们再从程序规划的角度来谈定义段的问题,大

多数有用的程序,都要处理数据,受用栈空间,当然也都必须有指令,为了程序设计上的清晰和方便,

我们一般也定义不同的段来存放它们,

从规范的角度来讲,我们是不能自己随便决定哪段空间可以使用的,应该让系统来为我们分配。我们可

以在程序中,定义我们希望处理的数据,这些数据就会被编译、连接程序作为程序的一部分写到可执行

文件中,当可执行文件中的程序被加载入内存时,这些数据也同时被加载入内存中,如此同时,我们要

处理的数据也就获取到了存储空间。

对于前面的程序把数据、栈、代码都放在同一个段里面会引出2个问题:
1、显得程序混乱
2、如果数据、代码、栈的总共大小超过64K(8086机制的cpu中一个段最多只有64K,16位)。

所以我们必须考虑到用不同的段来存放数据、栈和代码
当然,当我们定义了代码段、数据段、栈段等不同段后,cpu并不会去执行代码段,处理数据段,将栈段

真的当成栈来处理,这只是为了使我们的程序便于阅读而已,若要cpu按照我们的安排行事,就要用机器

指令控制它们,源程序中汇编指令是cpu要执行的内容。
我们在源程序的最后"end star"来说明源程序的入口,这个入口将被写入可执行文件的描述信息,可执

行文件被加载入内存后,cpu的CS:IP被设置指向这个入口,从而开始执行程序中的第一条指令,标

号"start"在"code"段中,这样cpu就将code段中的内容当着指令来执行了,我们在code段中,使用指令

:mov ax, stack
  mov ss, ax
  mov sp, 16
设置ss指向stack,设置ss:sp指向stack:16,cpu执行这些指令后,将把stack段当成栈来使用了。
cpu若要访问data段中的数据,则可以让ds指向data段,用其他寄存器(bx)来存放data段中数据的偏移地

址。

总之:
cpu到底如何处理我们定义的段中的内容,是当作指令执行,当作数据访问,还是当作栈空间。完全是靠

程序中具体的汇编指令,和汇编指令对CS:IP、 SS:SP, DS等寄存器的设置来决定的。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
提供的源码资源涵盖了Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 适合毕业设计、课程设计作业。这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。 所有源码均经过严格测试,可以直接运行,可以放心下载使用。有任何使用问题欢迎随时与博主沟通,第一时间进行解答!
提供的源码资源涵盖了小程序应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 适合毕业设计、课程设计作业。这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。 所有源码均经过严格测试,可以直接运行,可以放心下载使用。有任何使用问题欢迎随时与博主沟通,第一时间进行解答!
提供的源码资源涵盖了Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 适合毕业设计、课程设计作业。这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。 所有源码均经过严格测试,可以直接运行,可以放心下载使用。有任何使用问题欢迎随时与博主沟通,第一时间进行解答!
提供的源码资源涵盖了Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 适合毕业设计、课程设计作业。这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。 所有源码均经过严格测试,可以直接运行,可以放心下载使用。有任何使用问题欢迎随时与博主沟通,第一时间进行解答!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

max_min_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值