找回密码
 加入计匠网
搜索
热搜: BIOS ACPI CPU Windows
查看: 29732|回复: 11

DOS 4G big real Mode Demo code。

[复制链接]
发表于 2008-10-8 14:29:37 | 显示全部楼层 |阅读模式
刚学习的同学,有些还不会,我这里贴点C和asm的代码。只供参考。: R8 }% P6 q5 H: z
# O- T3 c* Y! D, t/ O
这是C的
  1. /********************************************************************3 m- o3 f' ]( A7 h
  2. *    File: DOS4G.H                                                  ** C9 N2 C9 h: [& {# o
  3. *       Compile with BC 3.1 ( Editor: Tab size = 4 )                */ U8 i/ a- h' ?% k4 h  }$ t
  4. *                                                                   *
    % T( o! W( f8 N
  5. *    ========================Title===============================   *1 J* m* n! ^; |) q& ~6 o, B, i
  6. *        这个函数是让系统进入DOS 4G模式                             *0 r5 S, `- m) T0 f. Y( i9 K
  7. *       程序参考了:陈家琪《DOS实方式下直接访问4GB》                *
    , }+ K$ C+ [: `+ @
  8. *                                                                   */ @, C6 f4 ~2 R
  9. *       使用: openA20(); set4gb();                                  *
    " Z% i( j. }- ^4 S  D1 t
  10. *                                                                   *
    - q9 {/ F5 {8 y) r
  11. *   ===========================History==========================    *
    . j: w: e* u- B+ ~7 k
  12. *    author: bini                                                   *  l, X# Q5 u. M3 U) Q
  13. *      date: 2004-11-30  Frist version.                             *( D" j: v7 }4 U& r+ M
  14. ********************************************************************/
    8 |8 ?9 Q' w9 X

  15. , ^$ v, k  F' u8 a( P9 V4 y
  16. #include <conio.h># K8 k; L) K4 }9 @
  17. #pragma inline% G+ \$ t2 K5 [+ u$ D

  18. ) K" C. _4 j! s% u& U% J
  19. /***********************************************% }! H- Y% Z) g2 b
  20. *    两个GDT,第一个为系统使用,不管,默认为0   *
    0 X3 p6 H' [& C' a2 k0 a0 e. }
  21. *    第二个为一个数据段,没有代码段。           *0 W; v) L" Z+ U# }9 J' D
  22. ***********************************************/
    & s% x2 }$ i+ q7 K! G0 v0 I* x8 q
  23. unsigned long GDT_def[ ]={0,0,      /*系统使用*// K. n( C+ r/ h
  24.                           0x0000FFFF, /* hi16bit( 0~15 ) is base low=0,   h2 \7 _% Q9 u. y3 `# e: g' i* P# b
  25.                                          low16bit( 0~15 ) is limit low=0xFFFF & t2 Y1 L7 M# W; a" l$ A
  26.                                       */
    ) g& G2 p  C% m9 Q
  27.                           0x008F9200};/* 最低字节为 base( bit 16~23 )
    , d3 z6 }0 v8 e- m' ?4 }$ p1 h
  28.                                          最高字节为 base( bit 24~31 )7 J% K6 X7 e" h8 P! F
  29.                                          
    4 c$ J& {4 g! ^+ c4 W& b
  30.                                          属性Attrib = 0x8F92' L8 B* p% j: T' k( b+ N9 S
  31.                                          
    9 j0 J( s# |, r  h9 Y. k+ R/ W
  32.                                              属性位Hibyte低四位为 9 ]. |+ D& b4 G' X# k% E
  33.                                                  Limit( 16~19 )=F
    ; ?& n+ Z. ?8 j3 T' G
  34.                                              属性位Hibyte bit7 为粒度5 p7 F9 ]& B: E: w1 L7 j0 z
  35.                                                  (值1=4KB粒度)& @2 z- y* W2 i. @* Y
  36.                                                  8F & 0x80 = 1! z7 K% G7 J, z* ]
  37.                                                 
    $ O8 m' o$ R& k6 o+ ]
  38.                                              属性位Lowbyte低四位为段类型,值=24 Y: q' t% r* p( b  p
  39.                                                  表示为可读/写段
    ( F2 O) w$ ]3 i6 B6 r
  40.                                              属性位Hibyte高四位=9,bit3=1表示:6 C+ T+ W+ B2 n' R( m+ `, Z
  41.                                                  描述符对地址转换是有效的。& H: m: Z: j" U( A1 L. K! q+ r
  42.                                                  bit0=1表示为:6 Z" h# h, w# i$ Q" k% P
  43.                                                  系统段描述符。而不是门描述符。4 Z# A$ R. N& G( N. S7 M- J
  44.                                              & _+ r% P4 b# Q" e
  45.                                          */6 J0 V2 F1 z3 t" @
  46. 4 G! g5 ?5 q  D: {7 I; q; U
  47. /****************************************
    4 Z, i) E* ^# I2 U# w
  48. *    GDTR寄存器, 48bit=6bytes            *
    $ Z" H& s6 e/ @% i3 \
  49. *    +-------------------------------+   *
    : l" R5 ^3 w9 v. T, R
  50. *    |   32bit基地址       |16bit界限|   *4 r- b4 t0 F  R4 ]# g' {& N6 O3 N
  51. *    +-------------------------------+   *
    $ K3 K' r3 N' ?) @) [, c
  52. ****************************************/
    * v2 `$ v- r; d; N5 j
  53. unsigned char GDT_Addr[6]={0};* A; I. |! O. I
  54. . p# e) V% L7 J/ _& A
  55. /****************1 |! F% R/ i, M4 |4 n
  56. *    打开A20门    *+ E$ K+ [& k1 f( W6 [6 C, F
  57. ****************/1 c$ [2 ?7 X4 x% M+ G
  58. void openA20(void)
    : {8 f, Z/ h# r& O) S/ o" G
  59. {
    $ C0 a/ @8 a" k0 m  e% H+ @
  60.     asm{
      Y( b3 W6 |: H7 z
  61.         pusha
    9 w. L7 X/ z1 n( s# j' }
  62.         in         al, 92H
    7 r! e* B0 @4 \# V- _7 [9 z
  63.         or         al, 0x02
    , \( ?6 a1 [. ]4 d
  64.         out        0x92, al
    : F# ~' z- p3 n7 N: W4 h% q7 d2 [0 p
  65.         out        0xed, al) u5 X6 p( ]* u5 k* K$ a, x, J
  66.         popa, w2 t& }& ?) g+ ], x
  67.     }
    $ s4 j. g8 W" \% c
  68. }
    2 E: i# O+ U) h/ Z
  69. ; p* Z1 U9 J9 b. E
  70. /***********************************************& A* z+ l9 e/ A0 H8 Y
  71. *    函数功能:进入DOS4G                       *
    " s7 x, K2 Y0 a& s4 @8 G+ b
  72. *    ====================                      *
    ; K8 X9 {# J" o' D7 q
  73. *                                              *
    ! ~7 c9 Z) _4 ~" ~
  74. *    GDT描述符界限计算方式:描述符个数*8-1     *
    : G  ^# o& \- V2 a# k( G3 R
  75. *   如:                                       *& |( v+ P% g* H/ S9 Q5 |" l: C; f
  76. *        mov    word ptr GDT_Addr[0], (2*8-1); *
    4 D" \, }& }9 D. y
  77. *       表示为 2个GTD                          *
    : J" x8 D3 y- w) J: R
  78. *                                              *" x4 Y1 B- g5 X' ]- N0 t
  79. *    选择子为所在描述符内的字节偏移。          *2 _8 M, E. W/ O1 x& I
  80. *                                              *2 b( V: \7 {2 x6 z
  81. ***********************************************/: T! ~; W* A# X+ K9 p8 m1 V
  82. void set4gb(void)' n4 E, q) P/ C7 }1 X" n
  83. {
    9 I8 A- ~+ P, n) q+ r
  84.     asm{
    / h: P- Z, m% ]1 T
  85.         cli, Q: V, g7 x5 |- r% g
  86.         /****************************************) ?) }1 c  k  G
  87.         *    GDTR寄存器                          *
    7 c( q& i& j. O" r- v; f4 q
  88.         *    +-------------------------------+   *
    / r6 l& \7 X- I, E5 @  N
  89.         *    |   32bit基地址       |16bit界限|   *
    1 a% k0 o' @" W6 k" s- ^
  90.         *    +-------------------------------+   *
    2 I  x2 w; t. Z: ~
  91.         *****************************************/) X7 O' Z2 _4 r* c  H/ t6 v. A
  92.         /*********************
      M: E. W5 ~: h, X& ~1 H
  93.         *        得出段界限       *
    + c# d2 `/ ?# V5 Z9 q, }* [+ w: w
  94.         *********************/" W& o& Q' m  z. F
  95.         mov        word ptr GDT_Addr[0], (2*8-1);
    ' A# j: |5 ?7 W# _0 t
  96.         /********************************************) m+ d; ^: e/ t4 P
  97.         *    计算GDT表的32位基地址,存入GDTR        *% G+ [1 t6 @3 t  D$ r' U
  98.         ********************************************/
    ( L: E" L  Q- x/ \2 M3 e
  99.         mov        eax, ds
      D9 u8 c# L3 M; k( L" \
  100.         shl        eax, 4
    & E6 {2 Y8 @/ l8 c4 x
  101.         xor        ebx, ebx; S; k: a$ L& ]8 j: i
  102.         mov        bx, offset GDT_def8 f* I( {. T/ F6 A
  103.         add        eax, ebx
    4 i) d- j$ t; N" m- G- Z# S% f/ [" [
  104.         mov        dword ptr GDT_Addr[2], eax$ c4 z6 y, L$ I$ e
  105.         lgdt       fword ptr GDT_Addr# E+ \9 b3 d( P. e5 |. B- Z
  106.         /********************7 C+ V$ [- l' u1 w7 x
  107.         *   选择子偏移      *) Q% k4 V, p9 P
  108.         ********************/
    9 w# C, J9 R$ e8 w
  109.         mov        bx, 8" Z3 c, k& h7 @* X8 ?( E; ~
  110.         mov        eax, cr08 W3 }) ]# \! G; q/ ^2 T
  111.         or         al, 1# d" X( i( B& l
  112.         /**********************
    & P2 D" s1 _) [+ N( b7 h
  113.         *     进入保护模式    *
    " `  P( w# G* o0 ]/ v7 f* u
  114.         **********************/7 x7 ~; m; @# z* q
  115.         mov        cr0, eax
    ' m8 J  d' e- |8 \, q+ z
  116.         jmp        pMod5 |0 S0 X9 v& a: X# p5 e1 K9 _2 S
  117.     }2 e- A! Q! Z, ~8 ]% i3 Q

  118. ' b, F5 W" I) Q. }' x
  119.     pMod: asm{8 D* h% P4 N5 S7 x
  120.            /************************************************************7 O- f* c, [( h: I4 Q1 k
  121.            * 让fs与gs加载选择子,使其能访问 0xFFFFF * 4K (4GB) 空间    ** k) n4 g3 p( e9 f  _: @: o3 i
  122.            ************************************************************/( O& x2 w# d+ \! t
  123.         mov        fs, bx
    * ~- l$ G2 [+ B
  124.         mov        gs, bx1 n& ?- y5 q* {: J( J( M$ _6 J$ C7 z  N
  125.         and        al, 0x0FE
    ( _7 R# Q, M# V% n
  126.         /******************
    % S3 Z, j, i% S" k( K4 ?
  127.         * 进入实模式      *7 o( X4 B! q& i- R9 A( F: g* ?
  128.         ******************/
    + l6 q8 V# @, S, d2 b; ^. @
  129.         mov        cr0, eax7 N  j* a% V, E/ r$ H- B% d3 Y- j
  130.         jmp        rMod
    & y; P( {4 s* X
  131.        }
    ' g0 R" ]5 v$ y. \8 S3 Z

  132. 6 i( o) U# I( j
  133.     rMod: asm{! h. d9 y" T: t, V
  134.         /* ******************************************************************6 z! M; G) `! h) @) U
  135.         * 退出,fs、gs清0,访问系统内存可用: gs[32位,相对于0的偏移地址]     *% X, M; u/ b% d4 `
  136.         ********************************************************************/: U. C% B% [+ q% X' M  E1 P, X3 q
  137.         mov        ax, 0. }* k& C2 W- U4 B
  138.         mov        fs, ax
    - i# y2 x7 N4 w
  139.         mov        gs, ax5 S$ A6 O+ |. {5 p
  140.         sti- V2 @/ X$ }7 M- I+ u: x
  141.     }$ H. P, R: E2 [7 g1 j7 }2 Y! w
  142. }
复制代码
这是asm的
  1. ;/********************************************************************+ Z9 G; b2 s; h/ m6 k8 S
  2. ;*    File: DOS4G.asm                                                *
    ; Q5 i9 H5 i( A/ H# B- v# B
  3. ;*       Compile with masm ( Editor: Tab size = 4 )                  *# U- G0 b- |$ |0 Z- |
  4. ;*                                                                   *
    + f' L: i2 L1 j: {9 A
  5. ;*    ========================Title===============================   *
    ' x! T  w0 h" d' I
  6. ;*        这个demo是让系统进入DOS 4G模式,进行数据访问               *( [, C- m/ C1 \, j8 u1 r  [
  7. ;*                                                                   *
    3 m" l& A' \! g# E1 {
  8. ;*   ===========================History==========================    *
    ( b) D- g2 ?: }: C8 ?! U2 y" O5 P% e7 c
  9. ;*    author: bini                                                   *# Q4 m0 ~6 M. r2 X2 I# m2 ]- T
  10. ;*      date: 2008-10-08  Frist version.                             *. {# P/ M# r3 m6 a/ C2 b! f# b
  11. ;********************************************************************/
    6 W, G# _, I8 H( c
  12. .model small/ {9 R; h2 }3 S, `7 }6 {+ Y! s: D$ K+ a
  13. .586p
    % `5 f; P1 X- w0 l

  14. + M, h" Q0 n  u% {& ^
  15. DSEG  SEGMENT   USE16                 ;16位数据段1 {* F$ P8 B8 \9 {2 K6 {

  16. ) ^6 @. V2 L+ O  [5 ~# Z
  17. DESC            STRUC
    0 z+ B6 W* f# s' Y2 K7 \
  18.         LimitL          DW      0 ;段界限(BIT0-15)
    ' ]! C; z# H9 C% M
  19.         BaseL           DW      0 ;段基地址(BIT0-15), j" P/ B- H) l, x0 Q# L
  20.         BaseM           DB      0 ;段基地址(BIT16-23)( y# D% k% |/ m0 l: l
  21.         Attributes      DB      0 ;段属性
    9 N- p6 b5 g; }: f; a
  22.         LimitH          DB      0 ;段界限(BIT16-19)(含段属性的高4位)+ m. e& I" R( g1 S
  23.         BaseH           DB      0 ;段基地址(BIT24-31): e+ {* F1 X% W; l4 Q" p
  24. DESC            ENDS
    1 h! }2 v" E9 s3 _8 _
  25. ) l5 n( r/ |) _. c* V1 |
  26. PDesc           STRUC
    ! l& r% V$ _; G1 m  X; g
  27.         Limit           DW      0 ;16位界限
    6 z9 \: W- h. y( ~
  28.         Base            DD      0 ;32位基地址. Q6 Z0 N  t) T: U0 G, F) M8 I
  29. PDesc           ENDS/ c, Y  Q: h$ z$ E/ @7 }9 z9 p( Q
  30. 6 N& h9 g+ L6 o
  31. GDT_def         Label   Fword* v% t% _$ u4 s' a
  32. Null_Desc       DESC    <     0h,  0h, 00h, 00h, 000h, 0>
    & [8 E9 z' a3 E
  33. Data_Desc       DESC    < 0FFFFh,  0h, 00h, 92h, 08Fh, 0>
    8 w* `& K: V% z

  34. / S1 B8 f- n) Y- h0 m
  35. GDT_Addr        PDesc   <$-GDT_def-1, ># I8 ^$ g4 [2 l$ h
  36. DSEG            ENDS                          ;数据段定义结束
    ' i( M8 D* \( Q( L
  37. 7 r2 M5 d$ T) i; L( I1 a$ W
  38. CSEG            SEGMENT USE16                 ;16位代码段7 r3 D* {! d5 s3 D; `& F
  39.                 ASSUME  CS:CSEG,DS:DSEG
    # a: _3 M( k, u" b! H# M% r5 d
  40. .Startup7 C) N( h/ u- }( p. }7 h* x8 V/ }
  41.         call      Set4gb
    ( N3 l4 R" w# ?5 |
  42. ;
    + Y% }3 y/ n% V0 p) V) a) O
  43. ;       fs, gs即能访问4GB空间$ b" F( H9 o  u
  44. ;       write your code in here.
    ) W  T8 a- z4 J5 ^! h' Y; r
  45. ;
    # M, G& j+ u2 A: X# [0 }* t" T! S
  46.         .exit1 a' {* ~  t3 ?$ X% F
  47.         " Y* w) r. r% \
  48. Set4gb          PROC      NEAR1 f( C) V2 r" y  n* c
  49.         in        al, 92h
    ! [, P7 V! U( b% F/ Z
  50.         or        al, 002# _! d( M' |) f4 b
  51.         out       092h, al  [/ z, o; R* u1 y; ]# L+ u! ?
  52.         out       0edh, al' {; {9 n. b& J/ @9 k3 }5 R9 q
  53. 2 v  ?. r: X( ?  X4 l, A
  54.         cli  m1 x0 L" C3 U2 _% t3 Q0 @

  55. 5 d5 w; W* T$ i8 P( n. Y; V- z
  56. ;        mov      word ptr GDT_Addr, (2*8-1);! Q/ e9 r! ?- |+ [* }

  57. , w, Z9 g; M( h1 G" t
  58.         mov       eax, ds
    ! Q( K. N4 L- w* u& ^
  59.         shl       eax, 4) [1 u  R+ a% {" U" u! f. o( A
  60.         xor       ebx, ebx% M. W) H* c5 v) H
  61.         mov       bx, offset GDT_def
    6 Z9 l! Q1 E. x: B3 u
  62.         add       eax, ebx6 d' n! S' s1 P# O
  63.         mov       dword ptr GDT_Addr.Base, eax
    ( x* U+ o* }- W1 S. W% `
  64.         lgdt      fword ptr GDT_Addr5 R1 s* H! ?. q. w# P5 c3 F
  65. 0 F' r  H# y( Q& O) y9 G
  66.         mov       bx, 8
    4 \& m0 g* U. P6 I# H- X# @
  67.         mov       eax, cr0
    ! D$ `! n# M4 l( Q+ N
  68.         or        al, 1/ |( B6 K2 e+ G/ r
  69.         mov       cr0, eax7 W' T' o" \: r6 s5 H; v
  70. : x6 v' R# P2 T# _
  71.         jmp       pMod( S4 W, W& t9 K: U5 T  e/ {3 C9 E
  72.     pMod:7 {3 X# N- j) w) m2 f

  73. ; A8 ~2 ^. t$ J. C' Y* M
  74.         mov       fs, bx. q! F4 u  A8 a  q
  75.         mov       gs, bx; l& m9 k; a+ N5 L- R+ b
  76.         and       al, 0FEh) i) v& @/ z8 F1 O% h; ?' I
  77.         mov       cr0, eax
    9 k& v1 e. z/ [* I
  78.         
    / g1 W- `* y8 }& o- D/ \
  79.         jmp       rMod
      Z9 B9 W0 M2 N2 U3 V; p
  80.     rMod:
    + A$ U5 _( A2 k1 p

  81. 8 O- v2 H. L0 `
  82.         mov       ax, 06 ^" Q  H, i' m! D
  83.         mov       fs, ax
    * Q& D/ Z# u1 N  H
  84.         mov       gs, ax# z7 b* ~. {! a
  85.         6 g9 p7 S1 ~) A- Q5 e" ?, \
  86.         ; 在2M的位置测试写一下数据% p4 l8 ]+ O1 }3 @( C
  87.         mov       esi, 200000h: Q0 b/ P0 g& Z. x
  88.         mov       dword ptr fs:[esi], 055aa55aah2 i$ K( F; e9 Q7 D5 l* D8 D
  89.         ; 用RU去看看200000h的位置是否是此数据....
    ) J& r# h7 t- I# H& _3 y
  90. ' A3 U4 @9 f/ w8 R/ m) }
  91.         sti
    3 E, }/ U+ H+ P  n
  92.         ret- y: q$ I+ P* m
  93. Set4gb  ENDP
    8 a5 b3 ^; M! y9 T$ A
  94.       
    * _0 u. \' g- a, Z8 |; f
  95. CSEG           ENDS                              ;代码段定义结束
    4 D! O5 ]( K8 C, Y
  96.         end
复制代码
发表于 2008-10-14 14:48:07 | 显示全部楼层
学习,学习了,楼主辛苦了
回复

使用道具 举报

发表于 2008-12-15 17:20:53 | 显示全部楼层
有一个问题,我用BC31为什么没法编译32位的汇编指令呢?要设置哪儿吗?
回复

使用道具 举报

发表于 2008-12-18 17:11:16 | 显示全部楼层
option->compiler->advanced code generation中的instruction set选 80386
! ~. e1 I/ \* a# [0 l
; }& m! x7 i+ Z  Soption->compiler->code generation中的option选中, [X] compile via assembler8 u9 H& n# z5 G8 o8 e

1 S" g( F7 R5 n0 B+ h8 M! ?& j, v[ 本帖最后由 happybasic 于 2008-12-20 15:41 编辑 ]
回复

使用道具 举报

发表于 2009-6-4 20:55:40 | 显示全部楼层
太强了 学习 只是更新的比较慢哈 谢谢了
回复

使用道具 举报

发表于 2009-6-5 11:04:27 | 显示全部楼层
Undefined symbol: &LT
回复

使用道具 举报

发表于 2009-6-8 17:07:20 | 显示全部楼层
Null_Desc       DESC    &lt;     0h,  0h, 00h, 00h, 000h, 0&gt;
5 j3 H* w9 b" c& CData_Desc       DESC    &lt; 0FFFFh,  0h, 00h, 92h, 08Fh, 0&gt;
! A, E5 z5 B5 m( k! T7 a" E
, \; R2 d: C6 U+ }) eGDT_Addr        PDesc   &lt;$-GDT_def-1, &gt;
, X4 h9 Y( J! u5 F7 ` 替换如下,- u! Q# D5 H% p+ M0 d
Null_Desc       DESC    < 0h,  0h, 00h, 00h, 000h, 0>. |& L. R) Y. h. A8 \: J' u) x4 _7 n
Data_Desc       DESC   <0FFFFh,  0h, 00h, 92h, 08Fh, 0>
, Z$ Y. K5 v5 O& u
1 t3 F* N$ |1 D* u' ^GDT_Addr        PDesc   <$-GDT_def-1, >$ M$ L" P9 q# k1 A( x: K$ A
这样你就能编译通过并且可以运行
回复

使用道具 举报

发表于 2009-6-9 11:23:21 | 显示全部楼层
替换了就OK.Thanks
回复

使用道具 举报

 楼主| 发表于 2009-8-1 00:44:39 | 显示全部楼层
这个是Discuz的Bug.有空翻出来改改看。发代码<>符号被Discuz 在[ code ]里变成HTML的东西.
回复

使用道具 举报

发表于 2010-2-26 10:47:24 | 显示全部楼层
原帖由 happybasic 于 2008-12-18 17:11 发表 ' u- ]5 O' p' n
option->compiler->advanced code generation中的instruction set选 80386
- i, U6 O  P( Q8 w; p4 u( r. p# D& B/ o  V4 K7 F& H& O; U) ]
option->compiler->code generation中的option选中, [X] compile via assembler
! }; [# D. T8 }
   作了上述设置之后还是不行,编译的时候提示: cannot find executable: TASM. 我换了几个版本的TASM还是没用,除非拿掉含有32位寄存器的那些code才行。这个是什么原因,请各位大侠多多指教
回复

使用道具 举报

发表于 2010-4-12 10:27:08 | 显示全部楼层
原帖由 A_jack 于 2010-2-26 10:47 发表 . E( P- k: [% j$ D

: Q% r! u% N( w. |1 u# j   作了上述设置之后还是不行,编译的时候提示: cannot find executable: TASM. 我换了几个版本的TASM还是没用,除非拿掉含有32位寄存器的那些code才行。这个是什么原因,请各位大侠多多指教 ...
( I1 p/ s" J- v& g! \

1 u, L1 E( b& B0 G; f我也是相同的问题,请问哪位有解,谢了!
回复

使用道具 举报

发表于 2011-2-21 21:04:39 | 显示全部楼层
option->compiler->Transfer 设置TASM的路径,就不会提示找不到TASM;, V* m5 i" O' s* V
还要把TASMMSG.exe拷贝到源代码(工程目录),就可以编译完成了。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 加入计匠网

本版积分规则

Archiver|手机版|小黑屋|计匠网

GMT+8, 2026-7-19 12:16 , Processed in 0.156412 second(s), 17 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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