您的位置:首页 > 大数据 > 人工智能

大型机汇编(mainframe assembler/HLASM)之藏巧于拙

2012-06-30 09:58 337 查看
本文只说设计思想不谈技术,其思想是一个老外架构师告诉我的,现在整理如下:

一般情况下,在嵌有CICS的汇编程序中,都多多少少涉及TWA(transaction work area)的概念,单从字面上就可以看出,这块区域是在整个transaction的运行中保持有效的。现假设,TWA中存放的有很多个指针,这些指针分别指向不同的地址空间,现内存中有一块表区域,大小为1000字节,具体为:

profile(200bytes) + header(300bytes) + segment1(50bytes)+ segment2(50bytes) + ... + segment10(50bytes)

凭直觉,在设计阶段我们会在TWA中存放一个指针PTRPROF,来指向这块区域(即profile的首地址),然后通过+300取header,再+(n-1)*50来取segmentn。

但实际情况是,架构师设计了2个指针:PTRPROF(指向profile)和PTRHAEAD(指向header)。

当时本人翻译有关这块内存空间的汇编代码时,就有点不能理解。得到的答复是:

Most likely, they designed the pointers based on how seldom or how frequent a particular address is used. If they only have the PTRPROF, and if they need to
get the HEADER (300 bytes) then they need to do some manipulation or calculation to get the real address or displacement of the HEADER data.

本人感悟,毕竟在内存中建立这个表的目的肯定是为了读写此表中的数据,就从业务上讲,读取profile(200bytes)的请求肯定远远小于读表中数据的操作。如果只设计一个指针,那就是绝大部分情况下都要先+200然后再进行读写操作,这在效率上肯定没有建两个指针好,况且后者的开销也只是多用了四个字节的内存空间而已。

本文最后涉及到了效率,下文谈谈汇编中效率的个人见解,谢谢!

有疑问请联系QQ349106216


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  汇编 header pointers