汇编语言段和RSEG用法
RSEG是段选择指令,要想明白它的意思就要了解段的意思。
段是程序代码或数据对象的存储单位。程序代码放到代码段,数据对象放到数据段。段分两种,一是绝对段,一是再定位段。绝对段在汇编语言中指定,在用L51联接的时候,地址不会改变。用于如访问一个固定存储器的i/o,或提供中断向量的入口地址。而再定位段的地址是浮动的。它的地址有L51对程序模块连接时决定,C51对源程序编译所产生的段都是再定位段,它都有段名和存储类型。绝对段没有段名。
说了这么多,大家可能还是不明白段是什么意思。别急,接着往下看。
例如,你写用C写了一个函数 void test_fun(void) { …} , 存在test.c中,用编译器编译以后. SRC FILE中看到:
?PR?test_fun?TEST SEGMENT CODE //(函数放到代码段中)
写这个函数体的时候: RSEG ?PR?test_fun?TEST //选择已定位的代码段为当前段 test_fun:
……//代码
所以函数的表达模式是这样: ?PR?函数名?文件名
而函数名又分: 1:无参函数 ?PR?函数名?文件名
2:有参函数 ?PR?_函数名?文件名
3:再入函数 ?PR?_?函数名?文件名
又例如 你定义了全局变量 unsigned char data temp1,temp2; unsigned char xdata temp3; 在test.c文件中,编译器会为每个文件分0到多个全局数据段,相同类型的全局变量被存到同一段中。所以上面会编译成如下:
RSEG ? DT? TEST
. temp1: DS 1
. temp2: DS 1
;
RSEG ?XD? TEST
. temp3: DS 1
//下面是各个类型的数据全局段的表示
?CO? 文件名 //常数段
?XD? FILE_NAME //XDATA 数据段
?DT? FILE_NAME //DATA 数据段
?ID? FILE_NAME //IDATA…..
?BI? FILE_NAME // BIT …..
?BA? FILE_NAME //BDATA….
?PD? FILE_NAME //PDATA…..
看到这里大家应该明白段的意思了吧。也许你会问,这有什么作用哪?它就是用在当你需要用汇编语言写一部份程序的时候,把汇编写的函数放在这个问件中,改名xxx.a51,按上面的规则写。
编译就好。
既然知道了段的意思,现在我们回到SEG的用法上来。
A51中有两种段选择指令 : 再定位段选择指令 和 绝对段选择指令. 它们用来选择当前段是再定位段还是绝对段。使用不同的段选择指令,将使程序定位在不同的地址空间之内。
1: 再定位段的选择指令是: RSEG 段名
它用来选择一个在前面已经定义过的再定位段作为当前段。
用法就像我们上面的例子,先申明了一个函数段,后面写这个函数段。
2: 绝对段选择指令
CSEG [AT 绝对地址表达式] //绝对代码段
DSEG [AT 绝对地址表达式] //内部绝对数据段
XSEG [AT 绝对地址表达式] //外部绝对数据段
ISEG [AT 绝对地址表达式] //内部间接寻址绝对数据段
BSEG [AT 绝对地址表达式] //绝对位寻址段
它们的用法我举一个例子:
例如我们写串口中断程序,起始地址是0x23.就这样写
CSEG AT 0X23
LJMP serialISR
RSEG ?PR?serialISR?TEST
. serialISR:
汇编语言段和RSEG用法的更多相关文章
- 段和RSEG用法
RSEG是段选择指令,要想明白它的意思就要了解段的意思. 段是程序代码或数据对象的存储单位.程序代码放到代码段,数据对象放到数据段.段分两种,一是绝对段,一是再定位段.绝对段在汇编语言中指定,在用L5 ...
- RSEG用法和汇编问号的涵义
RSEG是段选择指令,要想明白它的意思就要了解段的意思.段是程序代码或数据对象的存储单位.程序代码放到代码段,数据对象放到数据段.段分两种,一是绝对段,一是再定位段.绝对段在汇编语言中指定,在用L51 ...
- call,apply,bind的用法
关于call,apply,bind这三个函数的用法,是学习javascript这门语言无法越过的知识点.下边我就来好好总结一下它们三者各自的用法,及常见的应用场景. 首先看call这个函数,可以理解成 ...
- strace命令简单用法
strace可以显示一个程序经历的系统调用,接收到的信号等信息. 用法: 1.strace -ff -o output programName 将程序programName的写入output文件中,- ...
- javascript中call,apply,bind的用法对比分析
这篇文章主要给大家对比分析了javascript中call,apply,bind三个函数的用法,非常的详细,这里推荐给小伙伴们. 关于call,apply,bind这三个函数的用法,是学习java ...
- memset 导致的一个段错误
原型: void *memset(void *s, int c, size_t n); 解释: memset :是 逐字节 拷贝,即n是指整个变量所占字节,在用于数组时一定要注意n不一定是 数组元素. ...
- Keil C51中变量和函数的绝对地址定位问题
1.变量绝对地址定位 1) 在定义变量时使用 _at_ 关键字加上地址就可. unsigned char idata myvar _at_ 0x40; 把变量 myvar 定义在 idata 的 0 ...
- 源码编译安装nginx
安装依赖软件 1.安装编译工具gcc gcc是一个开源编译器集合,用于处理各种各样的语言:C.C++.Java.Ada等,在linux世界中是最通用的编译器,支持大量处理器:x86.AMD64.Pow ...
- OVER 分析函数
over不能单独使用,要和分析函数:rank(),dense_rank(),row_number(),ntile ,sum(),avg()等一起使用. rank,dense_rank,row_numb ...
随机推荐
- 20155327《Java程序设计》第八周学习总结
20155327<Java程序设计>第八周学习总结 教材学习内容总结 第12章 进程与线程 进程的完成过程:代码加载.执行至执行完毕 线程:一个进程由多个线程组成. 线程的完成过程:自身的 ...
- wpf 中Listbox获取选中的值
布局代码: <ListBox Name="listBox1" Width="120" Height="52" SelectionC ...
- cjoj P1435 - 【模板题 USACO】AC自动机 && 洛谷 P3796 【模板】AC自动机(加强版)
又打了一遍AC自动稽. 海星. 好像是第一次打trie图,很久以前就听闻这个思想了.OrzYYB~ // It is made by XZZ #include<cstdio> #inclu ...
- [webpack]-webpack超级详细搭建实用前端环境
前言: webpack 超级实用前端环境搭建 一.我们日常使用的前端开发环境应该是怎样的? 构建我们需要发布的html,css ,js 文件 使用css 预处理器来编写样式 处理压缩图片 使用Babl ...
- SpringBoot日记——SpringMvc自动配置与扩展篇
为了让SpringBoot保持对SpringMVC的全面支持和扩展,而且还要维持SpringBoot不写xml配置的优势,我们需要添加一些简单的配置类即可实现: 通常我们使用的最多的注解是: @Bea ...
- 【日常训练】Help Chef Gerasim(Codeforces 99B)
题意与分析 需要注意非法情况.换言之,合法情况其实很苛刻. 代码 /* * ACM Code => cf99b.java * Written by Sam X * Date: 三月, 19, 2 ...
- xshell提示评估过期怎么办?
刚刚打开xshell准备连上虚拟机写代码,结果提示评估过期,真的很气,在百度上找了好久才找到解决办法,现在分享给大家:. 1.复制这个链接在浏览器打开https://www.netsarang.com ...
- c语言数字图像处理(九):边缘检测
背景知识 边缘像素是图像中灰度突变的像素,而边缘是连接边缘像素的集合.边缘检测是设计用来检测边缘像素的局部图像处理方法. 孤立点检测 使用<https://www.cnblogs.com/Gol ...
- C#多线程的几种使用
参见链接 :http://www.jb51.net/article/46234.htm
- 电梯调度 结对项目开发(郭林林&胡潇丹)
(一)需求分析: 上升,下降,开门,关门: 超过负载以后发出警报,下去乘客: 电梯出现故障后,电梯停止: 电梯楼层的输入框可以同时指定所要到的楼层,也是楼层的显示框: 电梯同时记录多个状态,即为到达多 ...