{"id":123,"date":"2009-11-05T23:05:38","date_gmt":"2009-11-05T15:05:38","guid":{"rendered":"http:\/\/hgc43160.chinaw3.com\/?p=123"},"modified":"2009-11-05T23:05:38","modified_gmt":"2009-11-05T15:05:38","slug":"xms%e7%9a%84%e4%bd%bf%e7%94%a8","status":"publish","type":"post","link":"http:\/\/www.hyzgame.com\/?p=123","title":{"rendered":"XMS\u7684\u4f7f\u7528"},"content":{"rendered":"<p>\u672c\u6765\u6211\u662f\u4e0d\u51c6\u5907\u5199\u8fd9\u7bc7\u6587\u7ae0\u7684\uff0c\u4f46\u51b7\u4e0d\u59a8\u6709\u4f4d\u540c\u4ec1\u95ee\u8d77\uff0c\u4e5f\u53ea\u597d\u505a\u4e2a\u56de\u7b54\uff0c\u987a\u4fbf\u501f\u6b64\u66f4\u65b0\u4e00\u4e0b\u7f51\u9875\u3002<\/p>\n<p align=\"left\">XMS\uff0c\u6269\u5145\u5185\u5b58\u7ba1\u7406\u89c4\u8303\u3002\u572816bit DOS\u7cfb\u7edf\u4e0b\uff0c\u4e3a\u4e86\u4f7f\u7528640k\u4ee5\u5916\u7684\u5185\u5b58\uff0cXMS\u6210\u4e86\u4e00\u79cd\u6700\u597d\u7684\u624b\u6cd5\u3002<\/p>\n<p align=\"left\">\u5728\u8fd9\u91cc\uff0c\u6211\u4e0d\u60f3\u591a\u8bb2XMS\u7684\u5b9e\u73b0\uff0c\u53ea\u5bf9\u672c\u6587\u6240\u63d0\u4f9b\u7684XMS\u7c7b\u505a\u4e00\u4e0b\u4f7f\u7528\u8bb2\u89e3\u3002<\/p>\n<p align=\"left\">\u4f8b\u5b50\u53ef\u4ee5\u8bf4\u660e\u4e00\u5207\uff1a<\/p>\n<p align=\"left\">#include&#8221;XMS.H&#8221;<br \/>\nvoid main()<br \/>\n{<br \/>\nFILE *fp;<br \/>\nint i;<br \/>\nchar *str;<br \/>\nXMS   xms1(1024);\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0   \/\/\u4e3axms1\u6307\u9488\u5206\u914d1024k\u7684\u5185\u5b58<br \/>\nfp=fopen(&#8220;C:\\\\WIN\\\\WIN386.SWP&#8221;,&#8221;rb&#8221;);<br \/>\nstr=(char *)malloc(1024);<br \/>\nfor(i=0;i&lt;1024;i++)<br \/>\n{<br \/>\nfread(str,1,1024,fp);<br \/>\nxms1.put((void *)str,(void *)(i*1024),1024);<br \/>\n\/\/\u5c06\u5185\u5b58\u6307\u9488str\u4e2d\u76841024\u4e2a\u5b57\u8282\u7684\u5185\u5bb9\u5199\u5230,xms1\u7684\u7b2ci*1024\u4e2a\u5b57\u8282\u5904<br \/>\n}<br \/>\nfclose(fp);<br \/>\nfp=fopen(&#8220;WIN386.SWP&#8221;,&#8221;wb&#8221;);<br \/>\nfor(i=0;i&lt;1024;i++)<br \/>\n{<br \/>\nxms1.get((void *)str,(void *)(i*1024),1024);<br \/>\n\/\/\u5c06\u6269\u5145\u5185\u5b58xms1\u4e2d\uff0c\u4ece\u7b2ci*1024\u4e2a\u5b57\u8282\u5904\u5f00\u59cb\u76841024\u4e2a\u5b57\u8282\u7684\u5185\u5bb9\u5199\u5230str\u4e2d<br \/>\nfwrite(str,1,1024,fp);<br \/>\n}<br \/>\nfclose(fp);<br \/>\n}<\/p>\n<p align=\"left\">\n<p>XMS.H<\/p>\n<p>#if !defined XMS_H<br \/>\n#define XMS_H<\/p>\n<p>class XMS {<br \/>\nint handle;<br \/>\nint move(struct EMB *emb);<br \/>\npublic:<br \/>\nXMS(int size);<br \/>\n~XMS();<br \/>\nstatic int OK;<br \/>\nstatic int init(void);<br \/>\nstatic unsigned freesize(void);<br \/>\nstatic unsigned largestblock(void);<br \/>\nint realloc(int size);<br \/>\nint put(void *dp,void *sp,long leng);<br \/>\nint get(void *dp,void *sp,long leng);<br \/>\n};<\/p>\n<p>#endif<\/p>\n<p>XMS.CPP<\/p>\n<p>#include &lt;dos.h&gt;<br \/>\n#include &lt;alloc.h&gt;<\/p>\n<p>#include &#8220;xms.h&#8221;<\/p>\n<p>struct EMB {<br \/>\nlong Leng;<br \/>\nunsigned SourceHandle;<br \/>\nlong SourceOfs;<br \/>\nunsigned DestinHandle;<br \/>\nlong DestinOfs;<br \/>\n};<\/p>\n<p>int XMS::OK=0;<br \/>\nstatic void far *XMSaddr;<\/p>\n<p>int XMS::init(void)<br \/>\n{<br \/>\nstatic struct REGPACK rg;<\/p>\n<p>rg.r_ax=0x4300;<br \/>\nintr(0x2f,&amp;rg);<br \/>\nif( (rg.r_ax&amp;0x00ff) == 0x80 )<br \/>\n{<br \/>\nrg.r_ax=0x4310;<br \/>\nintr(0x2f,&amp;rg);<br \/>\nXMSaddr=MK_FP(rg.r_es,rg.r_bx);<br \/>\nOK=1;<br \/>\n}<br \/>\nelse<br \/>\nOK=0;<br \/>\nreturn(OK);<br \/>\n}<\/p>\n<p>unsigned XMS::freesize(void)<br \/>\n{<br \/>\nif(OK==0)<br \/>\nreturn(0);<br \/>\nasm {<br \/>\nmov ah,8<br \/>\ncall XMSaddr<br \/>\n}<br \/>\nreturn _DX;<br \/>\n}<\/p>\n<p>unsigned XMS::largestblock(void)<br \/>\n{<br \/>\nif(OK==0)<br \/>\nreturn(0);<br \/>\nasm {<br \/>\nmov ah,8<br \/>\ncall XMSaddr<br \/>\n}<br \/>\nreturn _AX;<br \/>\n}<\/p>\n<p>XMS::XMS(int size)<br \/>\n{<br \/>\nif(OK==0)<br \/>\n{<br \/>\nhandle=0;<br \/>\nreturn;<br \/>\n}<\/p>\n<p>asm {<br \/>\nmov ah,9<br \/>\nmov dx,size<br \/>\ncall XMSaddr<br \/>\n}<br \/>\nhandle=_DX;<br \/>\n}<\/p>\n<p>XMS::~XMS()<br \/>\n{<br \/>\nif(handle==0)<br \/>\nreturn;<\/p>\n<p>int hd=handle;<br \/>\nasm {<br \/>\nmov ah,0ah<br \/>\nmov dx,hd<br \/>\ncall XMSaddr<br \/>\n}<br \/>\n}<\/p>\n<p>int XMS::realloc(int size)<br \/>\n{<br \/>\nif(handle==0)<br \/>\nreturn(0);<\/p>\n<p>int hd=handle;<br \/>\nasm {<br \/>\nmov ah,0fh<br \/>\nmov bx,size<br \/>\nmov dx,hd<br \/>\ncall XMSaddr<br \/>\n}<br \/>\nreturn _AX;<br \/>\n}<\/p>\n<p>int XMS::move(struct EMB *emb)<br \/>\n{<br \/>\nasm {<br \/>\npush ds<br \/>\nmov ah,0bh<br \/>\npush ds<br \/>\npop es<br \/>\nlds si,emb<br \/>\ncall es:XMSaddr<br \/>\npop ds<br \/>\n}<br \/>\nreturn _AX;<br \/>\n}<\/p>\n<p>int XMS::put(void *sp,void *dp,long leng)<br \/>\n{<br \/>\nstruct EMB emb;<\/p>\n<p>if(leng&amp;1L)<br \/>\nleng++;<br \/>\nemb.Leng=leng;<br \/>\nemb.SourceHandle=0;<br \/>\nemb.SourceOfs=(long)sp;<br \/>\nemb.DestinHandle=handle;<br \/>\nemb.DestinOfs=(long)dp;<br \/>\nreturn move(&amp;emb);<br \/>\n}<\/p>\n<p>int XMS::get(void *dp,void *sp,long leng)<br \/>\n{<br \/>\nint v;<br \/>\nstruct EMB emb;<\/p>\n<p>if(leng&amp;1L)<br \/>\n{<br \/>\nchar *p,*d;<\/p>\n<p>leng&#8211;;<br \/>\nif( leng&gt;0 )<br \/>\n{<br \/>\nemb.Leng=leng;<br \/>\nemb.SourceHandle=handle;<br \/>\nemb.SourceOfs=(long)sp;<br \/>\nemb.DestinHandle=0;<br \/>\nemb.DestinOfs=(long)dp;<br \/>\nmove(&amp;emb);<br \/>\n}<\/p>\n<p>p=(char *)malloc(2);<br \/>\nemb.Leng=2L;<br \/>\nemb.SourceHandle=handle;<br \/>\nemb.SourceOfs=(long)sp+leng;<br \/>\nemb.DestinHandle=0;<br \/>\nemb.DestinOfs=(long)p;<br \/>\nv=move(&amp;emb);<br \/>\nd=(char*)dp;<br \/>\nd[leng]=p[0];<br \/>\nfree(p);<br \/>\n}<br \/>\nelse<br \/>\n{<br \/>\nemb.Leng=leng;<br \/>\nemb.SourceHandle=handle;<br \/>\nemb.SourceOfs=(long)sp;<br \/>\nemb.DestinHandle=0;<br \/>\nemb.DestinOfs=(long)dp;<br \/>\nv=move(&amp;emb);<br \/>\n}<br \/>\nreturn(v);<br \/>\n}<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u672c\u6765\u6211\u662f\u4e0d\u51c6\u5907\u5199\u8fd9\u7bc7\u6587\u7ae0\u7684\uff0c\u4f46\u51b7\u4e0d\u59a8\u6709\u4f4d\u540c\u4ec1\u95ee\u8d77\uff0c\u4e5f\u53ea\u597d\u505a\u4e2a\u56de\u7b54\uff0c\u987a\u4fbf\u501f\u6b64\u66f4\u65b0\u4e00\u4e0b\u7f51\u9875\u3002 XMS\uff0c\u6269\u5145\u5185\u5b58\u7ba1\u7406 [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[12],"tags":[],"class_list":["post-123","post","type-post","status-publish","format-standard","hentry","category-dos"],"_links":{"self":[{"href":"http:\/\/www.hyzgame.com\/index.php?rest_route=\/wp\/v2\/posts\/123","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/www.hyzgame.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/www.hyzgame.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/www.hyzgame.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/www.hyzgame.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=123"}],"version-history":[{"count":1,"href":"http:\/\/www.hyzgame.com\/index.php?rest_route=\/wp\/v2\/posts\/123\/revisions"}],"predecessor-version":[{"id":124,"href":"http:\/\/www.hyzgame.com\/index.php?rest_route=\/wp\/v2\/posts\/123\/revisions\/124"}],"wp:attachment":[{"href":"http:\/\/www.hyzgame.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=123"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.hyzgame.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=123"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.hyzgame.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=123"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}