小巧的menuetOS
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呢?
转载于:https://www.cnblogs.com/empty/archive/2008/07/16/1244162.html
小巧的menuetOS相关推荐
- 小巧的日志记录组件 - 开源研究系列文章
今天给大家带来一个小巧的日志记录组件LogHelper.这个组件是由Log4Net这个组件的由来而来的,不过只是写入.txt文本文件而已.如果能够对大家的项目有帮助那就更好了. 首先,打开.SLN解决 ...
- 清瘦的记录者: 一个比dbutils更小巧、好用的的持久化工具
https://gitee.com/bitprince/memory 1. 概述 1.1 连接.语句和结果集 从JDBC的规范上看,其对数据访问层有相当简洁的抽象:1.连接(connection) 2 ...
- 精心分享7个小巧却强大的电脑端小软件,让人大开眼界!
分享7个小巧却强大的电脑端小软件 1.PotPlayer PotPlayer是一款非常强大的PC端播放器软件,支持多种媒体格式,启动速度极快,播放稳定,还支持给视频加字幕,设置个性皮肤等. Potpl ...
- TaxonKit:小巧、高效、实用的NCBI分类学数据命令行工具
TaxonKit: 小巧.高效.实用的NCBI分类学数据命令行工具集 宏基因组按:NCBI物种分类注释信息格式复杂,存在层级不整齐.缺失.名称变动等问题,在使用中存在一定困难.最近发现了一款分类信息查 ...
- Mac上小巧实用的GIF格式录屏软件 LICEcap
很多时候,作为程序猿,你将不只是一名程序猿,你得会十八般武艺才能笑傲江湖,东方不败.哈哈!!! 美工有事请假了,我要临时上岗,打开PS,各种截图.产品请假了,或许我得临时给自己套上产品助理的角色,为刚 ...
- 微型小乐器 : MicroSynth 小巧而优美
简 介: 介绍了由 David Levi 的博客中他制作的一款小巧优雅的电子琴.他巧妙的利用了电阻网络形成了指数电压电路,进而产生了准确的音节频率.这样的设计给与我们更多有趣的电路设计技巧.很可惜在其 ...
- 可以分屏的软件_分享一款非常好用,且小巧的分屏软件
首先需要说明的是分屏软件并不是安装上就给你把屏幕分成一块一块从此一个窗口无法全屏显示.而是大部分情况下你依然是全屏显示.但如果你拖动窗口标题栏,就可以快速把他们显示到制定的区域.就像下图动画显示的这样 ...
- waves服务器系统盘,Waves 新款小巧化 SoundGrid 服务器 Server One-C 和 Extreme Server-C 公开...
继超便携的SoundGrid Mobile Server服务器之后,Waves新款机架版Server One-C和Extreme Server-C服务器也终于在官网上可以看到了. 产品名中的" ...
- Duktape:一个新的小巧的超精简可嵌入式JavaScript引擎
Duktape是一个可嵌入的Javascript引擎,主要关注便携性和精简及紧凑性. Duktape很容易集成到C/C++项目: 添加duktape.c和duktape.h到您的build中,并使用D ...
- 固态硬盘怎么看出厂日期_闲置的M.2固态硬盘怎么办?做个小巧便携高速的移动固态硬盘吧...
随着存储技术的升级,很多人都用上了M.2接口的固态硬盘,特别是2018年迎来了集中爆发,存储芯片的价格一降再降,固态硬盘的容量不断攀升.价格不断跳水,让许多人都用上了大容量固态硬盘,毕竟选择更大容量的 ...
最新文章
- emmet中文文档 (转载)
- 要成为一个成熟的软件工程师不容易啊
- 在ubuntu上搭建LNMP服务器
- VBScript的参数引用
- JFace中TableViewer的使用
- vue比php的优势,vue.js的优势是什么
- 在一切都是虚的世界里,你能做的是什么?
- 国外工程师这样分析女人
- 我们整理了20个Python项目,送给正在求职的你
- C#生成Word文档
- 虚拟机3-11-14:53,工作记录
- 极光短信验证码的集成过程
- 如何在iPhone或iPad上使用控制中心
- vue webapp之music(六)利用axios与后端接口代理请求歌单推荐数据
- stk中天体坐标系的定义
- 【读书笔记】TableauFineBi 学习小记
- 亚马逊云科技的十年创新之路
- 第1章 数字图像处理绪论
- H3C设备链路聚合(LACP/PAGP)
- android电视怎么打开网页,智能电视怎么浏览网页?这三款浏览器完美解决!
热门文章
- 用计算机中的知识秀恩爱,用你的专业,说最美的情话......
- 苹果app退款_你有一笔来自苹果App Store的不明扣款
- fiilt1左耳连不上_FIIL T1完美解决真无线耳机的痛点:更快更稳更自由
- Android xml 画上半圆 矩形,Android 半圆矩形的实现
- 强大的 Stream 函数式编程
- 2023跨境出海指南:韩国网红营销白皮书
- BZOJ 1778: [Usaco2010 Hol]Dotp 驱逐猪猡
- 新的用户故事待办列表就是一副地图
- 世界线(bzoj2894)(广义后缀自动机)
- GL-Currencies-Rates-Daily:Error:APP-FND-01206: This record already exists-文档 ID 292731.1