我从网上发现了一个叫MenuetOS的小操作系统,下载下来后只有800多K;据说这个操作系统是作者利用业余时间写的。该操作系统的官方网站上还有关于如何在MenuetOS上编程的示例,但是只有汇编语言的,下面就是其中的一个:
  1 ;
  2 ;   64 bit Menuet example
  3 ;
  4 ;   Compile with FASM 1.60 or above
  5 ;
  6 
  7 use64
  8 
  9     org   0x0
 10 
 11     db    'MENUET64'              ; Header identifier
 12     dq    0x01                    ; Version
 13     dq    START                   ; Start of code
 14     dq    image_end               ; Size of image
 15     dq    0x100000                ; Memory for app
 16     dq    0xffff0                 ; Esp
 17     dq    0x00                    ; Prm 
 18     dq    0x00                    ; Icon
 19 
 20 
 21 START:
 22 
 23     call  draw_window       ; At first, draw the window
 24 
 25 still:
 26 
 27     mov   rax , 0xA         ; Wait here for event
 28     int   0x60
 29 
 30     test  rax , 0x1         ; Window redraw
 31     jnz   window_event
 32     test  rax , 0x2         ; Keyboard press
 33     jnz   key_event
 34     test  rax , 0x4         ; Button press
 35     jnz   button_event
 36 
 37     jmp   still
 38 
 39 window_event:
 40 
 41     call  draw_window
 42     jmp   still
 43 
 44 key_event:
 45 
 46     mov   rax , 0x2        ; Read the key and ignore
 47     int   0x60
 48 
 49     jmp   still
 50 
 51 button_event:
 52 
 53     mov   rax , 0x11
 54     int   0x60
 55 
 56     ; rax = status
 57     ; rbx = button id
 58 
 59     cmp   rbx , 0x10000001
 60     jne   no_application_terminate_button
 61     mov   rax , 0x200
 62     int   0x60
 63   no_application_terminate_button:
 64 
 65     cmp   rbx , 0x106
 66     jne   no_application_terminate_menu
 67     mov   rax , 0x200
 68     int   0x60
 69   no_application_terminate_menu:
 70 
 71     jmp   still
 72 
 73 
 74 draw_window:
 75 
 76     mov   rax , 0xC                          ; Beginning of window draw
 77     mov   rbx , 0x1
 78     int   0x60
 79 
 80     mov   rax , 0x0                          ; Draw window
 81     mov   rbx , 0x0000010000000100           ; x start & size
 82     mov   rcx , 0x00000080000000C0           ; y start & size
 83     mov   rdx , 0x0000000000FFFFFF           ; type    & border color  
 84     mov   r8  , 0x0000000000000001           ; draw flags
 85     mov   r9  , window_label                 ; 0 or label - asciiz
 86     mov   r10 , menu_struct                  ; 0 or pointer to menu struct
 87     int   0x60
 88 
 89     mov   rax , 0x4                          ; Display text
 90     mov   rbx , text
 91     mov   rcx , 0x20
 92     mov   rdx , 0x40
 93     mov   rsi , 0x0
 94     mov   r9  , 0x1
 95     mov   r8  , 0x3
 96 
 97   newline:
 98 
 99     int   0x60
100 
101     add   rbx , 0x1F
102     add   rdx , 0x10
103     dec   r8
104     jnz   newline
105 
106     mov   rax , 0xC                          ; End of window draw
107     mov   rbx , 0x2
108     int   0x60
109 
110     ret
111 
112 
113 ; Data area
114 
115 window_label:
116 
117     db    'EXAMPLE',0     ; Window label
118 
119 text:
120 
121     db    'HELLO WORLD FROM 64 BIT MENUET',0
122     db    'Second line                   ',0
123     db    'Third line                    ',0
124 
125 menu_struct:               ; Menu Struct
126 
127     dq   0                 ; Version
128 
129     dq   0x100             ; Start value of ID to return ( ID + Line )
130 
131                            ; Returned when menu closes and
132                            ; user made no selections.
133 
134     db   0,'FILE',0        ; ID = 0x100 + 1
135     db   1,'New',0         ; ID = 0x100 + 2
136     db   1,'Open..',0      ; ID = 0x100 + 3
137     db   1,'Save..',0      ; ID = 0x100 + 4
138     db   1,'-',0           ; ID = 0x100 + 5
139     db   1,'Quit',0        ; ID = 0x100 + 6
140 
141     db   0,'HELP',0        ; ID = 0x100 + 7
142     db   1,'Contents..',0  ; ID = 0x100 + 8
143     db   1,'About..',0     ; ID = 0x100 + 9
144 
145     db   255               ; End of Menu Struct
146 
147 image_end:
148 
149 
我不懂汇编,但是我感觉汇编语言的语句似乎都比较短。
下面是一些官方网站上提供的截图:




谁知道这会不会是下一个Windows呢?

posted on 2008-07-16 12:08  张Sir  阅读(1136)  评论(0编辑  收藏  举报