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

huijiahao 2003-10-10 09:38:43
LEA GR0,1,GR1 LD GRO,1,GR1的作用不是相同的吗,都是把GR1中的内容加1送往GRO,请问各位大侠,LEA指令与LD指令有何不同
...全文
126 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
  • 打赏
  • 举报
回复
看了各位的讲解,真是既简单明了有很直观,真心谢谢各位!
CASL引入国内以后作为国计算机软件专业技术资格和水平考试高级程序员级考试内容之一。使用虚拟的计算机目的为的是一个公平的考试环境,毕竟如果让每天和MC680X0打交道的朋友去和写PC驱动的朋友一起考i80X86汇编显然是不公平的。 CASL达到这一目的的同时却带来了一个麻烦:CASL程序无法在常见的PC或者其他任何计算机上运行。 我们有三条常见选择: 1)汇编器,将Casl汇编程序汇编成诸如80X86指令的程序,在PC上运行 2)解释器,解释执行每一条指令,有点像解释型高级语言,但是来的简单一些 3)忘记CASL,忘记高程考试 ;;;;-) 在选择了第二种方案以后我们开始了这个软件...... Nasl的设计主要目标便是简单易用,事实上在我能找到的所有CASL解释器没有一个能很快上手运行起来的,当然这不包括Nasl本身。由于Comet是一个虚拟计算机,诸如复旦大学计算机科学系所设计的CASL汇编器的设计只能给使用者带来不必要的麻烦。鉴于它只能在Pure DOS下运行,Nasl诞生了,编写一个开放的人人可以得到的方便的CASL解释器是编写Nasl的初衷之一。 Nasl能对输入的CASL汇编程序解释运行,以此可以观察各个寄存器以及内存的变化情况,使得您可以熟悉CASL汇编并对汇编语言程序设计的思想有所了解,帮助通过高程考试。Nasl支持CASL汇编文件的编辑,但是请不要将它视作一个";;;开发环境";;;,CASL和Nasl都不值得您去那么做。 最后祝所有努力学习的朋友好运!

2,948

社区成员

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

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