您当前的位置:首页>论文资料>C 语言中数组指针在汇编语言寻址方式中的应用

C 语言中数组指针在汇编语言寻址方式中的应用

资料类别:论文资料

文档格式:PDF电子版

文件大小:2.53 MB

资料语言:中文

更新时间:2024-12-20 15:11:34



推荐标签:

内容简介

C 语言中数组指针在汇编语言寻址方式中的应用 款事热来与变用
学术论坛
不是
马耀锋李红丽
(中州大学信息工程学院河南郑州450044)
摘要:国高级语言不需要熟态低层软件和硬件知识,所以学生有很大的学习兴趣,数组指针是C语言中的重点内容,学生们部能熟练掌握而汇端语言因与硬件繁密相连,所以学生学习兴趣不大。为了更好的培养学生的学习兴趣,提高教学效率,本文通过分析数组指针与寻证方式的异同,提出了如何把寻延方式转化成数组指针来学习的方法。
关键调:数组指针寻延方式中图分类号:TP312.1-4
1、引言
文献标识码:A
文章编号:1007-9416(2012)04-0231-02
果一个指针变量存放的是另一个指针变量的地址,则称这个指针变
《汇编语言程序设计》是高等院校计算机及相近专业学生必修的专业基础课程之一,它不仅是《嵌入式开发》、《操作系统》《单片机》、接口技术>等基础课程的先修课程,而且也十分有助于学生系统掌握计算机基础知识和提高编程能力"。作为一门直接控制计算机硬件和CDu结合最为紧密的一门语言,执行起来时最为有效和速度最快的,但是区别于高级语言他又自身的弱点,比如可读性差,需要更深人地熟悉硬件结构,编程和调试过程繁项,而且没有便捷的开发调试环境。在讲授《汇编语言程序设计》过程中,如果能够结合或者转化为高级语言如C语言的内容那学生接受和学习起来就能
增加不少的兴趣,提高学生的学习效率。 2、C语言数组和指针的使用
2.1数组
数组是在程序设计中为了处理方便,把具有相同类型的若干变量按有序的形式组织起来的一种形式,这些按序排列的同类数据元素的集合称为数组在C语言中,数组属于构造数据类型。一个数组可以分解为多个数组元素,这些数组元素可以是基本数据类型或是构造类型。因在汇编语言中主要把指令系统中的寻址方式转换为一维数组或指针,所以下面就简要介绍一下一维数组和指针的特点
定义一维数组的格式为:
类型说明符数组名[繁型常量表达式].,
例如;int a[10],b[5]; 说明:
(1)它表示定义了两个一维数组,一个数组名为a,另一个数组名为b,数组名是按照"标识符"的规则构成的。(2)a数组含有10个数组元素,即a[0].a[1],a[2]、",a[9];b数组含有5个数组元素,即b[0]、 b[1],b[2],b[3]和b[4],注意,不能使用a[10]和b[5],否则即出现数组超界现象,并且需要注意的是数组的小标是从0开始的。(3)类型说明符nt说明a数组和b数组中的每个元素均占2个字节,只能存放型数据。(4)整型常量表达式可以是整型常量或符号常量。最常见的是整型常量。不允许为变量。(5)C编译程序(如TurboC)为a数组在内存中分配了10个连续的数组单元(共占20个字节),为b数组在内存中分配了5个连续的数组单元(共占10个字节)。(6)C编译程序还指定数组名a为数组的首地址,即a与&a0等价,指定数组名b为b数组的首地址,即b与&b[0]等价。
2.2指针
指针是一个特殊的变量,它里面存储的数值被解释成为内存里的一个地址。计算机内存中的每个内存单元,都有相应的内存地址。在程序中对变量进行存取操作有两种方式,一种叫“直接存取”,就是指在程序中对变量进行存取操作时是按变量的地址来存取的方法,另一种叫“间接存取”,就是通过另外定义一个指针变量来保存需要访问的数据的地址(3)。
(1)指向简单变量的指针。(2)指向数组的指针,指针所指的数组既可以是一维数组,也可是多维数组。(3)指针数组。数组的元素值为指针,指针数组是一组有序的指针集合。(4)指向指针的指针。如
量为指向指针的指针。(5)指向函数的指针。在C语言中,一个函数总是占用一段连续的内存区,面函数名就是该函数所占内存区的首地址。我们可以把函数的这个首地址账予一个指针变量,通过指针变量就可以找到并调用这个函数。
3、数组和指针在汇编语言指令系统导址方式中的应用和转换
3.1汇编语言指今系统的寻址方式()
(1)立即寻址。(2)寄存器寻址。(3)直接寻址(4)寄存器间接寻址:指令中指出一个基址奇存器BX.BP或变址寄存器SI,DI,并以其内容做为操作数的有效地址,ADDAX,[BP)物理地址=10H×(SS) +(BP),(5)寄存器相对寻址:指令中指出一个基址或变址寄存器,同时给出一个位移量,寄存器内容与位移之和做为操作数的有效地址。MOVAX.[DI+100H],有效地址EA=(DI)+100H,为物理地址 =10H×(DS)+(DI)+100H。(6)基址变址寻址:指令同时指出一个基址青存器和一个变址寄存器,两寄存器内容的和为操作数的有效地址。ADDAX.[BXJ[SI,有效地址EA=(BX)+(SI),物理地址=10H ×(DS)+(BX)+(SI)。(7)相对基址变址寻址:指令中给出一个基址寄存器一个变址寄存器和一个位移量。两个寄存器的内容及位移量三者之和做为操作数的有效地址。例:MOVDX,100H[BX][SI,物理地址=10H × (DS)+(BX)+(SI)+100H.
3.2间接寻址方式转换为数组或指针
3.2.1寄存器闲接导址转成一催数组来理解
形式:ADDAX.[BP物理地址=I0H×(SS)+(BP)我们就可以认为,在此定义了一个数组SS,即SS中的值为这个数组的首地址,当然我们知道这个数组的最大元素个数为64K个。刚才读到偏移量和数组下标都是从0开始的,所以偏移量BP就可以认为是这个数组的一个下标,在这寻址操作数的时候是要把这个下标作为一个内存地址,其所存储的内容就是我们所要找的操作数。
在数组中形如I=A[10]就是把A数组的第10个元素赋值给I,在 ADDAX,[BP]语句中BP也有一个中括号,只是在这个地方省略了数组名,并且也是把SS数组的第BP个元素赋值给AX
所以无论从形式还是从本质上就把寄存器间接寻址转换成了一个一维数组,
3.2.2寄存器间接普址转成指针来建解
因为指针和数组有时间是可以相互转换的,所以在这也可以转换成指针来理解。
形式:ADD AX,[BP)物理地址=10H×(SS)+(BP)。BP在汇编语言中本身就定义为一个基址"指针"用来和堆栈段配对使用,其中存放的数据是堆栈段的某一个存储单元地址,这就和指针响合了,前面说到指针变量名与地址闻具有一一对应关系,在存取操作时是按变量的地址来进行的一种“间接存取"的方法。那么这个地方我们可以认为 BP是一个指向堆栈段中某一个存储单元的C语言意义上的指针。
这样就把寄存器间接寻证方式可以理解成C语言意义上的指针。对于寄存器相对寻址,基址变址寻址、基址变址寻址我们也都
··下转第232页
9 23
上一章:数据挖掘技术在教学管理系统中的应用 下一章:机器学习算法在数据挖掘中的应用

相关文章

C语言和MATLAB程序设计在电力谐波电流检测方法仿真中的应用 浅谈C语言在单片机中的运用 MATLAB语言在建筑抗震工程中的应用 多粒度语言计算及其在模糊决策中的应用 Shell脚本语言在AIX服务器中的应用 AutoCAD 及 AutoLisp 语言在规划建筑红线放线测量中的应用 基于XML语言编程扩展人机画面在数控机床中的应用 UML标准建模语言在自动测试系统通用化设计中的应用