casl中LEA指令与LD指令的区别

huijiahao 2003-10-10 09:38:43
LEA GR0,1,GR1 LD GRO,1,GR1的作用不是相同的吗,都是把GR1中的内容加1送往GRO,请问各位大侠,LEA指令与LD指令有何不同
...全文
208 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
慕容霜雪 2003-10-10
  • 打赏
  • 举报
回复
lea 可以有好多操作。可以传有效地址。可以实现自加自减。
ld 只能实现内容装载。没有别的用处。
lea gr1,0,gr1
ld gr1,0,gr1
要看gr1里是什么东西。如果地址的话那
lea
ld
就不一样。如果是数据。二者在内容上是没有区别的。但在背后操作上是有区别的。正如飞狼说的那样
warren248 2003-10-10
  • 打赏
  • 举报
回复
我是这样理解的:lea 一般直接取地址,ld一般是取内容(地址的值)。且lea会修改fr的值。
wwwsoftware 2003-10-10
  • 打赏
  • 举报
回复
非狼提到的执行LEA后 同时修改标志位(FR的值)很重要,
经常可以看到先执行LD语句,再执行LEA的,就是为了影
响标志位。很多时候利用这一特点,用LEA来修改循环变
量,然后进行判断后执行JPZ,JNE,JMI等跳转指令。
戒之在得 2003-10-10
  • 打赏
  • 举报
回复
清华的书我没看过,应该是书写的标准语法吧,在标准中lea是三位操作符吧?(有些记不清了)
RPhx 2003-10-10
  • 打赏
  • 举报
回复
push adr [grx];
功能:E=adr+(GRX);-1=》GR4;E=>((GR4))
如:(GR4)=200,(GR1)=300
PUSH 10,GR1
执行后:
(GR4)=199;
(199)=310;
wwwsoftware 2003-10-10
  • 打赏
  • 举报
回复
回复znwang3(牛牛) 的问题
(1)你前面对LEA及LD的用法描述是对的
(2)原文:
清华出的那本教程同步辅导,第467面上面有三行(GR1与GR2的内容互换):
LEA GR3, 0, GR2 ;(GR2) -> GR3
LEA GR2, 0, GR1 ;(GR1) -> GR2
LEA GR1, 0, GR3 ;(GR3) -> GR1, 即(GR2) -> GR1
中间为什么要加个 “0”呀,把0去掉不行吗?

回复:LEA的语法是 LEA GR,ADR[,(XR)] ,可以看出,必须输入ADR值,此时
又不想变换所获得的值,所以必须设置ADR为0,否则语法出错。

(3)原文:
书的第474面,有两个进栈操作:
PUSH 0, GR1
PUSH 0, GR2
这里的“0”又是用来做什么的。

回复:道理同上,PUSH的语法是PUSH GR,ADR[,(XR)] ,必须输入ADR值。当ADR为0时,
可以起到把GR1或GR2的内容压入堆栈。如ADR不为0,压入堆栈的就不会是GR1或GR2的内容了。
janswl 2003-10-10
  • 打赏
  • 举报
回复
LD GRI,adr[,GRK]
(adr + (GRK)) -> GRI
将所指内存的内容装入到寄存器中



LEA GRI,adr[,GRK]
adr + (GRK) -> GRI
将有效地址装入寄存器中并产生标志位(FR的值)
戒之在得 2003-10-10
  • 打赏
  • 举报
回复
是我写错了,呵呵,ld是把地址gr1加1中的数值赋给gr0
envoyofdis 2003-10-10
  • 打赏
  • 举报
回复
不对,
我觉得是
lea是把 gr1的值加1直接赋值给gr0,ld是把gr1指向地址的下一个地址中的数值赋给gr0
wwwsoftware 2003-10-10
  • 打赏
  • 举报
回复
修改一下,刚才把“则执行 LEA GR0,1,GR1后,GR0的值为1001H”输成
“则执行 LEA GR0,1,GR1后,GR1的值为1001H”

LEA GRO,1,GR1 是把 GR1中的值加1直接赋值给GR0,可以实现数值自加自减等功能;
如开始时间GR1的取值为1000H,则执行 LEA GR0,1,GR1后,GR0的值为1001H;

LD GRO,1,GR1 是把 GR1中的值加1作为地址,再把该地址中的值赋给GRO。一般开始
时GR1是指向某个需要进行处理的数据区的首地址,通过加1后实现下一个地址
的取值。如开始时GR1中的值为1000H,则执行 LD GR0,1,GR1后,GR0的值为
地址1001H中的值,而不是1001H。
wwwsoftware 2003-10-10
  • 打赏
  • 举报
回复
LEA GRO,1,GR1 是把 GR1中的值加1直接赋值给GR0,可以实现数值自加自减等功能;
如开始时间GR1的取值为1000H,则执行 LEA GRO,1,GR1后,GR1的值为1001H;

LD GRO,1,GR1 是把 GR1中的值加1作为地址,再把该地址中的值赋给GRO。一般开始
时GR1是指向某个需要进行处理的数据区的首地址,通过加1后实现下一个地址
的取值。如开始时GR1中的值为1000H,则执行 LD GR0,1,GR1后,GR0的值为
地址1001H中的值,而不是1001H。
znwang3 2003-10-10
  • 打赏
  • 举报
回复
再问:

LEA GR0, 1, GR1 ; 是不是:1+(GR1)->GR0 ,我想是的

但是:

LD GR0, 1, GR1 ;是 1+(GR1)->GR0 , 还是 ( 1+(GR1))->GR0 呢?应该是后者!

清华出的那本教程同步辅导,第467面上面有三行(GR1与GR2的内容互换):
LEA GR3, 0, GR2 ;(GR2) -> GR3
LEA GR2, 0, GR1 ;(GR1) -> GR2
LEA GR1, 0, GR3 ;(GR3) -> GR1, 即(GR2) -> GR1

中间为什么要加个 “0”呀,把0去掉不行吗?

书的第474面,有两个进栈操作:
PUSH 0, GR1
PUSH 0, GR2
这里的“0”又是用来做什么的。
znwang3 2003-10-10
  • 打赏
  • 举报
回复
我也不太懂,期待高手作答!
戒之在得 2003-10-10
  • 打赏
  • 举报
回复
不对,lea是把 gr1的值加1直接赋值给gr0,ld是把地址gr1中的数值加1赋给gr0
yhcyzc 2003-10-10
  • 打赏
  • 举报
回复
LEA 操作的寄存器中的内容
LD 操作的是内存单元的内容!! [1+(GR1)]->GR0
znwang3 2003-10-10
  • 打赏
  • 举报
回复
看了各位的讲解,真是既简单明了有很直观,真心谢谢各位!

2,959

社区成员

发帖
与我相关
我的任务
社区描述
就计算机等级考试、软件初、中、高级不同级别资格考试相关话题交流经验,共享资源。
c1认证c4javac4前端 技术论坛(原bbs)
社区管理员
  • 软件水平考试社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧