CASL 终极问题

simpleonly 2003-08-30 10:15:11
这几天看CASL,越来越发现一些基本的东西很重要,可惜我以前学的时候没把这些弄明白,现在总结出来请大家给指教指教!

1.PUSH是入栈操作,可在程序中为什么许多已经入栈的东西还在参与运算呢?
如:
LD GR1,A
PUSH 0,GR1
LD GR1,B
PUSH 0,GR1
LEA GR1,C
PUSH 0,GR1

2.逻辑移位和算术移位有什么区别,是不是逻辑的并不改变操作数的值呢,那在移位操作中结果又放到了操作数中,这又怎么讲呢?
比如:
PUSH 0,GR2
PUSH 0,GR3
LD GR0,0,GR1
LEA GR2,0
ST GR2,LOW
LD GR2,1,GR1
LEA GR2,-1,GR2
ST GR2,UP
ADD GR2,LOW
SRL GR2,1
LOW DS 1 30
UP DS 1
3.有效地址E=ADR[+(XR)(mod2^16)里的模运算怎么回事呀,我一直就没见到算.
LEA GR0,1,GR2
LD GR0,0,GR1
ST GR0,NCH,GR2
ADD GR2,NCH,GR3
在这四个运算中是不是只有 LD 中的后两个数是地址方面的运算,其他的都是数值直接运算呢?

终于写完了,诸位高人,如果你觉得这些东西太多的话,请你回答一下其中某个问题也可以,本人十分感谢!
...全文
30 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
fanxs0933 2003-09-01
  • 打赏
  • 举报
回复
chinalin0(永远的天堂)的ADD语句是不是有点问题啊?

ADD GR2,NCH,GR3 ;(GR2)+(NCH+GR3)->GR3+NCH // NCH+GR3 为内存地址

不是,应该是(GR2)+(NCH+(GR3))->GR2, GR3此处是做变址寄存器用
bobble 2003-09-01
  • 打赏
  • 举报
回复
知道了
simpleonly 2003-08-31
  • 打赏
  • 举报
回复
chinalin0(永远的天堂)的ADD语句是不是有点问题啊?

ADD GR2,NCH,GR3 ;(GR2)+(NCH+GR3)->GR3+NCH // NCH+GR3 为内存地址
pldchild 2003-08-31
  • 打赏
  • 举报
回复
有效地址E=ADR+(XR)(mod2^16)意思是如果ADR+(XR)的值如果超过了16位二进制数,只取其超出部分,即第17位自动舍去。(因程序计数器PC硬件只有16位)
linkeehuang 2003-08-31
  • 打赏
  • 举报
回复
1:压栈操作后,GR4中的内容会改变,通常他们参与运算的时候都要有GR4的辅助。譬如上题,实现(A)+(B)->c,则可以如下
LD GR0,3,GR4 ; (A)->GR0
ADD GR0,2,GR4 ; (GR0)+(B)->GR0
ST GR0,1,GR4 ; (GR0)->C

3:我的感觉是寻址为 2^16,故要取模,否则可能会溢出。

chinalin0 2003-08-30
  • 打赏
  • 举报
回复
补充一点,
PUSH是入栈操作,可在程序中为什么许多已经入栈的东西还在参与运算呢?
显然,入栈的东西并没有参与运算,被后来的所黑覆盖.
chinalin0 2003-08-30
  • 打赏
  • 举报
回复
第一个部题中,
LD GR1,A 将A中的内容传入GR1中,
PUSH 0,GR1 将GR1中的内容进栈;此两句的作用是将A中的内容入栈.
LD GR1,B 将B中的内容传入GR1中,
PUSH 0,GR1 将GR1中的内容进栈;此两句的作用是将B中的内容入栈
LEA GR1,C 将C的地址传入GR1中,
PUSH 0,GR1 将GR1中的内容进栈此两句的作用是将C的地址入栈
此段代码的作用是将参数压栈,应该是函数调用的前奏.
chinalin0 2003-08-30
  • 打赏
  • 举报
回复
上面有个错误,左移和右移应为11位,
不好意思,各位见谅.
chinalin0 2003-08-30
  • 打赏
  • 举报
回复
3.有效地址E=ADR[+(XR)(mod2^16)里的模运算怎么回事呀,我一直就没见到算.
此式可能有误,如为下式,我可以给你说明:
E=ADR+[(XR)mod(2^16)] mod是一个最余运算.如:3mod2=1;5mod4=1;9mod3=0;
2*16=32,32是2的5次方,在2进制中,一个数mod32就是保留这个数的最后5位,可以通过逻辑左移15位后,再右移15位来实现.
LEA GR0,1,GR2 ;(GR2)+1->GR1 //GR2为寄存器
LD GR0,0,GR1 ;(0+GR1)->GR0 //0+GR1 为内存地址.
ST GR0,NCH,GR2 ;(GR0)->NCH+GR2 //NCH+GR2 为内存地址.
ADD GR2,NCH,GR3 ;(GR2)+(NCH+GR3)->GR3 // NCH+GR2 为内存地址
pldchild 2003-08-30
  • 打赏
  • 举报
回复
移位操作就是被操作数乘(或除)以2的n次方。逻辑移位对无符号数有效,算术移位对带符号数有效。
文飞扬 2003-08-30
  • 打赏
  • 举报
回复
http://expert.csdn.net/Expert/topic/2204/2204708.xml?temp=.4225733
QQ:2105629
x014 2003-08-30
  • 打赏
  • 举报
回复
2。算术移位。
左移。符号位不变,右补0。
右移。符号位不变,左补与符号位同。
逻辑移位。
符号位一起移。

2,947

社区成员

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

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