<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Architecting Life &#187; MenuetOS</title>
	<atom:link href="http://xujiwei.com/blog/tags/menuetos/feed/" rel="self" type="application/rss+xml" />
	<link>http://xujiwei.com/blog</link>
	<description>Just do it</description>
	<lastBuildDate>Thu, 05 Apr 2012 17:19:13 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>[MenuetOS] HotCats 0.1 代码分析</title>
		<link>http://xujiwei.com/blog/menuetos-hotcats-0-1-code-comments/</link>
		<comments>http://xujiwei.com/blog/menuetos-hotcats-0-1-code-comments/#comments</comments>
		<pubDate>Sat, 23 Jul 2005 09:31:02 +0000</pubDate>
		<dc:creator>Xu Jiwei</dc:creator>
				<category><![CDATA[Desktop]]></category>
		<category><![CDATA[ASM]]></category>
		<category><![CDATA[MenuetOS]]></category>
		<category><![CDATA[ScreenCapture]]></category>

		<guid isPermaLink="false">http://tmp.xujiwei.com/blog/?p=132</guid>
		<description><![CDATA[<a href="http://xujiwei.com/blog/menuetos-hotcats-0-1-code-comments/" title="[MenuetOS] HotCats 0.1 代码分析"></a>用来在MEOS里抓取屏幕，不过这个版本并不完善。 在这个版本里，程序所用的方法是扫描屏幕上的点然后再写到缓存最后写到文件，这样就会导致速度很慢。 BMP格式文档可以去我的网络硬盘下载http://osdev.ys168.com ;======================================= ;    HotCats ;    Ver : 0.1 ;    BLOG: http://hotheart.go.3322.org ;======================================= bits 32 org    0&#215;0 db &#8216;MENUET01&#8242; ; 8 byte id dd 0&#215;01                        ; header version dd START                        ; start of code dd I_END                        ; size of image dd 0&#215;300000                    ; memory for app dd 0xffff                        ; esp dd 0&#215;0 , 0&#215;0                    ; I_Param , I_Icon START:                                ; start of execution mov eax,14                    ; 获取屏幕分辨率 int 0&#215;40 xor ebx,ebx mov bx,ax shr eax,16 inc eax ; X size inc &#8230;<p class="read-more"><a href="http://xujiwei.com/blog/menuetos-hotcats-0-1-code-comments/">Read more &#187;</a>]]></description>
			<content:encoded><![CDATA[<a href="http://xujiwei.com/blog/menuetos-hotcats-0-1-code-comments/" title="[MenuetOS] HotCats 0.1 代码分析"></a><div class="post-content">

用来在MEOS里抓取屏幕，不过这个版本并不完善。

在这个版本里，程序所用的方法是扫描屏幕上的点然后再写到缓存最后写到文件，这样就会导致速度很慢。

BMP格式文档可以去我的网络硬盘下载<a rel="external" href="http://osdev.ys168.com">http://osdev.ys168.com</a>

<span style="color: #008000;">;=======================================</span>

<span style="color: #008000;">;    HotCats</span>

<span style="color: #008000;">;    Ver : 0.1</span>

<span style="color: #008000;">;    BLOG: <a rel="external" href="http://hotheart.go.3322.org">http://hotheart.go.3322.org</a></span>

<span style="color: #008000;">;=======================================</span>

bits 32

org    0&#215;0

<span style="color: #ff00ff;">db</span> <span style="color: #808080;">&#8216;MENUET01&#8242;</span> <span style="color: #008000;">; 8 byte id</span>

<span style="color: #ff00ff;">dd</span> 0&#215;01                        <span style="color: #008000;">; header version</span>

<span style="color: #ff00ff;">dd</span> START                        <span style="color: #008000;">; start of code</span>

<span style="color: #ff00ff;">dd</span> I_END                        <span style="color: #008000;">; size of image</span>

<span style="color: #ff00ff;">dd</span> 0&#215;300000                    <span style="color: #008000;">; memory for app</span>

<span style="color: #ff00ff;">dd</span> 0xffff                        <span style="color: #008000;">; esp</span>

<span style="color: #ff00ff;">dd</span> 0&#215;0 , 0&#215;0                    <span style="color: #008000;">; I_Param , I_Icon</span>

START:                                <span style="color: #008000;">; start of execution</span>

<span style="color: #0000d0;">mov</span> <span style="color: #ff0000;">eax</span>,14                    <span style="color: #008000;">; 获取屏幕分辨率</span>

<span style="color: #0000d0;">int</span> 0&#215;40

<span style="color: #0000d0;">xor</span> <span style="color: #ff0000;">ebx</span>,<span style="color: #ff0000;">ebx</span>

<span style="color: #0000d0;">mov</span> <span style="color: #ff0000;">bx</span>,<span style="color: #ff0000;">ax</span>

<span style="color: #0000d0;">shr</span> <span style="color: #ff0000;">eax</span>,16

<span style="color: #0000d0;">inc</span> <span style="color: #ff0000;">eax</span> <span style="color: #008000;">; X size</span>

<span style="color: #0000d0;">inc</span> <span style="color: #ff0000;">ebx</span> <span style="color: #008000;">; Y size</span>

<span style="color: #0000d0;">mov</span> [scr_x],<span style="color: #ff0000;">eax</span>

<span style="color: #0000d0;">mov</span> [scr_y],<span style="color: #ff0000;">ebx</span>

<span style="color: #0000d0;">mov</span> [img_w],<span style="color: #ff0000;">eax</span>

<span style="color: #0000d0;">mov</span> [img_h],<span style="color: #ff0000;">ebx</span>

<span style="color: #0000d0;">imul</span> <span style="color: #ff0000;">ebx</span>

<span style="color: #0000d0;">imul</span> <span style="color: #ff0000;">eax</span>,3                    <span style="color: #008000;">; image data size</span>

<span style="color: #0000d0;">mov</span> [img_s],<span style="color: #ff0000;">eax</span>

<span style="color: #0000d0;">add</span> <span style="color: #ff0000;">eax</span>,0&#215;36                <span style="color: #008000;">; BMP header size</span>

<span style="color: #0000d0;">mov</span> [imgf_s],<span style="color: #ff0000;">eax</span>

<span style="color: #0000d0;">mov</span> [f_s],<span style="color: #ff0000;">eax</span>

<span style="color: #0000d0;">mov</span> <span style="color: #ff0000;">esi</span>,bminfo                <span style="color: #008000;">; fill the header</span>

<span style="color: #0000d0;">mov</span> <span style="color: #ff0000;">edi</span>,filestart

<span style="color: #0000d0;">mov</span> <span style="color: #ff0000;">ecx</span>,0&#215;36/4

<span style="color: #0000d0;">cld</span>

<span style="color: #0000d0;">repz</span> <span style="color: #0000d0;">movsd</span>

<span style="color: #0000d0;">call</span> draw_window                <span style="color: #008000;">; draw the window</span>

still:

<span style="color: #0000d0;">mov</span> <span style="color: #ff0000;">eax</span>,10                    <span style="color: #008000;">; wait here for event</span>

<span style="color: #0000d0;">int</span> 0&#215;40

<span style="color: #0000d0;">cmp</span> <span style="color: #ff0000;">eax</span>,1                    <span style="color: #008000;">; redraw request ?</span>

<span style="color: #0000d0;">je</span> red

<span style="color: #0000d0;">cmp</span> <span style="color: #ff0000;">eax</span>,2                    <span style="color: #008000;">; key in buffer ?</span>

<span style="color: #0000d0;">je</span> key

<span style="color: #0000d0;">cmp</span> <span style="color: #ff0000;">eax</span>,3                    <span style="color: #008000;">; button in buffer ?</span>

<span style="color: #0000d0;">je</span> button

<span style="color: #0000d0;">jmp</span> still

red:                                <span style="color: #008000;">; redraw</span>

<span style="color: #0000d0;">call</span> draw_window

<span style="color: #0000d0;">jmp</span> still

key:                                <span style="color: #008000;">; key</span>

<span style="color: #0000d0;">mov</span> <span style="color: #ff0000;">eax</span>,2                    <span style="color: #008000;">; just read it and ignore</span>

<span style="color: #0000d0;">int</span> 0&#215;40

<span style="color: #0000d0;">jmp</span> still

button:                            <span style="color: #008000;">; button</span>

<span style="color: #0000d0;">mov</span> <span style="color: #ff0000;">eax</span>,17                    <span style="color: #008000;">; get id</span>

<span style="color: #0000d0;">int</span> 0&#215;40

<span style="color: #0000d0;">cmp</span> <span style="color: #ff0000;">ah</span>,1                    <span style="color: #008000;">; button id=1 ?</span>

<span style="color: #0000d0;">jne</span> .cmdcap

<span style="color: #0000d0;">mov</span> <span style="color: #ff0000;">eax</span>,-1                    <span style="color: #008000;">; close this program</span>

<span style="color: #0000d0;">int</span> 0&#215;40

.cmdcap:

<span style="color: #0000d0;">cmp</span> <span style="color: #ff0000;">ah</span>,cmdcap                <span style="color: #008000;">; is the Capture button ?</span>

<span style="color: #0000d0;">jne</span> .cmdsave

<span style="color: #0000d0;">call</span> capall                    <span style="color: #008000;">; capture the whole screen</span>

<span style="color: #0000d0;">jmp</span> still

.cmdsave:

<span style="color: #0000d0;">cmp</span> <span style="color: #ff0000;">ah</span>,cmdsave                <span style="color: #008000;">; is the save button</span>

<span style="color: #0000d0;">jne</span> .end

<span style="color: #0000d0;">call</span> savefile                <span style="color: #008000;">; save the file</span>

<span style="color: #0000d0;">jmp</span> still

.end:

<span style="color: #0000d0;">jmp</span> still

<span style="color: #008000;">;   *********************************************</span>

<span style="color: #008000;">;   *******  WINDOW DEFINITIONS AND DRAW ********</span>

<span style="color: #008000;">;   *********************************************</span>

draw_window:

<span style="color: #0000d0;">mov</span> <span style="color: #ff0000;">eax</span>,12                    <span style="color: #008000;">; function 12:tell os about windowdraw</span>

<span style="color: #0000d0;">mov</span> <span style="color: #ff0000;">ebx</span>,1                    <span style="color: #008000;">; 1, start of draw</span>

<span style="color: #0000d0;">int</span> 0&#215;40

<span style="color: #008000;">; DRAW WINDOW</span>

<span style="color: #0000d0;">mov</span> <span style="color: #ff0000;">eax</span>,0

<span style="color: #0000d0;">mov</span> <span style="color: #ff0000;">ebx</span>,[scr_x]

<span style="color: #0000d0;">sub</span> <span style="color: #ff0000;">ebx</span>,win_w+5

<span style="color: #0000d0;">imul</span> <span style="color: #ff0000;">ebx</span>,65536

<span style="color: #0000d0;">add</span> <span style="color: #ff0000;">ebx</span>,win_w

<span style="color: #0000d0;">mov</span> <span style="color: #ff0000;">ecx</span>,[scr_y]

<span style="color: #0000d0;">sub</span> <span style="color: #ff0000;">ecx</span>,win_h+25

<span style="color: #0000d0;">imul</span> <span style="color: #ff0000;">ecx</span>,65536

<span style="color: #0000d0;">add</span> <span style="color: #ff0000;">ecx</span>,win_h

<span style="color: #0000d0;">mov</span> <span style="color: #ff0000;">edx</span>,0x03ffffff

<span style="color: #0000d0;">mov</span> <span style="color: #ff0000;">esi</span>,0x40ffffff

<span style="color: #0000d0;">mov</span> <span style="color: #ff0000;">edi</span>,0x00ffffff

<span style="color: #0000d0;">int</span> 0&#215;40

<span style="color: #008000;">; WINDOW LABEL</span>

<span style="color: #0000d0;">mov</span> <span style="color: #ff0000;">eax</span>,4                    <span style="color: #008000;">; function 4 : write text to window</span>

<span style="color: #0000d0;">mov</span> <span style="color: #ff0000;">ebx</span>,8*65536+8            <span style="color: #008000;">; [x start] *65536 + [y start]</span>

<span style="color: #0000d0;">mov</span> <span style="color: #ff0000;">ecx</span>,0x10ddeeff            <span style="color: #008000;">; font 1 &amp; color ( 0xF0RRGGBB )</span>

<span style="color: #0000d0;">mov</span> <span style="color: #ff0000;">edx</span>,labelt                <span style="color: #008000;">; pointer to text beginning</span>

<span style="color: #0000d0;">mov</span> <span style="color: #ff0000;">esi</span>,labellen-labelt        <span style="color: #008000;">; text length</span>

<span style="color: #0000d0;">int</span> 0&#215;40

<span style="color: #008000;">; Button Capture</span>

<span style="color: #0000d0;">mov</span> <span style="color: #ff0000;">eax</span>,8

<span style="color: #0000d0;">mov</span> <span style="color: #ff0000;">ebx</span>,10*65536+40

<span style="color: #0000d0;">mov</span> <span style="color: #ff0000;">ecx</span>,(win_h-10-14)*65536+14

<span style="color: #0000d0;">mov</span> <span style="color: #ff0000;">edx</span>,cmdcap

<span style="color: #0000d0;">mov</span> <span style="color: #ff0000;">esi</span>,0xaabbcc

<span style="color: #0000d0;">int</span> 0&#215;40

<span style="color: #008000;">; Button Save</span>

<span style="color: #0000d0;">mov</span> <span style="color: #ff0000;">eax</span>,8

<span style="color: #0000d0;">mov</span> <span style="color: #ff0000;">ebx</span>,(10+40+10)*65536+40

<span style="color: #0000d0;">mov</span> <span style="color: #ff0000;">ecx</span>,(win_h-10-14)*65536+14

<span style="color: #0000d0;">mov</span> <span style="color: #ff0000;">edx</span>,cmdsave

<span style="color: #0000d0;">mov</span> <span style="color: #ff0000;">esi</span>,0xaabbcc

<span style="color: #0000d0;">int</span> 0&#215;40

<span style="color: #008000;">; Button Text</span>

<span style="color: #0000d0;">mov</span> <span style="color: #ff0000;">eax</span>,4                        <span style="color: #008000;">; function 4 : write text to window</span>

<span style="color: #0000d0;">mov</span> <span style="color: #ff0000;">ebx</span>,18*65536+(win_h-10-14+4)<span style="color: #008000;">; [x start] *65536 + [y start]</span>

<span style="color: #0000d0;">mov</span> <span style="color: #ff0000;">ecx</span>,0&#215;00444444                <span style="color: #008000;">; font 1 &amp; color ( 0xF0RRGGBB )</span>

<span style="color: #0000d0;">mov</span> <span style="color: #ff0000;">edx</span>,btext                    <span style="color: #008000;">; pointer to text beginning</span>

<span style="color: #0000d0;">mov</span> <span style="color: #ff0000;">esi</span>,btexte-btext            <span style="color: #008000;">; text length</span>

<span style="color: #0000d0;">int</span> 0&#215;40

<span style="color: #0000d0;">mov</span> <span style="color: #ff0000;">eax</span>,12                    <span style="color: #008000;">; function 12:tell os about windowdraw</span>

<span style="color: #0000d0;">mov</span> <span style="color: #ff0000;">ebx</span>,2                    <span style="color: #008000;">; 2, end of draw</span>

<span style="color: #0000d0;">int</span> 0&#215;40

<span style="color: #0000d0;">ret</span>

<span style="color: #0000d0;">mov</span> <span style="color: #ff0000;">eax</span>,47                    <span style="color: #008000;">; display the screen size</span>

<span style="color: #0000d0;">mov</span> <span style="color: #ff0000;">ebx</span>,4*65536

<span style="color: #0000d0;">mov</span> <span style="color: #ff0000;">ecx</span>,[scr_x]

<span style="color: #0000d0;">mov</span> <span style="color: #ff0000;">edx</span>,120*65536+30

<span style="color: #0000d0;">mov</span> <span style="color: #ff0000;">esi</span>,0&#215;0

<span style="color: #0000d0;">int</span> 0&#215;40

<span style="color: #0000d0;">mov</span> <span style="color: #ff0000;">eax</span>,47

<span style="color: #0000d0;">mov</span> <span style="color: #ff0000;">ebx</span>,4*65536

<span style="color: #0000d0;">mov</span> <span style="color: #ff0000;">ecx</span>,[scr_y]

<span style="color: #0000d0;">mov</span> <span style="color: #ff0000;">edx</span>,120*65536+40

<span style="color: #0000d0;">mov</span> <span style="color: #ff0000;">esi</span>,0&#215;0

<span style="color: #0000d0;">int</span> 0&#215;40

capall:

<span style="color: #0000d0;">mov</span> <span style="color: #ff0000;">edi</span>,imgarea

<span style="color: #0000d0;">mov</span> <span style="color: #ff0000;">ecx</span>,[scr_y]

<span style="color: #0000d0;">cld</span>

.nextline:

<span style="color: #0000d0;">mov</span> <span style="color: #ff0000;">ebx</span>,<span style="color: #ff0000;">ecx</span>

<span style="color: #0000d0;">dec</span> <span style="color: #ff0000;">ebx</span>

<span style="color: #0000d0;">imul</span> <span style="color: #ff0000;">ebx</span>,[scr_x]

<span style="color: #0000d0;">push</span> <span style="color: #ff0000;">ecx</span>

<span style="color: #0000d0;">mov</span> <span style="color: #ff0000;">ecx</span>,[scr_x]

.capline:

<span style="color: #0000d0;">push</span> <span style="color: #ff0000;">edi</span>

<span style="color: #0000d0;">push</span> <span style="color: #ff0000;">ebx</span>

<span style="color: #0000d0;">mov</span> <span style="color: #ff0000;">eax</span>,35                    <span style="color: #008000;">; get pixel</span>

<span style="color: #0000d0;">int</span> 0&#215;40

<span style="color: #0000d0;">stosd</span>

<span style="color: #0000d0;">pop</span> <span style="color: #ff0000;">ebx</span>

<span style="color: #0000d0;">pop</span> <span style="color: #ff0000;">edi</span>

<span style="color: #0000d0;">inc</span> <span style="color: #ff0000;">ebx</span>

<span style="color: #0000d0;">add</span> <span style="color: #ff0000;">edi</span>,3

<span style="color: #0000d0;">loop</span> .capline

<span style="color: #0000d0;">pop</span> <span style="color: #ff0000;">ecx</span>

<span style="color: #0000d0;">loop</span> .nextline

.end:

<span style="color: #0000d0;">ret</span>

savefile:                            <span style="color: #008000;">; save the file</span>

<span style="color: #0000d0;">mov</span> <span style="color: #ff0000;">eax</span>,58

<span style="color: #0000d0;">mov</span> <span style="color: #ff0000;">ebx</span>,fileinfo

<span style="color: #0000d0;">int</span> 0&#215;40

<span style="color: #0000d0;">ret</span>

<span style="color: #008000;">; DATA AREA</span>

win_w        <span style="color: #ff00ff;">equ</span> 250

win_h        <span style="color: #ff00ff;">equ</span> 50

cmdcap        <span style="color: #ff00ff;">equ</span> 2

cmdsave        <span style="color: #ff00ff;">equ</span> 3

filestart    <span style="color: #ff00ff;">equ</span> 0&#215;20000

imgarea        <span style="color: #ff00ff;">equ</span> filestart+0&#215;36

scr_x    <span style="color: #ff00ff;">dd</span> 0

scr_y    <span style="color: #ff00ff;">dd</span> 0

zoom    <span style="color: #ff00ff;">dd</span> 2

fileinfo:

<span style="color: #ff00ff;">dd</span> 1                    <span style="color: #008000;">; 1=WRITE</span>

<span style="color: #ff00ff;">dd</span> 0&#215;0                    <span style="color: #008000;">; not used</span>

f_s  <span style="color: #ff00ff;">dd</span> 800*600*3+0&#215;36        <span style="color: #008000;">; bytes to write</span>

<span style="color: #ff00ff;">dd</span> filestart            <span style="color: #008000;">; source data pointer</span>

<span style="color: #ff00ff;">dd</span> 0&#215;10000                <span style="color: #008000;">; work area for os - 16384 bytes</span>

<span style="color: #ff00ff;">db</span> <span style="color: #808080;">&#8216;/HD/1/TEST.BMP&#8217;</span>,0    <span style="color: #008000;">; ASCIIZ dir &amp; filename</span>

btext:  <span style="color: #ff00ff;">db</span> <span style="color: #808080;">&#8216; Cat     Save  &#8217;</span>

btexte:

labelt:

<span style="color: #ff00ff;">db</span> <span style="color: #808080;">&#8216;HotCats 0.1 - HotHeart HotWorks 2005&#8242;</span>

labellen:

bminfo:

<span style="color: #ff00ff;">db</span> <span style="color: #808080;">&#8216;BM&#8217;</span> <span style="color: #008000;">; 0000-0001 位图标志</span>

imgf_s    <span style="color: #ff00ff;">dd</span> 800*600*3+0&#215;36    <span style="color: #008000;">; 0002-0005 文件大小</span>

<span style="color: #ff00ff;">dd</span> 0&#215;0                <span style="color: #008000;">; 0006-0009 保留</span>

<span style="color: #ff00ff;">db</span> 0&#215;36,0&#215;0,0&#215;0,0&#215;0<span style="color: #008000;">; 000A-000D 文件头信息块大小,图像描述信息块的大小,图像颜色表的大小,保留(为01)</span>

<span style="color: #ff00ff;">dd</span> 0&#215;28            <span style="color: #008000;">; 000E-0011 图像描述信息块的大小，常为28H。</span>

img_w    <span style="color: #ff00ff;">dd</span> 800                <span style="color: #008000;">; 0012-0015    图像宽度。</span>

img_h    <span style="color: #ff00ff;">dd</span> 600                <span style="color: #008000;">; 0016-0019    图像高度。</span>

<span style="color: #ff00ff;">dw</span> 0&#215;1                <span style="color: #008000;">; 001A-001B    图像的plane总数（恒为1）。</span>

<span style="color: #ff00ff;">dw</span> 24                <span style="color: #008000;">; 001C-001D    数据压缩方式（数值位0：不压缩；1：8位压缩；2：4位压缩）。</span>

<span style="color: #ff00ff;">dd</span> 0                <span style="color: #008000;">; 001E-0021    记录像素的位数，很重要的数值，图像的颜色数由该值决定。</span>

img_s    <span style="color: #ff00ff;">dd</span> 800*600*3        <span style="color: #008000;">; 0022-0025    图像区数据的大小。</span>

<span style="color: #ff00ff;">dd</span> 0&#215;0                <span style="color: #008000;">; 0026-0029    水平每米有多少像素，在设备无关位图（.DIB）中，每字节以00H填写。</span>

<span style="color: #ff00ff;">dd</span> 0&#215;0                <span style="color: #008000;">; 002A-002D    垂直每米有多少像素，在设备无关位图（.DIB）中，每字节以00H填写。</span>

<span style="color: #ff00ff;">dd</span> 0&#215;0                <span style="color: #008000;">; 002E-0031    此图像所用的颜色数，如值为0，表示所有颜色一样重要。</span>

<span style="color: #ff00ff;">dd</span> 0&#215;0                <span style="color: #008000;">; 0032-0035 未用</span>

I_END:

</div>
]]></content:encoded>
			<wfw:commentRss>http://xujiwei.com/blog/menuetos-hotcats-0-1-code-comments/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[MenuetOS] HotRun 0.4 代码分析</title>
		<link>http://xujiwei.com/blog/menuetos-hotrun-0-4-code-comments/</link>
		<comments>http://xujiwei.com/blog/menuetos-hotrun-0-4-code-comments/#comments</comments>
		<pubDate>Fri, 22 Jul 2005 06:53:38 +0000</pubDate>
		<dc:creator>Xu Jiwei</dc:creator>
				<category><![CDATA[Desktop]]></category>
		<category><![CDATA[ASM]]></category>
		<category><![CDATA[HotRun]]></category>
		<category><![CDATA[MenuetOS]]></category>

		<guid isPermaLink="false">http://tmp.xujiwei.com/blog/?p=135</guid>
		<description><![CDATA[<a href="http://xujiwei.com/blog/menuetos-hotrun-0-4-code-comments/" title="[MenuetOS] HotRun 0.4 代码分析"></a>; Made by HotHeart ; http://www.xujiwei.com ; vipxjw@tom.com ; MENUET RUN 0.4 ; 1) 缺省目录 /RD/1/ ; 2) 可以更改程序目录,在SETUP里设置硬盘后可以运行 ;    硬盘上的程序 ; 3) 只能访问根目录 ; 4) 自动根据屏幕大小调整窗口位置(限任务栏为文字模式) use32 org    0&#215;0 db &#8216;MENUET01&#8242; ; 8 byte id dd 0&#215;01                    ; header version dd START                   ; start of code dd I_END                   ; size of image dd 0&#215;100000                ; memory for app dd 0x7fff0                 ; esp dd 0&#215;0 , 0&#215;0               ; I_Param , I_Icon START:                          ; start of execution ; 计算窗口位置 mov eax,14 int 0&#215;40 mov [screenysize],ax xor eax,eax mov ax,[screenysize] sub eax,116+20 &#8230;<p class="read-more"><a href="http://xujiwei.com/blog/menuetos-hotrun-0-4-code-comments/">Read more &#187;</a>]]></description>
			<content:encoded><![CDATA[<a href="http://xujiwei.com/blog/menuetos-hotrun-0-4-code-comments/" title="[MenuetOS] HotRun 0.4 代码分析"></a><div class="post-content">

<span style="color: #008000;">; Made by HotHeart</span>

<span style="color: #008000;">; <a rel="external" href="http://www.xujiwei.com">http://www.xujiwei.com</a></span>

<span style="color: #008000;">; vipxjw@tom.com</span>

<span style="color: #008000;">; MENUET RUN 0.4</span>

<span style="color: #008000;">; 1) 缺省目录 /RD/1/</span>

<span style="color: #008000;">; 2) 可以更改程序目录,在SETUP里设置硬盘后可以运行</span>

<span style="color: #008000;">;    硬盘上的程序</span>

<span style="color: #008000;">; 3) 只能访问根目录</span>

<span style="color: #008000;">; 4) 自动根据屏幕大小调整窗口位置(限任务栏为文字模式)</span>

use32

org    0&#215;0

<span style="color: #ff00ff;">db</span> <span style="color: #808080;">&#8216;MENUET01&#8242;</span> <span style="color: #008000;">; 8 byte id</span>

<span style="color: #ff00ff;">dd</span> 0&#215;01                    <span style="color: #008000;">; header version</span>

<span style="color: #ff00ff;">dd</span> START                   <span style="color: #008000;">; start of code</span>

<span style="color: #ff00ff;">dd</span> I_END                   <span style="color: #008000;">; size of image</span>

<span style="color: #ff00ff;">dd</span> 0&#215;100000                <span style="color: #008000;">; memory for app</span>

<span style="color: #ff00ff;">dd</span> 0x7fff0                 <span style="color: #008000;">; esp</span>

<span style="color: #ff00ff;">dd</span> 0&#215;0 , 0&#215;0               <span style="color: #008000;">; I_Param , I_Icon</span>

START:                          <span style="color: #008000;">; start of execution</span>

<span style="color: #008000;">; 计算窗口位置</span>

<span style="color: #0000d0;">mov</span> <span style="color: #ff0000;">eax</span>,14

<span style="color: #0000d0;">int</span> 0&#215;40

<span style="color: #0000d0;">mov</span> [screenysize],<span style="color: #ff0000;">ax</span>

<span style="color: #0000d0;">xor</span> <span style="color: #ff0000;">eax</span>,<span style="color: #ff0000;">eax</span>

<span style="color: #0000d0;">mov</span> <span style="color: #ff0000;">ax</span>,[screenysize]

<span style="color: #0000d0;">sub</span> <span style="color: #ff0000;">eax</span>,116+20

<span style="color: #0000d0;">imul</span> <span style="color: #ff0000;">eax</span>,65536

<span style="color: #0000d0;">add</span> <span style="color: #ff0000;">eax</span>,116

<span style="color: #0000d0;">mov</span> [winy],<span style="color: #ff0000;">eax</span>

<span style="color: #008000;">; 初始化变量</span>

<span style="color: #0000d0;">mov</span> [filestr],<span style="color: #ff00ff;">dword</span> runprogram

<span style="color: #0000d0;">mov</span> [dir],<span style="color: #ff00ff;">dword</span> rundir

<span style="color: #0000d0;">mov</span> [ya],<span style="color: #ff00ff;">dword</span> 53

<span style="color: #0000d0;">mov</span> [yb],<span style="color: #ff00ff;">dword</span> 69

<span style="color: #0000d0;">call</span> draw_window

still:

<span style="color: #0000d0;">mov</span> <span style="color: #ff0000;">eax</span>,23                 <span style="color: #008000;">; wait here for event</span>

<span style="color: #0000d0;">int</span> 0&#215;40

<span style="color: #0000d0;">cmp</span> <span style="color: #ff0000;">eax</span>,1                  <span style="color: #008000;">; redraw request ?</span>

<span style="color: #0000d0;">je</span> red

<span style="color: #0000d0;">cmp</span> <span style="color: #ff0000;">eax</span>,2                  <span style="color: #008000;">; key in buffer ?</span>

<span style="color: #0000d0;">je</span> key

<span style="color: #0000d0;">cmp</span> <span style="color: #ff0000;">eax</span>,3                  <span style="color: #008000;">; button in buffer ?</span>

<span style="color: #0000d0;">je</span> button

<span style="color: #0000d0;">jmp</span> still

red:                          <span style="color: #008000;">; redraw</span>

<span style="color: #0000d0;">call</span> draw_window

<span style="color: #0000d0;">jmp</span> still

key:                          <span style="color: #008000;">; key</span>

<span style="color: #0000d0;">mov</span> <span style="color: #ff0000;">eax</span>,2                  <span style="color: #008000;">; just read it and ignore</span>

<span style="color: #0000d0;">int</span> 0&#215;40

<span style="color: #0000d0;">jmp</span> still

button:                       <span style="color: #008000;">; button</span>

<span style="color: #0000d0;">mov</span> <span style="color: #ff0000;">eax</span>,17                 <span style="color: #008000;">; get id</span>

<span style="color: #0000d0;">int</span> 0&#215;40

<span style="color: #0000d0;">cmp</span> <span style="color: #ff0000;">ah</span>,4                  <span style="color: #008000;">; id=4 结束</span>

<span style="color: #0000d0;">je</span> close

<span style="color: #0000d0;">cmp</span> <span style="color: #ff0000;">ah</span>,1

<span style="color: #0000d0;">je</span> close

<span style="color: #0000d0;">cmp</span> <span style="color: #ff0000;">ah</span>,2                  <span style="color: #008000;">; id=2 输入文件名</span>

<span style="color: #0000d0;">je</span> inputfile

<span style="color: #0000d0;">cmp</span> <span style="color: #ff0000;">ah</span>,5                  <span style="color: #008000;">; id=5 输入路径</span>

<span style="color: #0000d0;">je</span> inputdir

<span style="color: #0000d0;">cmp</span> <span style="color: #ff0000;">ah</span>,3                  <span style="color: #008000;">; id=3 运行程序</span>

<span style="color: #0000d0;">je</span> runp

<span style="color: #0000d0;">jmp</span> still

file_start: <span style="color: #ff00ff;">dd</span> 16

<span style="color: #ff00ff;">dd</span> 0,0,0,0&#215;10000

rundir:     <span style="color: #ff00ff;">db</span> <span style="color: #808080;">&#8216;/RD/1/&#8217;</span> <span style="color: #008000;">; 缺省目录</span>

runprogram: <span style="color: #ff00ff;">db</span> <span style="color: #808080;">&#8216;RUN&#8217;</span>,0        <span style="color: #008000;">; 缺省程序</span>

times 60 <span style="color: #ff00ff;">db</span> 0

filestr  <span style="color: #ff00ff;">dd</span> 0&#215;0

dir      <span style="color: #ff00ff;">dd</span> 0&#215;0

<span style="color: #ff00ff;">addr</span> <span style="color: #ff00ff;">dd</span> 0&#215;0

ya       <span style="color: #ff00ff;">dd</span> 0&#215;0

yb       <span style="color: #ff00ff;">dd</span> 0&#215;0

<span style="color: #008000;">;==========================================================</span>

close:

<span style="color: #008000;">;结束程序</span>

<span style="color: #0000d0;">mov</span> <span style="color: #ff0000;">eax</span>,-1

<span style="color: #0000d0;">int</span> 0&#215;40

inputfile:

<span style="color: #008000;">;输入文件名</span>

<span style="color: #0000d0;">call</span> read_string_file

<span style="color: #0000d0;">jmp</span> still

inputdir:

<span style="color: #008000;">;输入路径</span>

<span style="color: #0000d0;">call</span> read_string_dir

<span style="color: #0000d0;">jmp</span> still

<span style="color: #008000;">;==========================================================</span>

runp:

<span style="color: #008000;">;运行程序</span>

<span style="color: #0000d0;">mov</span> <span style="color: #ff0000;">eax</span>,58        <span style="color: #008000;">;运行</span>

<span style="color: #0000d0;">mov</span> <span style="color: #ff0000;">ebx</span>,file_start

<span style="color: #0000d0;">int</span> 0&#215;40

<span style="color: #0000d0;">jmp</span> still

<span style="color: #008000;">;==========================================================</span>

read_string_file:

<span style="color: #008000;">;输入文件名</span>

<span style="color: #0000d0;">mov</span> <span style="color: #ff0000;">edi</span>,[filestr]

<span style="color: #0000d0;">mov</span> <span style="color: #ff0000;">eax</span>,0

<span style="color: #0000d0;">mov</span> <span style="color: #ff0000;">ecx</span>,40

<span style="color: #0000d0;">cld</span>

<span style="color: #0000d0;">rep</span> <span style="color: #0000d0;">stosb</span>

<span style="color: #0000d0;">call</span> print_file

<span style="color: #0000d0;">mov</span> <span style="color: #ff0000;">edi</span>,[filestr]

file_fun:

<span style="color: #0000d0;">mov</span> <span style="color: #ff0000;">eax</span>,23        <span style="color: #008000;">; 等待事件</span>

<span style="color: #0000d0;">mov</span> <span style="color: #ff0000;">ebx</span>,100    <span style="color: #008000;">; 延时100毫秒</span>

<span style="color: #0000d0;">int</span> 0&#215;40

<span style="color: #0000d0;">cmp</span> <span style="color: #ff0000;">eax</span>,0        <span style="color: #008000;">; eax=0 无事件</span>

<span style="color: #0000d0;">je</span> file_fun    <span style="color: #008000;">; 继续等待事件过程</span>

<span style="color: #0000d0;">cmp</span> <span style="color: #ff0000;">eax</span>,2        <span style="color: #008000;">; eax=2 按钮事件</span>

<span style="color: #0000d0;">jne</span> file_read_done    <span style="color: #008000;">; 跳到读取键盘事件结束</span>

<span style="color: #0000d0;">mov</span> <span style="color: #ff0000;">eax</span>,2        <span style="color: #008000;">; 获取击键 ascii 码</span>

<span style="color: #0000d0;">int</span> 0&#215;40

<span style="color: #0000d0;">shr</span> <span style="color: #ff0000;">eax</span>,8

<span style="color: #0000d0;">cmp</span> <span style="color: #ff0000;">eax</span>,13        <span style="color: #008000;">; 是否为回车键</span>

<span style="color: #0000d0;">je</span> file_read_done    <span style="color: #008000;">; 是则跳到读取结束</span>

<span style="color: #0000d0;">cmp</span> <span style="color: #ff0000;">eax</span>,8        <span style="color: #008000;">; 是否为退格键</span>

<span style="color: #0000d0;">jnz</span> file_nobsl    <span style="color: #008000;">; 不是则跳到 nobsl</span>

<span style="color: #0000d0;">cmp</span> <span style="color: #ff0000;">edi</span>,[filestr]

<span style="color: #0000d0;">jz</span> file_fun

<span style="color: #0000d0;">sub</span> <span style="color: #ff0000;">edi</span>,1        <span style="color: #008000;">; 字符数量减 1</span>

<span style="color: #0000d0;">mov</span> [<span style="color: #ff0000;">edi</span>],<span style="color: #ff00ff;">byte</span> 32    <span style="color: #008000;">; 退格</span>

<span style="color: #0000d0;">call</span> print_file    <span style="color: #008000;">; 显示字符串</span>

<span style="color: #0000d0;">jmp</span> file_fun    <span style="color: #008000;">; 继续读取</span>

file_nobsl:

<span style="color: #0000d0;">cmp</span> <span style="color: #ff0000;">al</span>,95        <span style="color: #008000;">; 判断是否为小写</span>

<span style="color: #0000d0;">jbe</span> file_cok    <span style="color: #008000;">; 是则跳到 cok</span>

<span style="color: #0000d0;">sub</span> <span style="color: #ff0000;">al</span>,32        <span style="color: #008000;">; 不是则将 ascii 减去 32</span>

file_cok:

<span style="color: #0000d0;">mov</span> [<span style="color: #ff0000;">edi</span>],<span style="color: #ff0000;">al</span> <span style="color: #008000;">; 添加到字符串</span>

<span style="color: #0000d0;">call</span> print_file    <span style="color: #008000;">; 显示字符串</span>

<span style="color: #0000d0;">add</span> <span style="color: #ff0000;">edi</span>,1        <span style="color: #008000;">; 已读取字符数量</span>

<span style="color: #0000d0;">mov</span> <span style="color: #ff0000;">esi</span>,[filestr]    <span style="color: #008000;">; 读入字符串地址</span>

<span style="color: #0000d0;">add</span> <span style="color: #ff0000;">esi</span>,30        <span style="color: #008000;">; 加上 30</span>

<span style="color: #0000d0;">cmp</span> <span style="color: #ff0000;">esi</span>,<span style="color: #ff0000;">edi</span> <span style="color: #008000;">; 比较</span>

<span style="color: #0000d0;">jnz</span> file_fun    <span style="color: #008000;">; 未到最大长度</span>

file_read_done:    <span style="color: #008000;">; 读取结束</span>

<span style="color: #0000d0;">mov</span> [<span style="color: #ff0000;">edi</span>],<span style="color: #ff00ff;">byte</span> 0    <span style="color: #008000;">; 结束标志</span>

<span style="color: #0000d0;">call</span> print_file    <span style="color: #008000;">; 显示字符串</span>

<span style="color: #0000d0;">jmp</span> still        <span style="color: #008000;">; 事件循环</span>

<span style="color: #008000;">;==========================================================</span>

read_string_dir:

<span style="color: #0000d0;">mov</span> <span style="color: #ff0000;">edi</span>,[dir]

<span style="color: #0000d0;">mov</span> <span style="color: #ff0000;">eax</span>,0

<span style="color: #0000d0;">mov</span> <span style="color: #ff0000;">ecx</span>,6

<span style="color: #0000d0;">cld</span>

<span style="color: #0000d0;">rep</span> <span style="color: #0000d0;">stosb</span>

<span style="color: #0000d0;">call</span> print_dir

<span style="color: #0000d0;">mov</span> <span style="color: #ff0000;">edi</span>,[dir]

dir_fun:

<span style="color: #0000d0;">mov</span> <span style="color: #ff0000;">eax</span>,23        <span style="color: #008000;">; 等待事件</span>

<span style="color: #0000d0;">mov</span> <span style="color: #ff0000;">ebx</span>,100    <span style="color: #008000;">; 延时100毫秒</span>

<span style="color: #0000d0;">int</span> 0&#215;40

<span style="color: #0000d0;">cmp</span> <span style="color: #ff0000;">eax</span>,0        <span style="color: #008000;">; eax=0 无事件</span>

<span style="color: #0000d0;">je</span> dir_fun    <span style="color: #008000;">; 继续等待事件过程</span>

<span style="color: #0000d0;">cmp</span> <span style="color: #ff0000;">eax</span>,2        <span style="color: #008000;">; eax=2 按钮事件</span>

<span style="color: #0000d0;">jne</span> dir_read_done    <span style="color: #008000;">; 跳到读取键盘事件结束</span>

<span style="color: #0000d0;">mov</span> <span style="color: #ff0000;">eax</span>,2        <span style="color: #008000;">; 获取击键 ascii 码</span>

<span style="color: #0000d0;">int</span> 0&#215;40

<span style="color: #0000d0;">shr</span> <span style="color: #ff0000;">eax</span>,8

<span style="color: #0000d0;">cmp</span> <span style="color: #ff0000;">eax</span>,13        <span style="color: #008000;">; 是否为回车键</span>

<span style="color: #0000d0;">je</span> dir_read_done    <span style="color: #008000;">; 是则跳到读取结束</span>

<span style="color: #0000d0;">cmp</span> <span style="color: #ff0000;">eax</span>,8        <span style="color: #008000;">; 是否为退格键</span>

<span style="color: #0000d0;">jnz</span> dir_nobsl    <span style="color: #008000;">; 不是则跳到 nobsl</span>

<span style="color: #0000d0;">cmp</span> <span style="color: #ff0000;">edi</span>,[filestr]

<span style="color: #0000d0;">jz</span> dir_fun

<span style="color: #0000d0;">sub</span> <span style="color: #ff0000;">edi</span>,1

<span style="color: #0000d0;">mov</span> [<span style="color: #ff0000;">edi</span>],<span style="color: #ff00ff;">byte</span> 32

<span style="color: #0000d0;">call</span> print_dir    <span style="color: #008000;">; 显示字符串</span>

<span style="color: #0000d0;">jmp</span> dir_fun    <span style="color: #008000;">; 继续读取</span>

dir_nobsl:

<span style="color: #0000d0;">cmp</span> <span style="color: #ff0000;">al</span>,95        <span style="color: #008000;">; 判断是否为小写</span>

<span style="color: #0000d0;">jbe</span> dir_cok    <span style="color: #008000;">; 是则跳到 cok</span>

<span style="color: #0000d0;">sub</span> <span style="color: #ff0000;">al</span>,32        <span style="color: #008000;">; 不是则将 ascii 减去 32</span>

dir_cok:

<span style="color: #0000d0;">mov</span> [<span style="color: #ff0000;">edi</span>],<span style="color: #ff0000;">al</span> <span style="color: #008000;">; 添加到字符串</span>

<span style="color: #0000d0;">call</span> print_dir    <span style="color: #008000;">; 显示字符串</span>

<span style="color: #0000d0;">add</span> <span style="color: #ff0000;">edi</span>,1        <span style="color: #008000;">; 已读取字符数量</span>

<span style="color: #0000d0;">mov</span> <span style="color: #ff0000;">esi</span>,[dir]    <span style="color: #008000;">; 读入字符串地址</span>

<span style="color: #0000d0;">add</span> <span style="color: #ff0000;">esi</span>,6        <span style="color: #008000;">; 加上 6</span>

<span style="color: #0000d0;">cmp</span> <span style="color: #ff0000;">esi</span>,<span style="color: #ff0000;">edi</span> <span style="color: #008000;">; 比较</span>

<span style="color: #0000d0;">jnz</span> dir_fun    <span style="color: #008000;">; 未到最大长度</span>

dir_read_done:    <span style="color: #008000;">; 读取结束</span>

<span style="color: #0000d0;">call</span> print_dir    <span style="color: #008000;">; 显示字符串</span>

<span style="color: #0000d0;">jmp</span> still        <span style="color: #008000;">; 事件循环</span>

<span style="color: #008000;">;==========================================================</span>

print_dir:

<span style="color: #008000;">;显示路径</span>

<span style="color: #0000d0;">pusha</span>

<span style="color: #0000d0;">mov</span> <span style="color: #ff0000;">eax</span>,13        <span style="color: #008000;">; 画底纹</span>

<span style="color: #0000d0;">mov</span> <span style="color: #ff0000;">ebx</span>,55*65536+31*6

<span style="color: #0000d0;">mov</span> <span style="color: #ff0000;">ecx</span>,[ya]

<span style="color: #0000d0;">shl</span> <span style="color: #ff0000;">ecx</span>,16

<span style="color: #0000d0;">mov</span> <span style="color: #ff0000;">cx</span>,12

<span style="color: #0000d0;">sub</span> <span style="color: #ff0000;">ecx</span>,2*65536

<span style="color: #0000d0;">mov</span> <span style="color: #ff0000;">edx</span>,0xeeeeee

<span style="color: #0000d0;">int</span> 0&#215;40

<span style="color: #0000d0;">mov</span> <span style="color: #ff0000;">eax</span>,4        <span style="color: #008000;">; 显示路径</span>

<span style="color: #0000d0;">mov</span> <span style="color: #ff0000;">edx</span>,[dir]

<span style="color: #0000d0;">mov</span> <span style="color: #ff0000;">ebx</span>,56*65536

<span style="color: #0000d0;">add</span> <span style="color: #ff0000;">ebx</span>,[ya]

<span style="color: #0000d0;">mov</span> <span style="color: #ff0000;">ecx</span>,0&#215;444444

<span style="color: #0000d0;">mov</span> <span style="color: #ff0000;">esi</span>,6

<span style="color: #0000d0;">int</span> 0&#215;40

<span style="color: #0000d0;">popa</span>

<span style="color: #0000d0;">ret</span>

<span style="color: #008000;">;==========================================================</span>

print_file:

<span style="color: #008000;">;显示文件名</span>

<span style="color: #0000d0;">pusha</span>

<span style="color: #0000d0;">mov</span> <span style="color: #ff0000;">eax</span>,13        <span style="color: #008000;">; 画底纹</span>

<span style="color: #0000d0;">mov</span> <span style="color: #ff0000;">ebx</span>,55*65536+31*6

<span style="color: #0000d0;">mov</span> <span style="color: #ff0000;">ecx</span>,[yb]

<span style="color: #0000d0;">shl</span> <span style="color: #ff0000;">ecx</span>,16

<span style="color: #0000d0;">mov</span> <span style="color: #ff0000;">cx</span>,12

<span style="color: #0000d0;">sub</span> <span style="color: #ff0000;">ecx</span>,2*65536

<span style="color: #0000d0;">mov</span> <span style="color: #ff0000;">edx</span>,0xeeeeee

<span style="color: #0000d0;">int</span> 0&#215;40

<span style="color: #0000d0;">mov</span> <span style="color: #ff0000;">eax</span>,4        <span style="color: #008000;">; 显示文件名</span>

<span style="color: #0000d0;">mov</span> <span style="color: #ff0000;">edx</span>,[filestr]

<span style="color: #0000d0;">mov</span> <span style="color: #ff0000;">ebx</span>,56*65536

<span style="color: #0000d0;">add</span> <span style="color: #ff0000;">ebx</span>,[yb]

<span style="color: #0000d0;">mov</span> <span style="color: #ff0000;">ecx</span>,0&#215;444444

<span style="color: #0000d0;">mov</span> <span style="color: #ff0000;">esi</span>,30

<span style="color: #0000d0;">int</span> 0&#215;40

<span style="color: #0000d0;">popa</span>

<span style="color: #0000d0;">ret</span>

<span style="color: #008000;">;==========================================================</span>

<span style="color: #008000;">;   *********************************************</span>

<span style="color: #008000;">;   *******  WINDOW DEFINITIONS AND DRAW ********</span>

<span style="color: #008000;">;   *********************************************</span>

draw_window:

<span style="color: #0000d0;">mov</span> <span style="color: #ff0000;">eax</span>,12                    <span style="color: #008000;">; function 12:tell os about windowdraw</span>

<span style="color: #0000d0;">mov</span> <span style="color: #ff0000;">ebx</span>,1                     <span style="color: #008000;">; 1, start of draw</span>

<span style="color: #0000d0;">int</span> 0&#215;40

<span style="color: #008000;">; DRAW WINDOW</span>

<span style="color: #0000d0;">mov</span> <span style="color: #ff0000;">eax</span>,0                <span style="color: #008000;">; function 0 : define and draw window</span>

<span style="color: #0000d0;">mov</span> <span style="color: #ff0000;">ebx</span>,1*65536+250    <span style="color: #008000;">; [x start] *65536 + [x size]</span>

<span style="color: #0000d0;">mov</span> <span style="color: #ff0000;">ecx</span>,[winy]            <span style="color: #008000;">; [y start] *65536 + [y size]</span>

<span style="color: #0000d0;">mov</span> <span style="color: #ff0000;">edx</span>,0x03ffffff        <span style="color: #008000;">; color of work area RRGGBB,8-&gt;color gl</span>

<span style="color: #0000d0;">mov</span> <span style="color: #ff0000;">esi</span>,0x805080d0        <span style="color: #008000;">; color of grab bar  RRGGBB,8-&gt;color gl</span>

<span style="color: #0000d0;">mov</span> <span style="color: #ff0000;">edi</span>,0x005080d0        <span style="color: #008000;">; color of frames    RRGGBB</span>

<span style="color: #0000d0;">int</span> 0&#215;40

<span style="color: #008000;">; WINDOW LABEL</span>

<span style="color: #0000d0;">mov</span> <span style="color: #ff0000;">eax</span>,4                <span style="color: #008000;">; function 4 : write text to window</span>

<span style="color: #0000d0;">mov</span> <span style="color: #ff0000;">ebx</span>,8*65536+8        <span style="color: #008000;">; [x start] *65536 + [y start]</span>

<span style="color: #0000d0;">mov</span> <span style="color: #ff0000;">ecx</span>,0x10ddeeff        <span style="color: #008000;">; font 1 &amp; color ( 0xF0RRGGBB )</span>

<span style="color: #0000d0;">mov</span> <span style="color: #ff0000;">edx</span>,labelt            <span style="color: #008000;">; pointer to text beginning</span>

<span style="color: #0000d0;">mov</span> <span style="color: #ff0000;">esi</span>,labellen-labelt<span style="color: #008000;">; text length</span>

<span style="color: #0000d0;">int</span> 0&#215;40

<span style="color: #0000d0;">mov</span> <span style="color: #ff0000;">eax</span>,8                <span style="color: #008000;">; 路径输入 id=5</span>

<span style="color: #0000d0;">mov</span> <span style="color: #ff0000;">ebx</span>,13*65536+40

<span style="color: #0000d0;">mov</span> <span style="color: #ff0000;">ecx</span>,50*65536+12

<span style="color: #0000d0;">mov</span> <span style="color: #ff0000;">edx</span>,5

<span style="color: #0000d0;">mov</span> <span style="color: #ff0000;">esi</span>,0xaabbcc

<span style="color: #0000d0;">int</span> 0&#215;40

<span style="color: #0000d0;">mov</span> <span style="color: #ff0000;">eax</span>,8                <span style="color: #008000;">; 文件名输入 id=2</span>

<span style="color: #0000d0;">mov</span> <span style="color: #ff0000;">ebx</span>,13*65536+40

<span style="color: #0000d0;">mov</span> <span style="color: #ff0000;">ecx</span>,66*65536+12

<span style="color: #0000d0;">mov</span> <span style="color: #ff0000;">edx</span>,2

<span style="color: #0000d0;">mov</span> <span style="color: #ff0000;">esi</span>,0xaabbcc

<span style="color: #0000d0;">int</span> 0&#215;40

<span style="color: #0000d0;">mov</span> <span style="color: #ff0000;">eax</span>,8                <span style="color: #008000;">; 确定 id=3</span>

<span style="color: #0000d0;">mov</span> <span style="color: #ff0000;">ebx</span>,128*65536+48

<span style="color: #0000d0;">mov</span> <span style="color: #ff0000;">ecx</span>,84*65536+18

<span style="color: #0000d0;">mov</span> <span style="color: #ff0000;">edx</span>,3

<span style="color: #0000d0;">mov</span> <span style="color: #ff0000;">esi</span>,0xaabbcc

<span style="color: #0000d0;">int</span> 0&#215;40

<span style="color: #0000d0;">mov</span> <span style="color: #ff0000;">eax</span>,8                <span style="color: #008000;">; 取消 id=4</span>

<span style="color: #0000d0;">mov</span> <span style="color: #ff0000;">ebx</span>,182*65536+48

<span style="color: #0000d0;">mov</span> <span style="color: #ff0000;">ecx</span>,84*65536+18

<span style="color: #0000d0;">mov</span> <span style="color: #ff0000;">edx</span>,4

<span style="color: #0000d0;">mov</span> <span style="color: #ff0000;">esi</span>,0xaabbcc

<span style="color: #0000d0;">int</span> 0&#215;40

<span style="color: #0000d0;">mov</span> <span style="color: #ff0000;">ebx</span>,13*65536+34    <span style="color: #008000;">; 提示信息</span>

<span style="color: #0000d0;">mov</span> <span style="color: #ff0000;">ecx</span>,0&#215;666666

<span style="color: #0000d0;">mov</span> <span style="color: #ff0000;">edx</span>,txttxt

<span style="color: #0000d0;">mov</span> <span style="color: #ff0000;">esi</span>,30

<span style="color: #0000d0;">mov</span> <span style="color: #ff0000;">eax</span>,4

<span style="color: #0000d0;">int</span> 0&#215;40

<span style="color: #0000d0;">mov</span> <span style="color: #ff0000;">eax</span>,4                <span style="color: #008000;">; Path按钮文本</span>

<span style="color: #0000d0;">mov</span> <span style="color: #ff0000;">ebx</span>,21*65536+53

<span style="color: #0000d0;">mov</span> <span style="color: #ff0000;">ecx</span>,0&#215;666666

<span style="color: #0000d0;">mov</span> <span style="color: #ff0000;">edx</span>,txtdir

<span style="color: #0000d0;">mov</span> <span style="color: #ff0000;">esi</span>,4

<span style="color: #0000d0;">int</span> 0&#215;40

<span style="color: #0000d0;">mov</span> <span style="color: #ff0000;">ebx</span>,21*65536+69    <span style="color: #008000;">; File按钮文本</span>

<span style="color: #0000d0;">mov</span> <span style="color: #ff0000;">ecx</span>,0&#215;444444

<span style="color: #0000d0;">mov</span> <span style="color: #ff0000;">edx</span>,txtfile

<span style="color: #0000d0;">mov</span> <span style="color: #ff0000;">esi</span>,4

<span style="color: #0000d0;">mov</span> <span style="color: #ff0000;">eax</span>,4

<span style="color: #0000d0;">int</span> 0&#215;40

<span style="color: #0000d0;">mov</span> <span style="color: #ff0000;">ebx</span>,140*65536+89    <span style="color: #008000;">; 确定取消按钮文本</span>

<span style="color: #0000d0;">mov</span> <span style="color: #ff0000;">ecx</span>,0&#215;444444

<span style="color: #0000d0;">mov</span> <span style="color: #ff0000;">edx</span>,txtbutton

<span style="color: #0000d0;">mov</span> <span style="color: #ff0000;">esi</span>,13

<span style="color: #0000d0;">mov</span> <span style="color: #ff0000;">eax</span>,4

<span style="color: #0000d0;">int</span> 0&#215;40

<span style="color: #0000d0;">call</span> print_dir

<span style="color: #0000d0;">call</span> print_file

<span style="color: #0000d0;">mov</span> <span style="color: #ff0000;">eax</span>,12                <span style="color: #008000;">; function 12:tell os about windowdraw</span>

<span style="color: #0000d0;">mov</span> <span style="color: #ff0000;">ebx</span>,2                <span style="color: #008000;">; 2, end of draw</span>

<span style="color: #0000d0;">int</span> 0&#215;40

<span style="color: #0000d0;">ret</span>

<span style="color: #008000;">; DATA AREA</span>

tcolor      <span style="color: #ff00ff;">dd</span> 0&#215;000000

txttxt      <span style="color: #ff00ff;">db</span> <span style="color: #808080;">&#8216;请输入要运行程序的路径和文件名&#8217;</span>,<span style="color: #808080;">&#8216;x&#8217;</span>

txtdir      <span style="color: #ff00ff;">db</span> <span style="color: #808080;">&#8216;Path&#8217;</span>,<span style="color: #808080;">&#8216;x&#8217;</span>

txtfile     <span style="color: #ff00ff;">db</span> <span style="color: #808080;">&#8216;File&#8217;</span>,<span style="color: #808080;">&#8216;x&#8217;</span>

txtbutton   <span style="color: #ff00ff;">db</span> <span style="color: #808080;">&#8216;确定     取消&#8217;</span>,<span style="color: #808080;">&#8216;x&#8217;</span>

screenysize <span style="color: #ff00ff;">dw</span> 0&#215;0

winy        <span style="color: #ff00ff;">dd</span> 0&#215;0

labelt:

<span style="color: #ff00ff;">db</span> <span style="color: #808080;">&#8216;运行&#8217;</span>

labellen:

I_END:
<p class="articletags">标签：<a title="查看关于 “HotRun” 的所有文章" href="./?tag=HotRun">HotRun</a> <a title="查看关于 “汇编” 的所有文章" href="./?tag=%E6%B1%87%E7%BC%96">汇编</a> <a title="查看关于 “MenuetOS” 的所有文章" href="./?tag=MenuetOS">MenuetOS</a></p>
<p class="alignright colorgray">[本日志由 xujiwei 于 2005-07-22 06:24 PM 编辑]</p>
<p class="post-comments">Comments (0), Views (2955), Pings (0), <a href="#commenttitle">Leave a response!</a></p>

</div>
]]></content:encoded>
			<wfw:commentRss>http://xujiwei.com/blog/menuetos-hotrun-0-4-code-comments/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

