汇编地址计数器$与指令指针有什么区别?
答案:3 悬赏:80 手机版
解决时间 2021-02-14 12:30
- 提问者网友:爱了却不能说
- 2021-02-14 02:03
汇编地址计数器$与指令指针有什么区别?
最佳答案
- 五星知识达人网友:鱼忧
- 2021-02-14 02:28
上面 圆球球UOB 的回答有问题哈。
这是两个不同阶段里存在的概念。编写的一个汇编程序从编写好到最后得到运行结果,至少需要以下几个阶段:编写、录入、汇编链接、运行。
其中 汇编链接 就是我们用masm汇编、link链接等软件处理的过程。
在masm汇编时才会有$,它叫地址计数器,masm用它来确定每一个变量的地址、每一条语句的地址、每一个标号的地址、每一个子程序的入口地址。 比如我们有一条指令
mov ax,a ,这里的a就会被a的地址所替代,指令会采用直接寻址方式。
而PC是在程序被执行时才有的,被称为程序计数器,CPU由他来记住当前要执行的指令的地址,当当前的指令执行时PC会指向下一条要执行的指令,这样来保证程序连续不断的执行下去,直到结束。
这是两个不同阶段里存在的概念。编写的一个汇编程序从编写好到最后得到运行结果,至少需要以下几个阶段:编写、录入、汇编链接、运行。
其中 汇编链接 就是我们用masm汇编、link链接等软件处理的过程。
在masm汇编时才会有$,它叫地址计数器,masm用它来确定每一个变量的地址、每一条语句的地址、每一个标号的地址、每一个子程序的入口地址。 比如我们有一条指令
mov ax,a ,这里的a就会被a的地址所替代,指令会采用直接寻址方式。
而PC是在程序被执行时才有的,被称为程序计数器,CPU由他来记住当前要执行的指令的地址,当当前的指令执行时PC会指向下一条要执行的指令,这样来保证程序连续不断的执行下去,直到结束。
全部回答
- 1楼网友:患得患失的劫
- 2021-02-14 03:26
当开始汇编或在每一段开始时,把地址计数器初始化为零,以后在汇编过程中,每处理一条指令,地址计数器就增加一个值,此值为该指令所需要的字节数.
而PC指针实际上是内存中的一个由段地址+段内偏移形成的物理地址中的一部分。在每个汇编程序开始之前,这个地址并不清零。
换句话说,PC是绝对地址,$是相对地址。
- 2楼网友:往事埋风中
- 2021-02-14 03:21
这完全是两码事。pc内当前指令的下一条指令的地址被存放在寄存器ip中,ip是代码段的地址指针。而$只不过是一个伪操作符,是一个取当前地址的伪操作符,也即地址运算符,它只在源程序在编译过程中为了取得当前地址时用,当编译完成后,代码中$被一个实际的地址值取代了。
例:
当我们需要汇编编译器自动计算出数组大小的时候,可能就会用到当前地址计数器$运算符了,masm用$运算符返回当前程序语句的地址偏移值,利用该数值,我们可以计算出数组的长度。
例如:
list byte 10,20,30,40,50
listlen = $ - list
则常量listlen就是数组list的长度值了。
在实际使用中一定要注意字节数组、字数组和双字数组的长度计算区别。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯