- 论坛徽章:
- 3
|
本帖最后由 cjaizss 于 2011-04-16 21:36 编辑
该轮到寄存器出场了
所有的字符都可以做为独立的寄存器名称
a,b,c,d,1,2,3,4,A,B,C...
甚至,#@!%^&*()-+='"][{}||.~`.都可以
所以有很多很多寄存器可供使用,一共可以有256个之多,足够用了。
\xa0,\xa1...,\xff都是不同的寄存器
还记得d命令复制栈顶吗?f打印整个主栈?以下相当于1001 d f,使用了寄存器\xff
echo -e '1001 s\xff l\xff l\xff f' | dc
1001
1001
现在以寄存器r来代表
首先,我们要清楚,寄存器是一个栈结构,和主栈是一样的,只是它不能直接用于计算而已,是用于存储的,初始的时候也是空栈,
sr 将主栈栈顶出栈,如果寄存器r栈为空,则将刚才出主栈的值入r栈,否则修改r栈顶为刚才出主栈的值
lr 将寄存器r栈顶的值入主栈,为空则会打印错误信息(说到这里,其实dc里面所有操作栈出错都会打印错误信息,并跳过)
Sr 将主栈栈顶出栈,r栈进栈
Lr r栈出栈,主栈进栈
要理解下面两个命令,就要先明白寄存器栈的每一层都可以有一个使用数字下标访问的数组
:r 主栈出栈两次,先从主栈栈顶弹出一个值a,再从主栈栈顶弹出一个值b,然后令r[a]=b
;r 主栈出栈,从主栈栈顶弹出一个值a,然后将r[a]进主栈 |
|