历久弥新的意思是什么| 卵巢畸胎瘤是什么病| clara是什么意思| 望洋兴叹是什么意思| 睾丸皮痒用什么药膏| 欲言又止下一句是什么| 做梦梦见马是什么意思| 高笋和茭白有什么区别| 鑫字属于五行属什么| 嘴上长痘痘是什么原因| 上课什么坐姿可以瘦腿| 展望未来什么意思| 鹦鹉吃什么水果| 青岛啤酒节是什么时候| 央企董事长什么级别| 兔子吃什么蔬菜| 总流口水是什么原因| 胸痛一阵一阵的痛什么原因| 血糖低吃什么补得最快| 梦见金项链是什么意思| 做试管前需要检查什么项目| 阴囊潮湿吃什么中成药| 孕妇吃什么血糖降得快| pm什么意思| 惯犯是什么意思| 世界上最大的东西是什么| 小孩早上起床咳嗽是什么原因| 火为什么没有影子| 阳虚有什么症状| 人为什么会便秘| 腰酸是什么原因| 敏感水体是什么意思| 梦见蝎子是什么意思| 炸粉是什么粉| 脂肪肝吃什么药好| 小肚子突出是什么原因| 夜尿频繁是什么原因| 什么是车震| 孩子晚上磨牙是什么原因| 股骨头坏死挂什么科| 备考是什么意思| 高密度脂蛋白胆固醇偏高什么意思| 肠炎能吃什么| 呼吸短促是什么原因| 梦见打死蛇是什么意思| 脑血管堵塞吃什么药| 凌波仙子是什么意思| nap是什么意思| 中国古代四大发明是什么| 过指什么生肖| 肛周脓肿吃什么消炎药| 左眼皮跳是什么原因| 10月7日什么星座| 玉佛寺求什么最灵验| 清远有什么好玩的| 苋菜与什么食物相克| 喉咙里痰多是什么原因| 省委副书记是什么级别| 吃丝瓜有什么功效和作用| 吃什么补黄体酮| 静脉曲张属于什么科| 一什么明珠| 伪善是什么意思| 传导阻滞是什么意思| 虾仁和什么炒好吃| 赟读什么| 结石能喝什么茶| 眼睛肿疼是什么原因引起的| 农垦局是什么性质单位| okr是什么| 中性是什么意思| 什么细节能感动摩羯男| pc是什么意思| 新生儿上户口需要什么资料| 缺维生素e有什么症状| 五月十三是什么星座| 什么是我的| 吃什么增肥最快| 韭菜补什么| 吃避孕药不能吃什么东西| 擦边球是什么意思| 肌酐偏低是什么意思| 鹿角有什么功效和作用| 01年属什么生肖| 身上有异味是什么原因| 为什么感冒喝白酒好了| 不可思议的意思是什么| 牙齿松动吃什么药| 梦见下小雨是什么征兆| 银鱼是什么鱼| 男性泌尿道感染吃什么药| 三月份是什么星座的| 去澳门需要什么证件| 为什么不嫁丧妻之男| hpv是什么| 炒菜是什么意思| 胃属于什么科室| 送哥们什么礼物好| 草酸对人体有什么危害| 早上起床头晕是什么原因| 沙中土命什么意思| 赘疣是什么意思| 老虎最怕什么| 脑梗不能吃什么| 吃什么养头发| 2倍是什么意思| 脚底抽筋是什么原因引起的| 做馒头用什么面粉好| vte是什么| 九月份什么星座| tct是什么检查| 经期喝酒会有什么危害| 中药为什么那么苦| 呼吸困难是什么原因| 贡菜是什么| 三个鬼是什么字| 翠绿色配什么颜色好看| 什么叫引产| 肠胃炎可以吃什么水果| 与狼共舞男装什么档次| 6个月宝宝可以吃什么辅食| resp是什么意思| 牙刷什么样的刷毛最好| 辣椒炒肉用什么肉| 马来酸曲美布汀片什么时候吃| 什么叫有格局的人| 睡觉起来嘴巴苦是什么原因| 梦见找对象是什么意思| 柿子像什么| 牛欢喜是什么部位| 奀是什么意思| 金银满堂是什么生肖| 乳头痒什么原因| 黄片是什么| mpe是什么意思| 四月十七号是什么星座| 神经痛吃什么药好| 太阳什么的什么的| 耳声发射检查是什么| 河虾最爱吃什么食物| 什么安神助睡眠| 清洁度111是什么意思| 来例假喝红糖水有什么好处| 什么是细节描写| 古代女子成年行什么礼| 主理人什么意思| 观音土为什么能吃| 什么药补血最快| 消化不良反酸吃什么药| 背上长痘痘擦什么药膏| 普洱茶什么季节喝好| 左下腹疼痛挂什么科| 少校是什么级别| 脾胃气虚吃什么中成药| 前三个月怀孕注意什么| 草莓的种子是什么| 指压板有什么功效| 脸上长肉疙瘩是什么原因| 榻榻米床垫什么材质的好| 胸口不舒服挂什么科| 脑萎缩吃什么药| mexican是什么牌子| 孔子原名叫什么| 阿胶有什么功效| 应届毕业生是什么意思| 胃气上逆吃什么中成药| 樱桃跟车厘子有什么区别| 肉刺用什么药膏能治好| 艺术有什么用| 最高的山是什么山| 唐玄宗为什么叫唐明皇| 脂溢性脱发用什么药| 右手手指头麻木是什么病的前兆| 怔忡是什么意思| 观音成道日是什么意思| 骆驼是什么牌子| 凉粉果什么时候成熟| 心肌缺血吃什么好| 丁五行属什么| 长期便秘是什么原因| 吃什么对血栓好| 迪拜为什么那么有钱| 痔疮的表现症状是什么| 宫颈肥大有什么症状| 白茶有什么功效| 非常的近义词是什么| 高大上的意思是什么| 梦见栽树是什么意思| 纬字五行属什么| 肢解是什么意思| 普陀山求什么最灵| 牙套什么材质的好| 晚上9点多是什么时辰| 什么食物铅含量高| 甲状腺球蛋白低是什么意思| 保胎吃什么食物好| 孕妇梦见自己出轨是什么意思| 亲热是什么意思| 有什么| 五七是什么意思| 5月9号什么星座| 风口浪尖是什么意思| 老是腹泻是什么原因导致的| cbs是什么意思| 生理是什么意思| 生理期为什么不能拔牙| 强心剂是什么意思| 肌无力是什么症状| u18什么意思| 血糖高吃什么降血糖| 7.11什么星座| 指标什么意思| 丙二醇是什么东西| 庶母是什么意思| 新疆人信仰什么教| invent是什么意思| 什么是有源音箱| 为什么多喝水反而胖了| 属猴的是什么星座| 小孩记忆力差需要补充什么营养| 枫叶什么颜色| 西海龙王叫什么| 10月28是什么星座| 孕妇贫血吃什么补血最好| 4.20是什么星座| 胃痛吃什么好| 领衔是什么意思| 额头长闭口是什么原因| 医院医务科是干什么的| 阑尾炎挂号挂什么科| 看肺应该挂什么科| 梦到自己孩子死了是什么征兆| 尿拉不出来是什么原因| 做彩超为什么要憋尿| 什么是精神分裂症| 唇裂是什么原因造成的| 小朋友口臭是什么原因| 胎盘位于后壁是什么意思| 惊艳了时光温柔了岁月什么意思| 什么是本科| 2月1号什么星座| 毫无保留什么意思| 黄色上衣配什么颜色裤子| 69是什么意思| 甲亢不能吃什么食物| 簇新是什么意思| 坐月子能吃什么| 双肺纹理增粗是什么意思| 支原体感染是什么病| 梦见洗碗是什么预兆| 胆囊壁固醇沉积是什么意思| 胃ct能检查出什么病| 肝硬化是什么症状| 血清碱性磷酸酶高是什么意思| 胃底腺息肉什么意思| 冠脉壁钙化是什么意思| 手癣用什么药膏| 枉是什么意思| 4月26日是什么星座| 高嘌呤是什么意思| 脖子疼是什么原因引起的| 肺栓塞是什么意思| 右派是什么意思| 碧玺是什么材质| 百度Jump to content

站久了腰疼是什么原因

From Wikipedia, the free encyclopedia
Systems Programming Language
Paradigmsprocedural, imperative, structured
FamilyALGOL
First appeared1972; 53 years ago (1972)
Influenced by
ALGOL 60, ESPOL
Influenced
ZSPL, Micro-SPL, Action!
百度 凤凰网WEMONEY讯3月25日,红岭创投董事长周世平在红岭创投官网社区发布《2018年,红岭创投的自我革命》一文,就公司近期发展和战略转型等问题进行说明。

Systems Programming Language, often shortened to SPL but sometimes known as SPL/3000, was a procedurally-oriented programming language written by Hewlett-Packard for the HP 3000 minicomputer line and first introduced in 1972. SPL was used to write the HP 3000's primary operating system, Multi-Programming Executive (MPE). Similar languages on other platforms were generically referred to as system programming languages, confusing matters.

Originally known as Alpha Systems Programming Language, named for the development project that produced the 3000-series, SPL was designed to take advantage of the Alpha's stack-based processor design. It is patterned on ESPOL, a similar ALGOL-derived language used by the Burroughs B5000 mainframe systems, which also influenced a number of 1960s languages like PL360 and JOVIAL.

Through the mid-1970s, the success of the HP systems produced a number of SPL offshoots. Examples include ZSPL for the Zilog Z80 processor, and Micro-SPL for the Xerox Alto. The later inspired Action! for Atari 8-bit computers, which was fairly successful. The latter more closely followed Pascal syntax, losing some of SPL's idiosyncrasies.

SPL was widely used during the lifetime of the original 16-bit version of the HP 3000 platform. In the 1980s, the HP 3000 and MPE were reimplemented in an emulator running on the PA-RISC-based HP 9000 platforms. HP promoted Pascal as the favored system language on PA-RISC and did not provide an SPL compiler. This caused code maintenance concerns, and 3rd party SPL compilers were introduced to fill this need.

History

[edit]

Hewlett-Packard introduced their first minicomputers, the HP 2100 series, in 1967. The machines had originally been designed by an external team working for Union Carbide and intended mainly for industrial embedded control uses, not the wider data processing market. HP saw this as a natural fit with their existing instrumentation business and initially pitched it to those users. In spite of this, HP found that the machine's price/performance ratio was making them increasingly successful in the business market.[1][2]

During this period, the concept of time sharing was becoming popular, especially as core memory costs fell and systems began to ship with more memory. In 1968, HP introduced a bundled system using two 2100-series machine running HP Time-Shared BASIC, which provided a complete operating system as well as the BASIC programming language. These two-machine systems, collectively known as HP 2000s, were an immediate success.[3] HP BASIC was highly influential for many years, and its syntax can be seen in a number microcomputer BASICs, including Palo Alto TinyBASIC, Integer BASIC, North Star BASIC, Atari BASIC, and others.

Designers at HP began to wonder "If we can produce a time-sharing system this good using a junky computer like the 2116, think what we could accomplish if we designed our own computer."[4] To this end, in 1968 the company began putting together a larger team to design a new mid-sized architecture. New team members included those who had worked on Burroughs and IBM mainframe systems, and the resulting concepts bore a strong resemblance to the highly successful Burroughs B5000 system. The B5000 used a stack machine processor that made multiprogramming simpler to implement, and HP selected this same architecture for the new concept.[5]

Two implementations were considered, a 32-bit mainframe-scale machine known as Omega, and a 16-bit design known as Alpha. Almost all effort was on the Omega, but in June 1970, Omega was canceled. This led to an extensive redesign of Alpha to differentiate it from the 2100s, and it eventually emerged with plans for an even more aggressive operating system design. Omega had intended to run in batch mode and use a smaller computer, the "front end", to process interactions with the user. This was the same operating concept as the 2000 series. However, yet-another-2000 would not be enough for Alpha, and the decision was made to have a single operating for batch, interactive and even real-time operation.[5]

To make this work, it needed an advanced computer bus design with extensive direct memory access (DMA) and required an advanced operating system (OS) to provide quick responses to user actions. The B5000 was also unique, for its time, in that its operating system and core utilities were all programmed in a high-level language, ESPOL. ESPOL was a derivative of the ALGOL language tuned to work on the B5000's, a concept that was highly influential in the 1960s and led to new languages like JOVIAL, PL/360, and BCPL. The HP team decided they would also use an ALGOL-derived language for their operating systems work. HP's similar language was initially known as the Alpha Systems Programming Language.[5]

Alpha took several years to develop before emerging in 1972 as the HP 3000. The machine was on the market for only a few months before it was clear it simply wasn't working right, and HP was forced to recall all 3000's already sold. It was reintroduced in late 1973 with most of its problems having been fixed. A major upgrade to the entire system, the CX machine, and MPE-C to run on it, reformed its image and the 3000 went on to be another major success during the second half of the 1970s.[5]

This success made SPL almost as widespread as the 2000 series' BASIC, and like that language, SPL resulted in a number of versions for other platforms. Notable among them was Micro-SPL, a version written for the Xerox Alto workstation. This machine had originally used BCPL as its primary language, but dissatisfaction with its performance led Henry Baker to design a non-recursive language that he implemented with Clinton Parker in 1979.[6] Clinton would then further modify Micro-SPL to produce Action! for Atari 8-bit computers in 1983.[7]

HP reimplemented the HP 3000 system on the PA-RISC chipset, running a new version of the operating system known as MPE/iX. MPE/iX had two modes, in "native mode" it ran applications that had been recompiled for the PA-RISC using newer Pascal compilers, while under "compatible mode" it could run all existing software via emulation. HP did not supply a native mode compiler for MPE/iX so it was not an easy process to move existing software to the new platform. To fill the need, Allegro Consultants wrote an SPL-compatible language named "SPLash!" that could compile to original HP 3000 code to run within the emulator, or to native mode. This offered a porting pathway for existing SPL software.[8]

Language

[edit]

Basic syntax

[edit]

SPL generally follows ALGOL 60 syntax conventions, and will be familiar to anyone with experience in ALGOL or its descendants, like Pascal and Modula-2. Like those languages, program statements can span multiple physical lines and end with a semicolon. Comments are denoted with the COMMENT keyword, or by surrounding the comment text in << and >>.[9]

Statements are grouped into blocks using BEGIN and END, although, as in Pascal, the END of a program must be followed by a period. The program as a whole is surrounded by BEGIN and END., similar to Pascal, but lacking a PROGRAM keyword or similar statement at the top.[10] The reason for this is that SPL allows any block of code to be used as a program on its own, or compiled into another program to act as a library. The creation of code as a program or subprogram was not part of the language itself, handled instead by placing the $CONTROL SUBPROGRAM compiler directive at the top of the file.[11]

The language provided the INTRINSIC keyword to provide an easy method for declaring external procedures, thus avoiding the need for the programmer to declare the procedure parameter types and order. All user-accessible system service declarations (such as file system, process handling, communications, and the like) were available through this mechanism, and users could also add their own procedure declarations to the system's INTRINSIC list. This is similar to, but more refined and narrower scope than the C-language #include mechanism.

In contrast to Pascal, where PROCEDURE and FUNCTION were separate concepts, SPL uses a more C-like approach where any PROCEDURE can be prefixed with a type to turn it into a function. In keeping with the syntax of other ALGOL-like languages, the types of the parameters were listed after the name, not part of it. For instance:[12]

INTEGER PROCEDURE FACT(N); VALUE N; INTEGER N;

Declares a function FACT that takes a value N that is an integer. The VALUE indicates that this variable is "pass-by-value" and therefore changes to it inside the procedure will not be seen by the caller.[13] The procedure sets its return value by an assignment statement to its name:

FACT := expression;

Although frowned upon, ALGOL and Pascal allowed code to be labeled using a leading name ending with a colon, which could then be used for the target of loops and GO TO statements. One minor difference is that SPL required the label names to be declared in the variable section using the LABEL keyword.[14]

SPL added to this concept with the ENTRY statement which allowed these labels to be further defined as "entry points" that could be accessed from the command line. Labels named in the entry statement(s) were exposed to the operating system and could be called from the RUN command. For instance, one could write a program containing string functions to convert to uppercase or lowercase, and then provide ENTRY points for these two. This could be called from the command line as RUN $STRINGS,TOUPPER.[15]

Data types

[edit]

Where SPL differs most noticeably from ALGOL is that its data types are very machine specific, based on the 3000's 16-bit big-endian word format.[10]

The INTEGER type is a 16-bit signed type, with 15 bits of value and the least significant bit as the sign. DOUBLE is a 32-bit integer, not a floating-point type. REAL is a 32-bit floating-point value with 22 bits for the mantissa and 9 for the exponent, while LONG is a 64-bit floating-point value with 54 bits of mantissa and 9 bits exponent.[16]

BYTE is used for character processing, consisting of a 16-bit machine word holding a single 8-bit character in the least-significant bits. Arrays of type BYTE pack two 8-bit characters per 16-bit machine word. LOGICAL is an unsigned 16-bit integer type that, when used in a conditional expression, returns true if the least-significant bit is 1 and false otherwise. Unsigned integer arithmetic can be performed on LOGICAL data and any overflow is ignored. There is no equivalent of a PACKED modifier as found in Pascal, so LOGICAL is somewhat wasteful of memory [17] when used only to store a single binary digit, although SPL offers bit string manipulation as an alternative.

Like C, data is weakly typed, memory locations and variable storage are intermixed concepts, and one can access values directly through their locations. For instance, the code:

INTEGER A,B,C
LOGICAL D=A+2

defines three 16-bit integer variables, A, B and C, and then a LOGICAL, also a 16-bit value. The =, like Pascal, means "is equivalent to", not "gets the value of", which uses := in Algol-like languages. So the second line states "declare a variable D that is in the same memory location as A+2", which in this case is also the location of the variable C. This allows the same value to be read as an integer via C or a logical through D.[18]

This syntax may seem odd to modern readers where memory is generally a black box, but it has a number of important uses in systems programming where particular memory locations hold values from the underlying hardware. In particular, it allows one to define a variable that points to the front of a table of values, and then declare additional variables that point to individual values within the table. If the table location changes, only a single value has to change, the initial address, and all of the individual variables will automatically follow in their proper relative offsets.[18]

Pointers were declared by adding the POINTER modifier to any variable declaration, and the memory location of a variable dereferenced with the @. Thus INTEGER POINTER P:=@A declares a pointer whose value contains the address of the variable A, not the value of A.[19] @ can be used on either side of the assignment; @P:=A puts the value of A into P, likely resulting in a dangling pointer, @P:=@A makes P point to A, while P:=A puts the value of A into the location currently pointed to by P.[20]

In a similar fashion, SPL includes C-like array support in which the index variable is a number-of-words offset from the memory location set for the initial variable. Unlike C, SPL only provided one-dimensional arrays, and used parentheses as opposed to brackets.[21] Variables could also be declared GLOBAL, in which case no local memory was set aside for them and the storage was assumed to be declared in another library.[22] This mirrors the extern keyword in C.

Literals can be specified with various suffixes, and those without a suffix are assumed to be INTEGER. For instance, 1234 would be interpreted as an INTEGER, while 1234D was a DOUBLE. E denoted a REAL and L a LONG.[23] String constants were delimited by double-quotes, and double-quotes within a line were escaped with a second double-quote.[24]

Variable declarations could use constants to define an initial value, as in INTEGER A:=10. Note the use of the assign-to rather than is-a. Additionally, SPL had a EQUATE keyword that allowed a string of text to be defined as a variable, and then replaced any instances of that variable in the code with the literal string during compiles.[25] This is similar to the const keyword in C.

Memory segmentation

[edit]

The classic HP 3000 organized physical memory into 1, 2, 4, 8, or 16 banks of 64K (65536) 16-bit words (128K bytes). Code (shared, non-modifiable) and data were separate from each other and stored in variable-length segments of up to 32K words each. Within a process, data addresses such as pointers were 16-bit offsets from a base register (known as DB), or relative offsets from a pointer register (Q or S) that resulted in a valid address within the process's data area (called the stack). While primarily 16-bit word-oriented, the system supported addressing of individual bytes in an array by using the word address where the byte was stored shifted left 1 bit then adding 0 to access the upper byte, or 1 for the lower byte. Thus byte addresses were separate and distinct from word addresses and the interpretation of an address was purely contextual. This proved to be quite troublesome and was the source of numerous bugs in both system and user code. Care had to be taken to treat byte addresses as 16-bit unsigned (that is, type LOGICAL) when using them in, for example, length computations, because otherwise a byte address of 2^16 or more would be treated as a 2s-complement signed value resulting in erroneous calculation of lengths or offsets.

An individual process had access to up to 254 code segments of up to 32K words each. The code segments were divided into two domains: the first 191 were "system" segments shared by all processes, and the remaining 63 were "user" segments shared by all running the same program. Control transfer specified either a routine number within the current segment, or an external segment number and a routine number within it. A small table at the end of the segment provided the entry point address for the routine.

A process's code acted on data in the stack, a single private segment also up to 32K words in size. Unlike stacks in other architectures, the HP 3000 stack was used for process globals, state preservation, procedure locals (supporting nested calls and re-entrancy), and numeric computation/evaluation. The operating system provided facilities for access to additional memory-based (non-stack) data segments, but these were not natively addressed by the instruction set and so the program was responsible for moving data from and to such "extra data segments" as necessary.

SPL included a variety of support systems to allow programs to be easily segmented and then make that segmentation relatively invisible in the code. The primary mechanism was to use the $CONTROL SEGMENT=asegmentname compiler directive which defined which segment the following code should be placed in. The default was MAINLINESEG, but the programmer could add any number of additional named segments to organize the code into blocks.[26]

Other features

[edit]

SPL included a "bit-extraction" feature that allowed simplified bit fiddling. Any bit, or string of bits, in a word could be accessed using the .(x:y) syntax, where x and y were the start and end bit positions from 0 to 15. (Significantly, x and y must be constants known at compile time.) Thus A.(8:15) returned the lower byte of the word storing A.[27] This format could be used to split and merge bits as needed. Additionally, additional operations were provided for shifts and rotates, and could be applied to any variable with the &, for instance A:=A & LSR(3).[28]

Example

[edit]

This simple program, from the 1984 version of the reference manual, shows most of the features of the SPL language.[11]

The program as a whole is delimited between the BEGIN and END.. It begins with the definition of a series of global variables, A, B and C, defines a single procedure and then calls it twenty times. Note that the procedure does not have a BEGIN and END of its own because it contains only one line of actual code, X:=X*(Y+Z); the INTEGER X,Y,Z is not considered part of the code itself, it is indicating the type of the three parameters being passed in on the line above and is considered part of that line.[11]

 BEGIN
     INTEGER A:=0, B, C:=1;
     PROCEDURE N(X,Y,Z);
         INTEGER X,Y,Z;
         X:=X*(Y+Z);
     FOR B:=1 UNTIL 20 DO
         N(A,B,C);
 END.

References

[edit]

Citations

[edit]
  1. ^ Leibson 2017.
  2. ^ "History of the 2116A digital computer". HP.
  3. ^ "Hewlett/Packard Computers". The 2000A was the first HP 2000 time share system on the market ca. 1969
  4. ^ Green 2004.
  5. ^ a b c d Edler 1995.
  6. ^ Baker, Henry; Parker, Clinton (September 1979). "Micro-SPL" (PDF).
  7. ^ Parker, Clinton (31 December 2015). "ANTIC Interview 111, Clinton Parker, Action!" (podcast). Interviewed by Randy Kindig.
  8. ^ "SPLash! The Native Mode SPL Compiler for MPE/iX". Allegro Consultants. 1 January 2004.
  9. ^ SPL 1984, pp. 1.2, 1.3.
  10. ^ a b SPL 1984, p. 1.1.
  11. ^ a b c SPL 1984, pp. 1.5.
  12. ^ SPL 1984, pp. 1.11.
  13. ^ SPL 1984, pp. 7–4.
  14. ^ SPL 1984, pp. 3.15.
  15. ^ SPL 1984, pp. 1.13, 1.14.
  16. ^ SPL 1984, pp. 2.1–2.3.
  17. ^ SPL 1984, pp. 2.4.
  18. ^ a b SPL 1984, pp. 3.2.
  19. ^ SPL 1984, pp. 2.13.
  20. ^ SPL 1984, pp. 4.4.
  21. ^ SPL 1984, pp. 2.12.
  22. ^ SPL 1984, pp. 3.6.
  23. ^ SPL 1984, pp. 2.6.
  24. ^ SPL 1984, pp. 2.11.
  25. ^ SPL 1984, pp. 3.18.
  26. ^ SPL 1984, pp. 1.8.
  27. ^ SPL 1984, pp. 4.6.
  28. ^ SPL 1984, pp. 4.9.

Bibliography

[edit]
我们到底什么关系 7月3日是什么日子 滑精是什么原因 什么叫职业年金 什么叫化学
安宫丸什么时候吃效果是最佳的 怕是什么生肖 网盘是什么东西 黄瓜为什么叫黄瓜 为什么会落枕
今年七夕节是什么时候 8.12什么星座 gs是什么 麒字五行属什么 叹服是什么意思
六月份出生的是什么星座 ws什么意思 米加白念什么 眉毛上的痣代表什么 便秘吃什么药见效快
皮肤过敏忌口什么食物hcv8jop3ns5r.cn 献血浆有什么好处hcv8jop2ns1r.cn 海贼王什么时候出的hcv9jop1ns7r.cn 异位妊娠是什么意思hcv7jop4ns6r.cn 什么吹风机好用hcv9jop4ns6r.cn
黄芪加陈皮有什么功效hcv7jop5ns4r.cn 尿酸偏高是什么意思hcv9jop5ns6r.cn 考试吃什么hcv8jop9ns8r.cn 1934年属什么生肖shenchushe.com 右手小拇指发麻是什么原因hcv9jop7ns3r.cn
窍是什么意思inbungee.com 什么时候可以领退休金hcv8jop4ns7r.cn 筛窦炎是什么病hcv8jop5ns7r.cn 阴囊潮湿瘙痒用什么药hcv7jop6ns8r.cn 环切手术是什么hcv8jop5ns4r.cn
双甘油脂肪酸酯是什么hcv7jop9ns0r.cn 尾椎骨疼是什么原因hcv9jop6ns9r.cn 养胃喝什么茶hcv8jop2ns4r.cn 安宫牛黄丸治什么病hcv9jop1ns9r.cn 事业单位是指什么hcv8jop0ns8r.cn
百度