易码技术论坛

 找回密码
 加入易码
搜索
查看: 178312|回复: 3

[求助]关于标志寄存器P和堆栈指针S

[复制链接]
发表于 2005-3-12 10:49:00 | 显示全部楼层
1.标志寄存器
第五位空着不用,这是在硬件设计的时候就规定好了的
第三位,是D位,如果它置1,表示以后进行的加法减法运算都是十进制(DEC)运算.直到重新变成0为止.
第四位,是B位.系统响应INT中断时会将此位置1
2.堆栈
"栈"是一段连续的存储空间.用来暂时存储一些数据.比如说调用子程序时,要实现在调用后返回主程序的功能,就要在调用子程序之前把要返回的目的地址保存起来.保存在哪?就放在栈里.所以可以把"栈"理解成很多个全局的临时变量,(免费用的哦!)
刚才说了,栈是一段连续的存储空间.文曲星里的堆栈定义在$0100~$01FF.总共256个字节.但文曲星是个机器,要实现数据的临时存储,它是要用某种规则的,要不然我要存一个字节的数据,它放在这256个字节的哪个里面好呢?为什么要说这个?这就是堆栈指针的用处.堆栈指针S,它的功能就是指向当前的"栈顶位置". 栈顶??什么是栈顶?别急.这256个字节可以看成是一段竖着的空间,最上面是$0100,最下面是$01FF.在星星初始化的时候,S的值被初始化成的了FF,那么它指向的就是$01FF这个地方.如果这时候我要存一个字节,比如00,那么系统就会把00放到S指向的空间,也就是$01FF里.然后呢,还没完,S这时候会自动减一,也就是变成了FE.当存的数很多的时候栈里面的数据就好像被"摞"起来了一样,最底边的地方(也就是$01FF)就叫做"栈底".栈顶可不是$0100,栈顶其实就是S所指向的地方.上面所讲,把00存入S指向的$01FF时,S自动减一,那栈顶就变成了$01FE.     上面是把数据保存起来的过程,这个过程叫做"进栈",也就是大家说的把数据"压入堆栈".下面介绍怎么样让数据"出栈",也就是从栈里把刚存的数据取出来.注意到没?我说的是把"刚"存入的数据取出来,意思是最后一个进栈的数据取出来.有些人问了,我先存了个5,又存了个6,现在想把先存的数据5取出来,行不行啊?不行.因为机器就是机器,它只知道往S指的地方去找,不管你先存哪个,它不会照顾你的意思.你让它先取5,那取完5之后S是该指向6了呢还是指向比5更早的呢?这不就乱了套啦?所以呢,堆栈有个规律,就是大家常说的"先进后出,后进先出",也就是"先进者后出,后进者先出".在数据出栈时,S先自动加一,然后读取它所指向的数据送到指令指明的地方去.这就是出栈过程.
上面就是栈的操作方法.具体栈到底有什么功能?无非就一点:暂时存放数据.
3.指令LSR的功能
先不说LSR,先说ASL.它俩介相反的过程.
假设我这里有个数,是十进制的200,那它用二进制表示出来就是11001000.我现在要算200*2,怎么算?很简单,左移一位后面补0就可以喽.但是文曲星使用的是8位存储器,左移一位之后变成了10010000,换算一下,咦,怎么才等于144?比原来还小?原因就是在左移的时候,最高位的1被挤掉了.我们口算得到,200*2=400,二进制就是11001000*10=110010000,看到了没?这个数字是9位二进制的,一个字节不够用的.(晕!这个在看到400时就知道了).两个字节的时候,200的表示方法是 00000000 11001000,使用ASL使低字节(也就是低八位)左移一位之后,1被挤出,其实挤出是挤到了标志寄存器的C位了,这时低字节后面也自动补了个0(凑够八位).那么我们现在要把高字节也左移一位,而且后面不要补0,而应该把标志寄存器的C位补上,怎么办?这时就要用上另一个左移位的指令,有请它隆重登场!它就是小名鼎鼎的ROL.它的功能是把A左移一位,而且C位补在最后.那它也会把数据的最高位挤出去呀!别怕,又挤到C里面了.这就是"循环左移"的意思了.那么ASL叫什么?它就叫"算术左移".你所说的LSR跟ASL是完全相反的,但原理是一模一样的,自己想一想就知道啦~ 例子自己想~~
PS.打了这么多,累死偶了
发表于 2005-3-12 13:37:00 | 显示全部楼层
建议加为 精华帖
发表于 2005-3-12 15:51:00 | 显示全部楼层
以下是引用bailiang在2005-3-12 13:37:16的发言:
建议加为 精华帖

那倒是不必了,谁给我加点积分就可以了。嘿嘿
[em05][em01][em02][em03][em04][em05][em06][em07][em08][em09][em10][em11][em12][em13][em14][em15][em16][em19][em20][em17][em22][em23][em24][em25][em26][em27][em28][em29][em30][em32][em31][em42][em45][em46][em48][em49]
 楼主| 发表于 2005-2-22 13:42:01 | 显示全部楼层 |阅读模式
标志寄存器的第五位为什么空着不用??

还有谁能解释一下第四位和第三位的作用?

还有堆栈,有什么用?

还有,LSR的作用是将寄存器A内容逻辑右移一位,什么意思?能否举例?

谢谢

您需要登录后才可以回帖 登录 | 加入易码

本版积分规则

Archiver|手机版|小黑屋|EMAX Studio

GMT+8, 2024-4-19 12:26 , Processed in 0.011746 second(s), 18 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表