﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-JACKY_ZZ[猫猫爱吃鱼]-随笔分类-ASM</title><link>http://www.cppblog.com/jackyxinli/category/21019.html</link><description>春风拂面两颊红，秋叶洒地一片金。
夏荷摇曳一身轻，冬雪覆盖大地银。</description><language>zh-cn</language><lastBuildDate>Fri, 09 Jan 2015 06:16:03 GMT</lastBuildDate><pubDate>Fri, 09 Jan 2015 06:16:03 GMT</pubDate><ttl>60</ttl><item><title>[ASM] 引导程序从磁盘上加载第二扇区后安装0x80中断并调用</title><link>http://www.cppblog.com/jackyxinli/archive/2015/01/08/209435.html</link><dc:creator>jacky_zz</dc:creator><author>jacky_zz</author><pubDate>Thu, 08 Jan 2015 06:34:00 GMT</pubDate><guid>http://www.cppblog.com/jackyxinli/archive/2015/01/08/209435.html</guid><wfw:comment>http://www.cppblog.com/jackyxinli/comments/209435.html</wfw:comment><comments>http://www.cppblog.com/jackyxinli/archive/2015/01/08/209435.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/jackyxinli/comments/commentRss/209435.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/jackyxinli/services/trackbacks/209435.html</trackback:ping><description><![CDATA[<strong>bootloader.asm</strong><br />
<div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;org&nbsp;</span><span style="color: #000000; ">0x7c00</span><span style="color: #000000; "><br />
start:<br />
&nbsp;&nbsp;&nbsp;&nbsp;jmp&nbsp;main_entry<br />
<br />
stack:<br />
&nbsp;&nbsp;&nbsp;&nbsp;times&nbsp;</span><span style="color: #000000; ">128</span><span style="color: #000000; ">&nbsp;db&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; "><br />
tos:<br />
&nbsp;&nbsp;&nbsp;&nbsp;db&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; "><br />
<br />
main_entry:<br />
&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;ax,&nbsp;cs<br />
&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;ds,&nbsp;ax<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;ax,&nbsp;stack<br />
&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;ss,&nbsp;ax<br />
&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;sp,&nbsp;start<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;initialize&nbsp;es:bx,&nbsp;read&nbsp;data&nbsp;to&nbsp;</span><span style="color: #000000; ">0x0000</span><span style="color: #000000; ">:</span><span style="color: #000000; ">0x7e00</span><span style="color: #000000; "><br />
&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;ax,&nbsp;</span><span style="color: #000000; ">0x0000</span><span style="color: #000000; "><br />
&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;es,&nbsp;ax<br />
&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;bx,&nbsp;</span><span style="color: #000000; ">0x7c00</span><span style="color: #000000; ">+</span><span style="color: #000000; ">0x200</span><span style="color: #000000; "><br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;ah,&nbsp;</span><span style="color: #000000; ">0x02</span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;read&nbsp;function<br />
&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;al,&nbsp;</span><span style="color: #000000; ">0x01</span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;read&nbsp;</span><span style="color: #000000; ">1</span><span style="color: #000000; ">&nbsp;sectors<br />
&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;ch,&nbsp;</span><span style="color: #000000; ">0x00</span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;cl,&nbsp;</span><span style="color: #000000; ">0x02</span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;read&nbsp;from&nbsp;2nd&nbsp;section<br />
&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;dh,&nbsp;</span><span style="color: #000000; ">0x00</span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;;<br />
&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;dl,&nbsp;</span><span style="color: #000000; ">0x80</span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;read&nbsp;from&nbsp;1st&nbsp;hard&nbsp;disk<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0x13</span><span style="color: #000000; "><br />
&nbsp;&nbsp;&nbsp;&nbsp;jc&nbsp;.die<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;install&nbsp;interrupt&nbsp;</span><span style="color: #000000; ">0x80</span><span style="color: #000000; "><br />
&nbsp;&nbsp;&nbsp;&nbsp;call&nbsp;</span><span style="color: #000000; ">0x7e00</span><span style="color: #000000; "><br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;call&nbsp;interrupt&nbsp;</span><span style="color: #000000; ">0x80</span><span style="color: #000000; "><br />
&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;ax,&nbsp;msg1<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0x80</span><span style="color: #000000; "><br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;call&nbsp;interrupt&nbsp;</span><span style="color: #000000; ">0x80</span><span style="color: #000000; "><br />
&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;ax,&nbsp;msg2<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0x80</span><span style="color: #000000; "><br />
<br />
.die:<br />
&nbsp;&nbsp;&nbsp;&nbsp;jmp&nbsp;$<br />
<br />
print_char:&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;ah,&nbsp;</span><span style="color: #000000; ">0x0e</span><span style="color: #000000; "><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0x10</span><span style="color: #000000; "><br />
&nbsp;&nbsp;&nbsp;&nbsp;ret<br />
<br />
msg1:&nbsp;&nbsp;&nbsp;&nbsp;db&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">Loading&nbsp;system&nbsp;<img src="http://www.cppblog.com/Images/dot.gif" alt="" /></span><span style="color: #000000; ">"</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">0x0d</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">0x0a</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; "><br />
msg2:&nbsp;&nbsp;&nbsp;&nbsp;db&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">Hello,&nbsp;World!</span><span style="color: #000000; ">"</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">0x0d</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">0x0a</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; "><br />
crlf:&nbsp;&nbsp;&nbsp;&nbsp;db&nbsp;</span><span style="color: #000000; ">0x0d</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">0x0a</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; "><br />
<br />
fill_zero:<br />
&nbsp;&nbsp;&nbsp;&nbsp;times&nbsp;</span><span style="color: #000000; ">510</span><span style="color: #000000; ">-</span><span style="color: #000000; ">($</span><span style="color: #000000; ">-</span><span style="color: #000000; ">$$)&nbsp;db&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; "><br />
<br />
magic:<br />
&nbsp;&nbsp;&nbsp;&nbsp;db&nbsp;</span><span style="color: #000000; ">0x55</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">0xAA</span></div>
<br />
<strong>lib16.asm</strong><br />
<div style="background-color: #eeeeee; font-size: 13px; border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 98%; word-break: break-all;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;org&nbsp;</span><span style="color: #000000; ">0x7e00</span><span style="color: #000000; "><br />
install_int:<br />
&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;ax,&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; "><br />
&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;es,&nbsp;ax<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;ax,&nbsp;int_0x80<br />
&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;bx,&nbsp;</span><span style="color: #000000; ">0x80</span><span style="color: #000000; ">*</span><span style="color: #000000; ">4</span><span style="color: #000000; "><br />
&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;word&nbsp;[es:bx],&nbsp;ax&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;ip<br />
&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;word&nbsp;[es:(bx</span><span style="color: #000000; ">+</span><span style="color: #000000; ">2</span><span style="color: #000000; ">)],&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;cs<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;ret<br />
<br />
int_0x80:<br />
&nbsp;&nbsp;&nbsp;&nbsp;pusha<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;si,&nbsp;ax<br />
&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;ah,&nbsp;</span><span style="color: #000000; ">0x0e</span><span style="color: #000000; "><br />
&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;al,&nbsp;[ds:si]<br />
<br />
.loop:<br />
&nbsp;&nbsp;&nbsp;&nbsp;cmp&nbsp;al,&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; "><br />
&nbsp;&nbsp;&nbsp;&nbsp;je&nbsp;.exit<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0x10</span><span style="color: #000000; "><br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;inc&nbsp;si<br />
&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;al,&nbsp;[ds:si]<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;jmp&nbsp;.loop<br />
.exit:<br />
&nbsp;&nbsp;&nbsp;&nbsp;popa<br />
&nbsp;&nbsp;&nbsp;&nbsp;iret<br />
<br />
fill_zero:<br />
&nbsp;&nbsp;&nbsp;&nbsp;times&nbsp;</span><span style="color: #000000; ">512</span><span style="color: #000000; ">-</span><span style="color: #000000; ">($</span><span style="color: #000000; ">-</span><span style="color: #000000; ">$$)&nbsp;db&nbsp;</span><span style="color: #000000; ">0</span></div>
<br /><strong>结果图：</strong><br /><img alt="" src="http://www.cppblog.com/images/cppblog_com/jackyxinli/result.png" height="563" width="656" /><img src ="http://www.cppblog.com/jackyxinli/aggbug/209435.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/jackyxinli/" target="_blank">jacky_zz</a> 2015-01-08 14:34 <a href="http://www.cppblog.com/jackyxinli/archive/2015/01/08/209435.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[ASM] 递归计算阶乘</title><link>http://www.cppblog.com/jackyxinli/archive/2014/12/28/209326.html</link><dc:creator>jacky_zz</dc:creator><author>jacky_zz</author><pubDate>Sun, 28 Dec 2014 13:08:00 GMT</pubDate><guid>http://www.cppblog.com/jackyxinli/archive/2014/12/28/209326.html</guid><wfw:comment>http://www.cppblog.com/jackyxinli/comments/209326.html</wfw:comment><comments>http://www.cppblog.com/jackyxinli/archive/2014/12/28/209326.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/jackyxinli/comments/commentRss/209326.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/jackyxinli/services/trackbacks/209326.html</trackback:ping><description><![CDATA[<p>&nbsp;</p>
<div style="font-size: 13px; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; width: 98%; border-bottom: #cccccc 1px solid; word-break: break-all; padding-bottom: 4px; padding-top: 4px; padding-left: 4px; border-left: #cccccc 1px solid; padding-right: 5px; background-color: #eeeeee"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;org&nbsp;100h<br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;jmp&nbsp;start<br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;<br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top"  alt="" />stack:<br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;db&nbsp;</span><span style="color: #000000">256</span><span style="color: #000000">&nbsp;dup(</span><span style="color: #000000">0</span><span style="color: #000000">)<br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top"  alt="" />topofstack:<br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;db&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000"><br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top"  alt="" /><br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top"  alt="" />;&nbsp;add&nbsp;your&nbsp;code&nbsp;here<br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top"  alt="" />start:<br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;ax,&nbsp;cs<br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;ds,&nbsp;ax<br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;<br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;ss,&nbsp;ax<br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;sp,&nbsp;topofstack<br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;<br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;ax,&nbsp;</span><span style="color: #000000">0x0003</span><span style="color: #000000"><br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;push&nbsp;ax<br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;call&nbsp;f<br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;pop&nbsp;ax<br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;hlt<br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;<br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top"  alt="" />f:<br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;push&nbsp;bp<br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;push&nbsp;ax<br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;<br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;bp,&nbsp;sp<br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;ax,&nbsp;[bp</span><span style="color: #000000">+</span><span style="color: #000000">6</span><span style="color: #000000">]<br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;cmp&nbsp;ax,&nbsp;</span><span style="color: #000000">0x0001</span><span style="color: #000000"><br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;je&nbsp;exit<br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;<br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;dec&nbsp;ax<br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;push&nbsp;ax<br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;call&nbsp;f<br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;pop&nbsp;ax<br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;<br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;mul&nbsp;[bp</span><span style="color: #000000">+</span><span style="color: #000000">6</span><span style="color: #000000">]<br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;<br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top"  alt="" />exit:<br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;[bp</span><span style="color: #000000">+</span><span style="color: #000000">6</span><span style="color: #000000">],&nbsp;ax<br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;pop&nbsp;ax<br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;pop&nbsp;bp<br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;ret</span></div>
<p>&nbsp;</p><img src ="http://www.cppblog.com/jackyxinli/aggbug/209326.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/jackyxinli/" target="_blank">jacky_zz</a> 2014-12-28 21:08 <a href="http://www.cppblog.com/jackyxinli/archive/2014/12/28/209326.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[ASM] 打印指定地址的内存内容</title><link>http://www.cppblog.com/jackyxinli/archive/2014/12/26/209314.html</link><dc:creator>jacky_zz</dc:creator><author>jacky_zz</author><pubDate>Fri, 26 Dec 2014 08:09:00 GMT</pubDate><guid>http://www.cppblog.com/jackyxinli/archive/2014/12/26/209314.html</guid><wfw:comment>http://www.cppblog.com/jackyxinli/comments/209314.html</wfw:comment><comments>http://www.cppblog.com/jackyxinli/archive/2014/12/26/209314.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/jackyxinli/comments/commentRss/209314.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/jackyxinli/services/trackbacks/209314.html</trackback:ping><description><![CDATA[<div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #000000; ">main:<br />&nbsp;&nbsp;&nbsp;&nbsp;org&nbsp;</span><span style="color: #000000; ">0x0100</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;jmp&nbsp;start<br /><br />stack:<br />&nbsp;&nbsp;&nbsp;&nbsp;db&nbsp;</span><span style="color: #000000; ">256</span><span style="color: #000000; ">&nbsp;dup(</span><span style="color: #000000; ">0</span><span style="color: #000000; ">)<br />tos:<br />&nbsp;&nbsp;&nbsp;&nbsp;dw&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; "><br /><br />start:<br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;ax,&nbsp;cs<br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;ds,&nbsp;ax<br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;ss,&nbsp;ax<br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;sp,&nbsp;tos<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;ax,&nbsp;end<br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;bx,&nbsp;main<br />&nbsp;&nbsp;&nbsp;&nbsp;sub&nbsp;ax,&nbsp;bx<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;bx,&nbsp;</span><span style="color: #000000; ">2</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;div&nbsp;bx<br />&nbsp;&nbsp;&nbsp;&nbsp;cmp&nbsp;dx,&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;je&nbsp;next_step<br />&nbsp;&nbsp;&nbsp;&nbsp;inc&nbsp;ax<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />next_step:<br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;bx,&nbsp;ax<br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;si,&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;di,&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;<br />.</span><span style="color: #000000; ">0</span><span style="color: #000000; ">:<br />&nbsp;&nbsp;&nbsp;&nbsp;cmp&nbsp;di,&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;je&nbsp;.</span><span style="color: #000000; ">1</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;ax,&nbsp;</span><span style="color: #000000; ">0x0000</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;push&nbsp;ax<br />&nbsp;&nbsp;&nbsp;&nbsp;call&nbsp;print_char<br />&nbsp;&nbsp;&nbsp;&nbsp;pop&nbsp;ax<br /><br />.</span><span style="color: #000000; ">1</span><span style="color: #000000; ">:&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;dx,&nbsp;cs:[si]<br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;ch,&nbsp;</span><span style="color: #000000; ">0x04</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;cl,&nbsp;</span><span style="color: #000000; ">0x04</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />.</span><span style="color: #000000; ">2</span><span style="color: #000000; ">:<br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;ax,&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;rol&nbsp;dx,&nbsp;cl<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;al,&nbsp;dl<br />&nbsp;&nbsp;&nbsp;&nbsp;and&nbsp;al,&nbsp;</span><span style="color: #000000; ">0x0f</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;add&nbsp;al,&nbsp;</span><span style="color: #000000; ">0x30</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;cmp&nbsp;al,&nbsp;</span><span style="color: #000000; ">0x3a</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;jl&nbsp;.</span><span style="color: #000000; ">3</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;add&nbsp;al,&nbsp;</span><span style="color: #000000; ">0x07</span><span style="color: #000000; "><br />.</span><span style="color: #000000; ">3</span><span style="color: #000000; ">:<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;push&nbsp;ax<br />&nbsp;&nbsp;&nbsp;&nbsp;call&nbsp;print_char<br />&nbsp;&nbsp;&nbsp;&nbsp;pop&nbsp;ax<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;dec&nbsp;ch<br />&nbsp;&nbsp;&nbsp;&nbsp;cmp&nbsp;ch,&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;jne&nbsp;.</span><span style="color: #000000; ">2</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;inc&nbsp;di<br />&nbsp;&nbsp;&nbsp;&nbsp;add&nbsp;si,&nbsp;</span><span style="color: #000000; ">2</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;dec&nbsp;bx<br />&nbsp;&nbsp;&nbsp;&nbsp;cmp&nbsp;bx,&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;jne&nbsp;.</span><span style="color: #000000; ">0</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;hlt<br /><br />print_char:<br />&nbsp;&nbsp;&nbsp;&nbsp;push&nbsp;bp<br />&nbsp;&nbsp;&nbsp;&nbsp;push&nbsp;ax<br />&nbsp;&nbsp;&nbsp;&nbsp;push&nbsp;bx<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;bp,&nbsp;sp<br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;ax,&nbsp;[bp</span><span style="color: #000000; ">+</span><span style="color: #000000; ">8</span><span style="color: #000000; ">]<br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;ah,&nbsp;</span><span style="color: #000000; ">0x0e</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;bx,&nbsp;</span><span style="color: #000000; ">0x0000</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0x10</span><span style="color: #000000; "><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;pop&nbsp;bx<br />&nbsp;&nbsp;&nbsp;&nbsp;pop&nbsp;ax<br />&nbsp;&nbsp;&nbsp;&nbsp;pop&nbsp;bp<br />&nbsp;&nbsp;&nbsp;&nbsp;ret<br /><br />end:<br />&nbsp;&nbsp;&nbsp;&nbsp;dw&nbsp;</span><span style="color: #000000; ">0</span></div><img src ="http://www.cppblog.com/jackyxinli/aggbug/209314.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/jackyxinli/" target="_blank">jacky_zz</a> 2014-12-26 16:09 <a href="http://www.cppblog.com/jackyxinli/archive/2014/12/26/209314.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[ASM] 显示制定段及长度的内存值</title><link>http://www.cppblog.com/jackyxinli/archive/2014/12/19/209259.html</link><dc:creator>jacky_zz</dc:creator><author>jacky_zz</author><pubDate>Fri, 19 Dec 2014 14:53:00 GMT</pubDate><guid>http://www.cppblog.com/jackyxinli/archive/2014/12/19/209259.html</guid><wfw:comment>http://www.cppblog.com/jackyxinli/comments/209259.html</wfw:comment><comments>http://www.cppblog.com/jackyxinli/archive/2014/12/19/209259.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/jackyxinli/comments/commentRss/209259.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/jackyxinli/services/trackbacks/209259.html</trackback:ping><description><![CDATA[<div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #000000; ">;&nbsp;You&nbsp;may&nbsp;customize&nbsp;</span><span style="color: #0000FF; ">this</span><span style="color: #000000; ">&nbsp;and&nbsp;other&nbsp;start</span><span style="color: #000000; ">-</span><span style="color: #000000; ">up&nbsp;templates;&nbsp;<br />;&nbsp;The&nbsp;location&nbsp;of&nbsp;</span><span style="color: #0000FF; ">this</span><span style="color: #000000; ">&nbsp;template&nbsp;</span><span style="color: #0000FF; ">is</span><span style="color: #000000; ">&nbsp;c:\emu8086\inc\0_com_template.txt<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;org&nbsp;100h<br />start:<br />&nbsp;&nbsp;&nbsp;&nbsp;jmp&nbsp;main<br /><br />stack:<br />&nbsp;&nbsp;&nbsp;&nbsp;db&nbsp;</span><span style="color: #000000; ">256</span><span style="color: #000000; ">&nbsp;dup(</span><span style="color: #000000; ">0</span><span style="color: #000000; ">)<br />code_len:<br />&nbsp;&nbsp;&nbsp;&nbsp;dw&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />;&nbsp;add&nbsp;your&nbsp;code&nbsp;here<br />main:<br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;ax,&nbsp;cs<br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;ds,&nbsp;ax<br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;ss,&nbsp;ax<br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;sp,&nbsp;stack</span><span style="color: #000000; ">+</span><span style="color: #000000; ">256</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;ax,&nbsp;end<br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;bx,&nbsp;main<br />&nbsp;&nbsp;&nbsp;&nbsp;sub&nbsp;ax,&nbsp;bx<br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;bx,&nbsp;</span><span style="color: #000000; ">2</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;div&nbsp;bx<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;cmp&nbsp;dx,&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;je&nbsp;next_step<br />&nbsp;&nbsp;&nbsp;&nbsp;inc&nbsp;ax<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />next_step:<br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;bx,&nbsp;code_len<br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;[bx],&nbsp;ax<br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;bx,&nbsp;main<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;push&nbsp;ax<br />&nbsp;&nbsp;&nbsp;&nbsp;push&nbsp;bx<br />&nbsp;&nbsp;&nbsp;&nbsp;push&nbsp;cs<br />&nbsp;&nbsp;&nbsp;&nbsp;call&nbsp;dump_memory<br />&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;pop&nbsp;ax<br />&nbsp;&nbsp;&nbsp;&nbsp;pop&nbsp;bx<br />&nbsp;&nbsp;&nbsp;&nbsp;pop&nbsp;ax<br />&nbsp;&nbsp;&nbsp;&nbsp;hlt&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />dump_memory:<br />&nbsp;&nbsp;&nbsp;&nbsp;push&nbsp;bp<br />&nbsp;&nbsp;&nbsp;&nbsp;push&nbsp;ax<br />&nbsp;&nbsp;&nbsp;&nbsp;push&nbsp;bx<br />&nbsp;&nbsp;&nbsp;&nbsp;push&nbsp;cx<br />&nbsp;&nbsp;&nbsp;&nbsp;push&nbsp;dx<br />&nbsp;&nbsp;&nbsp;&nbsp;push&nbsp;ds<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;bp,&nbsp;sp&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;ax,&nbsp;[bp</span><span style="color: #000000; ">+</span><span style="color: #000000; ">14</span><span style="color: #000000; ">]<br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;bx,&nbsp;[bp</span><span style="color: #000000; ">+</span><span style="color: #000000; ">16</span><span style="color: #000000; ">]<br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;cx,&nbsp;[bp</span><span style="color: #000000; ">+</span><span style="color: #000000; ">18</span><span style="color: #000000; ">]<br />&nbsp;&nbsp;&nbsp;&nbsp;xor&nbsp;dx,&nbsp;dx<br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;ds,&nbsp;ax<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />rotate_memory:<br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;ax,&nbsp;ds:[bx]<br />&nbsp;&nbsp;&nbsp;&nbsp;push&nbsp;ax<br />&nbsp;&nbsp;&nbsp;&nbsp;call&nbsp;write_hex<br />&nbsp;&nbsp;&nbsp;&nbsp;pop&nbsp;ax<br />&nbsp;&nbsp;&nbsp;&nbsp;add&nbsp;bx,&nbsp;</span><span style="color: #000000; ">2</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;loop&nbsp;rotate_memory&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;pop&nbsp;ax<br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;ds,&nbsp;ax<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;pop&nbsp;dx<br />&nbsp;&nbsp;&nbsp;&nbsp;pop&nbsp;cx<br />&nbsp;&nbsp;&nbsp;&nbsp;pop&nbsp;bx<br />&nbsp;&nbsp;&nbsp;&nbsp;pop&nbsp;ax<br />&nbsp;&nbsp;&nbsp;&nbsp;pop&nbsp;bp<br />&nbsp;&nbsp;&nbsp;&nbsp;ret<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />write_hex:<br />&nbsp;&nbsp;&nbsp;&nbsp;push&nbsp;bp<br />&nbsp;&nbsp;&nbsp;&nbsp;push&nbsp;ax<br />&nbsp;&nbsp;&nbsp;&nbsp;push&nbsp;bx<br />&nbsp;&nbsp;&nbsp;&nbsp;push&nbsp;cx<br />&nbsp;&nbsp;&nbsp;&nbsp;push&nbsp;dx<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;bp,&nbsp;sp<br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;bx,&nbsp;[bp</span><span style="color: #000000; ">+</span><span style="color: #000000; ">12</span><span style="color: #000000; ">]<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;xor&nbsp;ax,&nbsp;ax<br />&nbsp;&nbsp;&nbsp;&nbsp;xor&nbsp;cx,&nbsp;cx<br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;ch,&nbsp;</span><span style="color: #000000; ">4</span><span style="color: #000000; ">&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />rotate:<br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;cl,&nbsp;</span><span style="color: #000000; ">4</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;rol&nbsp;bx,&nbsp;cl<br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;al,&nbsp;bl<br />&nbsp;&nbsp;&nbsp;&nbsp;and&nbsp;al,&nbsp;</span><span style="color: #000000; ">0x0f</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;add&nbsp;al,&nbsp;</span><span style="color: #000000; ">0x30</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;cmp&nbsp;al,&nbsp;</span><span style="color: #000000; ">0x3a</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;jl&nbsp;printit<br />&nbsp;&nbsp;&nbsp;&nbsp;add&nbsp;al,&nbsp;</span><span style="color: #000000; ">0x07</span><span style="color: #000000; "><br />printit:<br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;dl,&nbsp;al<br />&nbsp;&nbsp;&nbsp;&nbsp;push&nbsp;dx<br />&nbsp;&nbsp;&nbsp;&nbsp;call&nbsp;write_char<br />&nbsp;&nbsp;&nbsp;&nbsp;pop&nbsp;dx<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;dec&nbsp;ch<br />&nbsp;&nbsp;&nbsp;&nbsp;jnz&nbsp;rotate<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;dx,&nbsp;</span><span style="color: #000000; ">0x0000</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;push&nbsp;dx<br />&nbsp;&nbsp;&nbsp;&nbsp;call&nbsp;write_char<br />&nbsp;&nbsp;&nbsp;&nbsp;pop&nbsp;dx<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;pop&nbsp;dx<br />&nbsp;&nbsp;&nbsp;&nbsp;pop&nbsp;cx<br />&nbsp;&nbsp;&nbsp;&nbsp;pop&nbsp;bx<br />&nbsp;&nbsp;&nbsp;&nbsp;pop&nbsp;ax<br />&nbsp;&nbsp;&nbsp;&nbsp;pop&nbsp;bp<br />&nbsp;&nbsp;&nbsp;&nbsp;ret<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />write_char:<br />&nbsp;&nbsp;&nbsp;&nbsp;push&nbsp;bp<br />&nbsp;&nbsp;&nbsp;&nbsp;push&nbsp;ax<br />&nbsp;&nbsp;&nbsp;&nbsp;push&nbsp;dx<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;bp,&nbsp;sp<br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;ah,&nbsp;</span><span style="color: #000000; ">0x02</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;dx,&nbsp;[bp</span><span style="color: #000000; ">+</span><span style="color: #000000; ">8</span><span style="color: #000000; ">]<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0x21</span><span style="color: #000000; ">&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;pop&nbsp;dx<br />&nbsp;&nbsp;&nbsp;&nbsp;pop&nbsp;ax<br />&nbsp;&nbsp;&nbsp;&nbsp;pop&nbsp;bp<br />&nbsp;&nbsp;&nbsp;&nbsp;ret<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />end:&nbsp;db&nbsp;</span><span style="color: #000000; ">0x55</span><span style="color: #000000; ">,</span><span style="color: #000000; ">0xaa</span></div><img src ="http://www.cppblog.com/jackyxinli/aggbug/209259.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/jackyxinli/" target="_blank">jacky_zz</a> 2014-12-19 22:53 <a href="http://www.cppblog.com/jackyxinli/archive/2014/12/19/209259.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[ASM] 利用堆栈传递参数</title><link>http://www.cppblog.com/jackyxinli/archive/2014/12/18/209227.html</link><dc:creator>jacky_zz</dc:creator><author>jacky_zz</author><pubDate>Thu, 18 Dec 2014 09:10:00 GMT</pubDate><guid>http://www.cppblog.com/jackyxinli/archive/2014/12/18/209227.html</guid><wfw:comment>http://www.cppblog.com/jackyxinli/comments/209227.html</wfw:comment><comments>http://www.cppblog.com/jackyxinli/archive/2014/12/18/209227.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/jackyxinli/comments/commentRss/209227.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/jackyxinli/services/trackbacks/209227.html</trackback:ping><description><![CDATA[<div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #000000; ">;&nbsp;You&nbsp;may&nbsp;customize&nbsp;</span><span style="color: #0000FF; ">this</span><span style="color: #000000; ">&nbsp;and&nbsp;other&nbsp;start</span><span style="color: #000000; ">-</span><span style="color: #000000; ">up&nbsp;templates;&nbsp;<br />;&nbsp;The&nbsp;location&nbsp;of&nbsp;</span><span style="color: #0000FF; ">this</span><span style="color: #000000; ">&nbsp;template&nbsp;</span><span style="color: #0000FF; ">is</span><span style="color: #000000; ">&nbsp;c:\emu8086\inc\0_com_template.txt<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;org&nbsp;100h<br />&nbsp;&nbsp;&nbsp;&nbsp;jmp&nbsp;start<br /><br />data:<br />&nbsp;&nbsp;&nbsp;&nbsp;dw&nbsp;</span><span style="color: #000000; ">32</span><span style="color: #000000; ">&nbsp;dup(</span><span style="color: #000000; ">0</span><span style="color: #000000; ">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />stack:<br />&nbsp;&nbsp;&nbsp;&nbsp;dw&nbsp;</span><span style="color: #000000; ">256</span><span style="color: #000000; ">&nbsp;dup(0</span><span style="color: #000000; ">)<br /><br />start:<br />;&nbsp;add&nbsp;your&nbsp;code&nbsp;here&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;ax,&nbsp;cs<br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;ds,&nbsp;ax<br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;bx,&nbsp;data<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;ss,&nbsp;ax<br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;sp,&nbsp;stack</span><span style="color: #000000; ">+</span><span style="color: #000000; ">31</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;push&nbsp;</span><span style="color: #000000; ">0x0001</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;push&nbsp;</span><span style="color: #000000; ">0x0002</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;push&nbsp;</span><span style="color: #000000; ">0x0003</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;call&nbsp;test_proc<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;hlt<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />test_proc:<br />&nbsp;&nbsp;&nbsp;&nbsp;push&nbsp;bp<br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;bp,&nbsp;sp<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;ax,&nbsp;[bp</span><span style="color: #000000; ">+</span><span style="color: #000000; ">8</span><span style="color: #000000; ">]<br />&nbsp;&nbsp;&nbsp;&nbsp;push&nbsp;ax<br />&nbsp;&nbsp;&nbsp;&nbsp;call&nbsp;write_char<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;ax,&nbsp;[bp</span><span style="color: #000000; ">+</span><span style="color: #000000; ">6</span><span style="color: #000000; ">]<br />&nbsp;&nbsp;&nbsp;&nbsp;push&nbsp;ax<br />&nbsp;&nbsp;&nbsp;&nbsp;call&nbsp;write_char<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;ax,&nbsp;[bp</span><span style="color: #000000; ">+</span><span style="color: #000000; ">4</span><span style="color: #000000; ">]<br />&nbsp;&nbsp;&nbsp;&nbsp;push&nbsp;ax<br />&nbsp;&nbsp;&nbsp;&nbsp;call&nbsp;write_char<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;pop&nbsp;bp<br />&nbsp;&nbsp;&nbsp;&nbsp;ret&nbsp;</span><span style="color: #000000; ">6</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;<br />write_char:<br />&nbsp;&nbsp;&nbsp;&nbsp;push&nbsp;bp<br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;bp,&nbsp;sp<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;ax,&nbsp;[bp</span><span style="color: #000000; ">+</span><span style="color: #000000; ">4</span><span style="color: #000000; ">]<br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;dl,&nbsp;al<br />&nbsp;&nbsp;&nbsp;&nbsp;add&nbsp;dl,&nbsp;</span><span style="color: #000000; ">0x30</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;cmp&nbsp;dl,&nbsp;</span><span style="color: #000000; ">0x3a</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;jl&nbsp;printit<br />&nbsp;&nbsp;&nbsp;&nbsp;add&nbsp;dl,&nbsp;</span><span style="color: #000000; ">0x07</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;<br />printit:<br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;ah,&nbsp;</span><span style="color: #000000; ">0x02</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0x21</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;pop&nbsp;bp<br />&nbsp;&nbsp;&nbsp;&nbsp;ret&nbsp;</span><span style="color: #000000; ">2</span></div><img src ="http://www.cppblog.com/jackyxinli/aggbug/209227.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/jackyxinli/" target="_blank">jacky_zz</a> 2014-12-18 17:10 <a href="http://www.cppblog.com/jackyxinli/archive/2014/12/18/209227.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[ASM] 二进制数用十六进制显示</title><link>http://www.cppblog.com/jackyxinli/archive/2014/12/18/209224.html</link><dc:creator>jacky_zz</dc:creator><author>jacky_zz</author><pubDate>Thu, 18 Dec 2014 08:24:00 GMT</pubDate><guid>http://www.cppblog.com/jackyxinli/archive/2014/12/18/209224.html</guid><wfw:comment>http://www.cppblog.com/jackyxinli/comments/209224.html</wfw:comment><comments>http://www.cppblog.com/jackyxinli/archive/2014/12/18/209224.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/jackyxinli/comments/commentRss/209224.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/jackyxinli/services/trackbacks/209224.html</trackback:ping><description><![CDATA[<div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #000000; ">org&nbsp;100h<br /><br />;&nbsp;add&nbsp;your&nbsp;code&nbsp;here<br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;ax,&nbsp;cs<br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;ds,&nbsp;ax<br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;ss,&nbsp;ax<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;ax,&nbsp;</span><span style="color: #000000; ">0x0000</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;bx,&nbsp;</span><span style="color: #000000; ">0x106f</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;ch,&nbsp;</span><span style="color: #000000; ">0x04</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;<br />rotate:<br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;cl,&nbsp;</span><span style="color: #000000; ">0x04</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;rol&nbsp;bx,&nbsp;cl<br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;al,&nbsp;bl<br />&nbsp;&nbsp;&nbsp;&nbsp;and&nbsp;al,&nbsp;</span><span style="color: #000000; ">0x0f</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;add&nbsp;al,&nbsp;</span><span style="color: #000000; ">0x30</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;cmp&nbsp;al,&nbsp;</span><span style="color: #000000; ">0x3a</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;jl&nbsp;printit<br />&nbsp;&nbsp;&nbsp;&nbsp;add&nbsp;al,&nbsp;</span><span style="color: #000000; ">0x07</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;<br />printit:<br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;dl,&nbsp;al<br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;ah,&nbsp;</span><span style="color: #000000; ">0x02</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0x21</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;dec&nbsp;ch<br />&nbsp;&nbsp;&nbsp;&nbsp;jnz&nbsp;rotate&nbsp;&nbsp;&nbsp;&nbsp;<br /><br />ret</span></div><img src ="http://www.cppblog.com/jackyxinli/aggbug/209224.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/jackyxinli/" target="_blank">jacky_zz</a> 2014-12-18 16:24 <a href="http://www.cppblog.com/jackyxinli/archive/2014/12/18/209224.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[ASM] 显示一个数字的二进制、八进制、十进制、十六进制（带过程调用）</title><link>http://www.cppblog.com/jackyxinli/archive/2014/12/17/209208.html</link><dc:creator>jacky_zz</dc:creator><author>jacky_zz</author><pubDate>Wed, 17 Dec 2014 08:55:00 GMT</pubDate><guid>http://www.cppblog.com/jackyxinli/archive/2014/12/17/209208.html</guid><wfw:comment>http://www.cppblog.com/jackyxinli/comments/209208.html</wfw:comment><comments>http://www.cppblog.com/jackyxinli/archive/2014/12/17/209208.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/jackyxinli/comments/commentRss/209208.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/jackyxinli/services/trackbacks/209208.html</trackback:ping><description><![CDATA[<div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #000000; ">;&nbsp;You&nbsp;may&nbsp;customize&nbsp;</span><span style="color: #0000FF; ">this</span><span style="color: #000000; ">&nbsp;and&nbsp;other&nbsp;start</span><span style="color: #000000; ">-</span><span style="color: #000000; ">up&nbsp;templates;&nbsp;<br />;&nbsp;The&nbsp;location&nbsp;of&nbsp;</span><span style="color: #0000FF; ">this</span><span style="color: #000000; ">&nbsp;template&nbsp;</span><span style="color: #0000FF; ">is</span><span style="color: #000000; ">&nbsp;c:\emu8086\inc\0_com_template.txt<br /><br />org&nbsp;100h<br /><br />;&nbsp;add&nbsp;your&nbsp;code&nbsp;here&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;ax,&nbsp;cs<br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;ds,&nbsp;ax&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;ss,&nbsp;ax&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;sp,&nbsp;stack&nbsp;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">256</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">1</span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;si,&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;push&nbsp;</span><span style="color: #000000; ">0x105e</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;call&nbsp;write_bin<br />&nbsp;&nbsp;&nbsp;&nbsp;pop&nbsp;ax&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;call&nbsp;write_space2<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;push&nbsp;</span><span style="color: #000000; ">0x0002</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;push&nbsp;</span><span style="color: #000000; ">0x78fd</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;call&nbsp;write_num<br />&nbsp;&nbsp;&nbsp;&nbsp;pop&nbsp;ax<br />&nbsp;&nbsp;&nbsp;&nbsp;pop&nbsp;ax<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;call&nbsp;write_space2<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;push&nbsp;</span><span style="color: #000000; ">0x0008</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;push&nbsp;</span><span style="color: #000000; ">0x78fd</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;call&nbsp;write_num<br />&nbsp;&nbsp;&nbsp;&nbsp;pop&nbsp;ax<br />&nbsp;&nbsp;&nbsp;&nbsp;pop&nbsp;ax<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;call&nbsp;write_space2<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;push&nbsp;</span><span style="color: #000000; ">0x000A</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;push&nbsp;</span><span style="color: #000000; ">0x78fd</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;call&nbsp;write_num<br />&nbsp;&nbsp;&nbsp;&nbsp;pop&nbsp;ax<br />&nbsp;&nbsp;&nbsp;&nbsp;pop&nbsp;ax<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;call&nbsp;write_space2<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;push&nbsp;</span><span style="color: #000000; ">0x0010</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;push&nbsp;</span><span style="color: #000000; ">0x78fd</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;call&nbsp;write_num<br />&nbsp;&nbsp;&nbsp;&nbsp;pop&nbsp;ax<br />&nbsp;&nbsp;&nbsp;&nbsp;pop&nbsp;ax<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;ret<br /><br />write_space2:<br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;cx,&nbsp;</span><span style="color: #000000; ">2</span><span style="color: #000000; "><br />loop_write_char:<br />&nbsp;&nbsp;&nbsp;&nbsp;call&nbsp;write_space<br />&nbsp;&nbsp;&nbsp;&nbsp;loop&nbsp;loop_write_char<br />&nbsp;&nbsp;&nbsp;&nbsp;ret<br /><br />write_space:<br />&nbsp;&nbsp;&nbsp;&nbsp;push&nbsp;</span><span style="color: #000000; ">0x0000</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;call&nbsp;write_char<br />&nbsp;&nbsp;&nbsp;&nbsp;pop&nbsp;ax<br />&nbsp;&nbsp;&nbsp;&nbsp;ret<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />write_char:&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;push&nbsp;ax<br />&nbsp;&nbsp;&nbsp;&nbsp;push&nbsp;bx<br />&nbsp;&nbsp;&nbsp;&nbsp;push&nbsp;cx<br />&nbsp;&nbsp;&nbsp;&nbsp;push&nbsp;dx<br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;bp,&nbsp;sp<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;ah,&nbsp;</span><span style="color: #000000; ">0x0e</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;bx,&nbsp;ss:[bp</span><span style="color: #000000; ">+</span><span style="color: #000000; ">10</span><span style="color: #000000; ">]&nbsp;;&nbsp;parameter&nbsp;</span><span style="color: #000000; ">1</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;al,&nbsp;bl<br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;bx,&nbsp;</span><span style="color: #000000; ">0x000c</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0x10</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;pop&nbsp;dx<br />&nbsp;&nbsp;&nbsp;&nbsp;pop&nbsp;cx<br />&nbsp;&nbsp;&nbsp;&nbsp;pop&nbsp;bx<br />&nbsp;&nbsp;&nbsp;&nbsp;pop&nbsp;ax<br />&nbsp;&nbsp;&nbsp;&nbsp;ret<br /><br />write_bin:<br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;bp,&nbsp;sp&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;ax,&nbsp;ss:[bp</span><span style="color: #000000; ">+</span><span style="color: #000000; ">2</span><span style="color: #000000; ">]&nbsp;;&nbsp;parameter&nbsp;</span><span style="color: #000000; ">1</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;cx,&nbsp;</span><span style="color: #000000; ">16</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;<br />s:<br />&nbsp;&nbsp;&nbsp;&nbsp;xor&nbsp;dx,&nbsp;dx<br />&nbsp;&nbsp;&nbsp;&nbsp;rcl&nbsp;ax,&nbsp;</span><span style="color: #000000; ">1</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;adc&nbsp;dl,&nbsp;</span><span style="color: #000000; ">0x30</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;push&nbsp;dx<br />&nbsp;&nbsp;&nbsp;&nbsp;call&nbsp;write_char<br />&nbsp;&nbsp;&nbsp;&nbsp;pop&nbsp;dx&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;loop&nbsp;s<br />&nbsp;&nbsp;&nbsp;&nbsp;ret<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />write_num:<br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;bp,&nbsp;sp<br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;ax,&nbsp;ss:[bp</span><span style="color: #000000; ">+</span><span style="color: #000000; ">2</span><span style="color: #000000; ">]&nbsp;;&nbsp;parameter&nbsp;</span><span style="color: #000000; ">1</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;bx,&nbsp;ss:[bp</span><span style="color: #000000; ">+</span><span style="color: #000000; ">4</span><span style="color: #000000; ">]&nbsp;;&nbsp;parameter&nbsp;</span><span style="color: #000000; ">2</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;cx,&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;<br />loop_num_div:<br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;dx,&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;div&nbsp;bx<br />&nbsp;&nbsp;&nbsp;&nbsp;push&nbsp;dx<br />&nbsp;&nbsp;&nbsp;&nbsp;inc&nbsp;cx<br />&nbsp;&nbsp;&nbsp;&nbsp;cmp&nbsp;ax,&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;jne&nbsp;loop_num_div<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />loop_num_disp:<br />&nbsp;&nbsp;&nbsp;&nbsp;pop&nbsp;dx<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;add&nbsp;dl,&nbsp;</span><span style="color: #000000; ">0x30</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;cmp&nbsp;dl,&nbsp;</span><span style="color: #000000; ">0x3A</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;jl&nbsp;disp_char<br />&nbsp;&nbsp;&nbsp;&nbsp;add&nbsp;dl,&nbsp;</span><span style="color: #000000; ">0x07</span><span style="color: #000000; "><br /><br />disp_char:&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;push&nbsp;dx<br />&nbsp;&nbsp;&nbsp;&nbsp;call&nbsp;write_char<br />&nbsp;&nbsp;&nbsp;&nbsp;pop&nbsp;dx<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;loop&nbsp;loop_num_disp<br />&nbsp;&nbsp;&nbsp;&nbsp;ret&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />stack:<br />&nbsp;&nbsp;&nbsp;&nbsp;dw&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;dw&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;dw&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;dw&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;dw&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;dw&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;dw&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;dw&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; "><br />end_flag:&nbsp;db&nbsp;</span><span style="color: #000000; ">0x11</span></div><img src ="http://www.cppblog.com/jackyxinli/aggbug/209208.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/jackyxinli/" target="_blank">jacky_zz</a> 2014-12-17 16:55 <a href="http://www.cppblog.com/jackyxinli/archive/2014/12/17/209208.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[ASM] 显示一个数字的十进制</title><link>http://www.cppblog.com/jackyxinli/archive/2014/12/17/209201.html</link><dc:creator>jacky_zz</dc:creator><author>jacky_zz</author><pubDate>Wed, 17 Dec 2014 01:40:00 GMT</pubDate><guid>http://www.cppblog.com/jackyxinli/archive/2014/12/17/209201.html</guid><wfw:comment>http://www.cppblog.com/jackyxinli/comments/209201.html</wfw:comment><comments>http://www.cppblog.com/jackyxinli/archive/2014/12/17/209201.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/jackyxinli/comments/commentRss/209201.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/jackyxinli/services/trackbacks/209201.html</trackback:ping><description><![CDATA[<div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #000000; ">org&nbsp;100h<br /><br />;&nbsp;add&nbsp;your&nbsp;code&nbsp;here<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;ax,&nbsp;cs<br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;ds,&nbsp;ax<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;ax,&nbsp;</span><span style="color: #000000; ">0xb800</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;es,&nbsp;ax<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;xor&nbsp;ax,&nbsp;ax<br />&nbsp;&nbsp;&nbsp;&nbsp;xor&nbsp;bx,&nbsp;bx<br />&nbsp;&nbsp;&nbsp;&nbsp;xor&nbsp;cx,&nbsp;cx<br />&nbsp;&nbsp;&nbsp;&nbsp;xor&nbsp;dx,&nbsp;dx<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;ax,&nbsp;</span><span style="color: #000000; ">0x105e</span><span style="color: #000000; ">&nbsp;;除数<br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;bx,&nbsp;</span><span style="color: #000000; ">10</span><span style="color: #000000; ">&nbsp;;被除数<br /><br />s:&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;dx,&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">&nbsp;;清空余数<br />&nbsp;&nbsp;&nbsp;&nbsp;div&nbsp;bx&nbsp;;除以被除数<br />&nbsp;&nbsp;&nbsp;&nbsp;push&nbsp;dx&nbsp;;把余数压栈<br />&nbsp;&nbsp;&nbsp;&nbsp;inc&nbsp;cx&nbsp;;循环次数加1<br />&nbsp;&nbsp;&nbsp;&nbsp;cmp&nbsp;ax,&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">&nbsp;;商不为0继续除<br />&nbsp;&nbsp;&nbsp;&nbsp;jne&nbsp;s<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;bx,&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;<br />p1:&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;pop&nbsp;dx<br />&nbsp;&nbsp;&nbsp;&nbsp;add&nbsp;dl,&nbsp;</span><span style="color: #000000; ">0x30</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;es:[bx],&nbsp;dl<br />&nbsp;&nbsp;&nbsp;&nbsp;inc&nbsp;bx<br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;es:[bx],&nbsp;</span><span style="color: #000000; ">0x0c</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;inc&nbsp;bx<br />&nbsp;&nbsp;&nbsp;&nbsp;loop&nbsp;p1<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />ret</span></div><img src ="http://www.cppblog.com/jackyxinli/aggbug/209201.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/jackyxinli/" target="_blank">jacky_zz</a> 2014-12-17 09:40 <a href="http://www.cppblog.com/jackyxinli/archive/2014/12/17/209201.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[ASM] 显示一个数字的十六进制</title><link>http://www.cppblog.com/jackyxinli/archive/2014/12/17/209200.html</link><dc:creator>jacky_zz</dc:creator><author>jacky_zz</author><pubDate>Wed, 17 Dec 2014 01:31:00 GMT</pubDate><guid>http://www.cppblog.com/jackyxinli/archive/2014/12/17/209200.html</guid><wfw:comment>http://www.cppblog.com/jackyxinli/comments/209200.html</wfw:comment><comments>http://www.cppblog.com/jackyxinli/archive/2014/12/17/209200.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/jackyxinli/comments/commentRss/209200.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/jackyxinli/services/trackbacks/209200.html</trackback:ping><description><![CDATA[<div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #000000; ">org&nbsp;100h<br /><br />;&nbsp;add&nbsp;your&nbsp;code&nbsp;here<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;ax,&nbsp;cs<br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;ds,&nbsp;ax<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;ax,&nbsp;</span><span style="color: #000000; ">0xb800</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;es,&nbsp;ax<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;xor&nbsp;ax,&nbsp;ax<br />&nbsp;&nbsp;&nbsp;&nbsp;xor&nbsp;bx,&nbsp;bx<br />&nbsp;&nbsp;&nbsp;&nbsp;xor&nbsp;dx,&nbsp;dx<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;dl,&nbsp;</span><span style="color: #000000; ">0x2f</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;al,&nbsp;dl<br />&nbsp;&nbsp;&nbsp;&nbsp;shr&nbsp;al,&nbsp;</span><span style="color: #000000; ">4</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;add&nbsp;al,&nbsp;</span><span style="color: #000000; ">0x30</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;cmp&nbsp;al,&nbsp;</span><span style="color: #000000; ">0x3a</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;jl&nbsp;p1<br />&nbsp;&nbsp;&nbsp;&nbsp;add&nbsp;al,&nbsp;</span><span style="color: #000000; ">0x07</span><span style="color: #000000; "><br /><br />p1:<br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;es:[bx],&nbsp;al<br />&nbsp;&nbsp;&nbsp;&nbsp;inc&nbsp;bx<br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;es:[bx],&nbsp;</span><span style="color: #000000; ">0x0c</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;inc&nbsp;bx<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;al,&nbsp;dl<br />&nbsp;&nbsp;&nbsp;&nbsp;and&nbsp;al,&nbsp;</span><span style="color: #000000; ">0x0f</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;add&nbsp;al,&nbsp;</span><span style="color: #000000; ">0x30</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;cmp&nbsp;al,&nbsp;</span><span style="color: #000000; ">0x3a</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;jl&nbsp;p2<br />&nbsp;&nbsp;&nbsp;&nbsp;add&nbsp;al,&nbsp;</span><span style="color: #000000; ">0x07</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;<br />p2:<br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;es:[bx],&nbsp;al<br />&nbsp;&nbsp;&nbsp;&nbsp;inc&nbsp;bx<br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;es:[bx],&nbsp;</span><span style="color: #000000; ">0x0c</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;inc&nbsp;bx<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />ret</span></div><img src ="http://www.cppblog.com/jackyxinli/aggbug/209200.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/jackyxinli/" target="_blank">jacky_zz</a> 2014-12-17 09:31 <a href="http://www.cppblog.com/jackyxinli/archive/2014/12/17/209200.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[ASM] 显示一个数字的二进制</title><link>http://www.cppblog.com/jackyxinli/archive/2014/12/17/209198.html</link><dc:creator>jacky_zz</dc:creator><author>jacky_zz</author><pubDate>Wed, 17 Dec 2014 01:00:00 GMT</pubDate><guid>http://www.cppblog.com/jackyxinli/archive/2014/12/17/209198.html</guid><wfw:comment>http://www.cppblog.com/jackyxinli/comments/209198.html</wfw:comment><comments>http://www.cppblog.com/jackyxinli/archive/2014/12/17/209198.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/jackyxinli/comments/commentRss/209198.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/jackyxinli/services/trackbacks/209198.html</trackback:ping><description><![CDATA[<div style="background-color: #eeeeee; font-size: 13px; border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 98%; word-break: break-all;"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #000000; ">org&nbsp;100h<br /><br />;&nbsp;add&nbsp;your&nbsp;code&nbsp;here<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;ax,&nbsp;cs<br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;ds,&nbsp;ax<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;ax,&nbsp;</span><span style="color: #000000; ">0xb800</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;es,&nbsp;ax<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;xor&nbsp;ax,&nbsp;ax<br />&nbsp;&nbsp;&nbsp;&nbsp;xor&nbsp;bx,&nbsp;bx<br />&nbsp;&nbsp;&nbsp;&nbsp;xor&nbsp;dx,&nbsp;dx<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;al,&nbsp;</span><span style="color: #000000; ">0xff</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;cx,&nbsp;</span><span style="color: #000000; ">0x0008</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />s:&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;xor&nbsp;dx,&nbsp;dx<br />&nbsp;&nbsp;&nbsp;&nbsp;rcl&nbsp;al,&nbsp;</span><span style="color: #000000; ">1</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;adc&nbsp;dl,&nbsp;</span><span style="color: #000000; ">0x30</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;es:[bx],&nbsp;dl<br />&nbsp;&nbsp;&nbsp;&nbsp;inc&nbsp;bx<br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;es:[bx],&nbsp;</span><span style="color: #000000; ">0x0c</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;inc&nbsp;bx<br />&nbsp;&nbsp;&nbsp;&nbsp;loop&nbsp;s<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />ret</span></div><img src ="http://www.cppblog.com/jackyxinli/aggbug/209198.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/jackyxinli/" target="_blank">jacky_zz</a> 2014-12-17 09:00 <a href="http://www.cppblog.com/jackyxinli/archive/2014/12/17/209198.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[ASM] 多种数制显示的汇编语言编程实现</title><link>http://www.cppblog.com/jackyxinli/archive/2014/12/16/209191.html</link><dc:creator>jacky_zz</dc:creator><author>jacky_zz</author><pubDate>Tue, 16 Dec 2014 09:24:00 GMT</pubDate><guid>http://www.cppblog.com/jackyxinli/archive/2014/12/16/209191.html</guid><wfw:comment>http://www.cppblog.com/jackyxinli/comments/209191.html</wfw:comment><comments>http://www.cppblog.com/jackyxinli/archive/2014/12/16/209191.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/jackyxinli/comments/commentRss/209191.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/jackyxinli/services/trackbacks/209191.html</trackback:ping><description><![CDATA[<div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #000000; "><br />;&nbsp;You&nbsp;may&nbsp;customize&nbsp;</span><span style="color: #0000FF; ">this</span><span style="color: #000000; ">&nbsp;and&nbsp;other&nbsp;start</span><span style="color: #000000; ">-</span><span style="color: #000000; ">up&nbsp;templates;&nbsp;<br />;&nbsp;The&nbsp;location&nbsp;of&nbsp;</span><span style="color: #0000FF; ">this</span><span style="color: #000000; ">&nbsp;template&nbsp;</span><span style="color: #0000FF; ">is</span><span style="color: #000000; ">&nbsp;c:\emu8086\inc\0_com_template.txt<br /><br />org&nbsp;100h<br /><br />;&nbsp;add&nbsp;your&nbsp;code&nbsp;here<br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;ax,&nbsp;cs<br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;ds,&nbsp;ax<br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;ss,&nbsp;ax<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;ax,&nbsp;</span><span style="color: #000000; ">0xb800</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;es,&nbsp;ax<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;ax,&nbsp;</span><span style="color: #000000; ">0x6f4e</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;;mov&nbsp;bx,&nbsp;</span><span style="color: #000000; ">2</span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;;mov&nbsp;bx,&nbsp;</span><span style="color: #000000; ">8</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;bx,&nbsp;</span><span style="color: #000000; ">10</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;;mov&nbsp;bx,&nbsp;</span><span style="color: #000000; ">16</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;xor&nbsp;cx,&nbsp;cx&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />next_div:<br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;dx,&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;div&nbsp;bx<br />&nbsp;&nbsp;&nbsp;&nbsp;push&nbsp;dx<br />&nbsp;&nbsp;&nbsp;&nbsp;inc&nbsp;cx<br />&nbsp;&nbsp;&nbsp;&nbsp;cmp&nbsp;ax,&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;jnz&nbsp;next_div&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;si,&nbsp;bx<br />&nbsp;&nbsp;&nbsp;&nbsp;xor&nbsp;bx,&nbsp;bx<br />&nbsp;&nbsp;&nbsp;&nbsp;cmp&nbsp;si,&nbsp;</span><span style="color: #000000; ">16</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;jnz&nbsp;outp<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;;如果是显示16进制则在值前面加上0x<br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;es:[bx],&nbsp;</span><span style="color: #000000; ">'</span><span style="color: #000000; ">0</span><span style="color: #000000; ">'</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;inc&nbsp;bx<br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;es:[bx],&nbsp;</span><span style="color: #000000; ">0x0c</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;inc&nbsp;bx<br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;es:[bx],&nbsp;</span><span style="color: #000000; ">'</span><span style="color: #000000; ">x</span><span style="color: #000000; ">'</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;inc&nbsp;bx<br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;es:[bx],&nbsp;</span><span style="color: #000000; ">0x0c</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;inc&nbsp;bx<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />outp:<br />&nbsp;&nbsp;&nbsp;&nbsp;pop&nbsp;dx<br />&nbsp;&nbsp;&nbsp;&nbsp;add&nbsp;dl,&nbsp;</span><span style="color: #000000; ">0x30</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;cmp&nbsp;dl,&nbsp;</span><span style="color: #000000; ">0x3a</span><span style="color: #000000; ">&nbsp;;是A</span><span style="color: #000000; ">-</span><span style="color: #000000; ">F，要多加7<br />&nbsp;&nbsp;&nbsp;&nbsp;jl&nbsp;outc<br />&nbsp;&nbsp;&nbsp;&nbsp;add&nbsp;dl,&nbsp;</span><span style="color: #000000; ">0x07</span><span style="color: #000000; "><br />outc:<br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;es:[bx],&nbsp;dl<br />&nbsp;&nbsp;&nbsp;&nbsp;inc&nbsp;bx<br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;es:[bx],&nbsp;</span><span style="color: #000000; ">0x0c</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;inc&nbsp;bx<br />&nbsp;&nbsp;&nbsp;&nbsp;loop&nbsp;outp<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;hlt</span></div><img src ="http://www.cppblog.com/jackyxinli/aggbug/209191.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/jackyxinli/" target="_blank">jacky_zz</a> 2014-12-16 17:24 <a href="http://www.cppblog.com/jackyxinli/archive/2014/12/16/209191.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[ASM] head.s</title><link>http://www.cppblog.com/jackyxinli/archive/2014/12/08/209055.html</link><dc:creator>jacky_zz</dc:creator><author>jacky_zz</author><pubDate>Mon, 08 Dec 2014 02:59:00 GMT</pubDate><guid>http://www.cppblog.com/jackyxinli/archive/2014/12/08/209055.html</guid><wfw:comment>http://www.cppblog.com/jackyxinli/comments/209055.html</wfw:comment><comments>http://www.cppblog.com/jackyxinli/archive/2014/12/08/209055.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/jackyxinli/comments/commentRss/209055.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/jackyxinli/services/trackbacks/209055.html</trackback:ping><description><![CDATA[<div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008000; ">/*</span><span style="color: #008000; "><br />&nbsp;*&nbsp;&nbsp;head.s&nbsp;contains&nbsp;the&nbsp;32-bit&nbsp;startup&nbsp;code.<br />&nbsp;*<br />&nbsp;*&nbsp;NOTE!!!&nbsp;Startup&nbsp;happens&nbsp;at&nbsp;absolute&nbsp;address&nbsp;0x00000000,&nbsp;which&nbsp;is&nbsp;also&nbsp;where<br />&nbsp;*&nbsp;the&nbsp;page&nbsp;directory&nbsp;will&nbsp;exist.&nbsp;The&nbsp;startup&nbsp;code&nbsp;will&nbsp;be&nbsp;overwritten&nbsp;by<br />&nbsp;*&nbsp;the&nbsp;page&nbsp;directory.<br />&nbsp;</span><span style="color: #008000; ">*/</span><br />.text<br />.globl&nbsp;_idt,_gdt,_pg_dir<br />_pg_dir:<br />startup_32:<br />&nbsp;&nbsp;&nbsp;&nbsp;movl&nbsp;$0x10,%eax<br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;%ax,%ds<br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;%ax,%es<br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;%ax,%fs<br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;%ax,%gs<br />&nbsp;&nbsp;&nbsp;&nbsp;lss&nbsp;_stack_start,%esp<br />&nbsp;&nbsp;&nbsp;&nbsp;call&nbsp;setup_idt<br />&nbsp;&nbsp;&nbsp;&nbsp;call&nbsp;setup_gdt<br />&nbsp;&nbsp;&nbsp;&nbsp;movl&nbsp;$0x10,%eax&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;reload&nbsp;all&nbsp;the&nbsp;segment&nbsp;registers<br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;%ax,%ds&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;after&nbsp;changing&nbsp;gdt.&nbsp;CS&nbsp;was&nbsp;already<br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;%ax,%es&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;reloaded&nbsp;<span style="color: #0000FF; ">in</span>&nbsp;'setup_gdt'<br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;%ax,%fs<br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;%ax,%gs<br />&nbsp;&nbsp;&nbsp;&nbsp;lss&nbsp;_stack_start,%esp<br />&nbsp;&nbsp;&nbsp;&nbsp;xorl&nbsp;%eax,%eax<br />1:&nbsp;&nbsp;&nbsp;&nbsp;incl&nbsp;%eax&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;check&nbsp;that&nbsp;A20&nbsp;really&nbsp;IS&nbsp;enabled<br />&nbsp;&nbsp;&nbsp;&nbsp;movl&nbsp;%eax,0x000000<br />&nbsp;&nbsp;&nbsp;&nbsp;cmpl&nbsp;%eax,0x100000<br />&nbsp;&nbsp;&nbsp;&nbsp;je&nbsp;1b<br />&nbsp;&nbsp;&nbsp;&nbsp;movl&nbsp;%cr0,%eax&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;check&nbsp;math&nbsp;chip<br />&nbsp;&nbsp;&nbsp;&nbsp;andl&nbsp;$0x80000011,%eax&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;Save&nbsp;PG,ET,PE<br />&nbsp;&nbsp;&nbsp;&nbsp;testl&nbsp;$0x10,%eax<br />&nbsp;&nbsp;&nbsp;&nbsp;jne&nbsp;1f&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;ET&nbsp;<span style="color: #0000FF; ">is</span>&nbsp;<span style="color: #0000FF; ">set</span>&nbsp;-&nbsp;387&nbsp;<span style="color: #0000FF; ">is</span>&nbsp;present<br />&nbsp;&nbsp;&nbsp;&nbsp;orl&nbsp;$4,%eax&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;<span style="color: #0000FF; ">else</span>&nbsp;<span style="color: #0000FF; ">set</span>&nbsp;emulate&nbsp;bit<br />1:&nbsp;&nbsp;&nbsp;&nbsp;movl&nbsp;%eax,%cr0<br />&nbsp;&nbsp;&nbsp;&nbsp;jmp&nbsp;after_page_tables<br /><br /><span style="color: #008000; ">/*</span><span style="color: #008000; "><br />&nbsp;*&nbsp;&nbsp;setup_idt<br />&nbsp;*<br />&nbsp;*&nbsp;&nbsp;sets&nbsp;up&nbsp;a&nbsp;idt&nbsp;with&nbsp;256&nbsp;entries&nbsp;pointing&nbsp;to<br />&nbsp;*&nbsp;&nbsp;ignore_int,&nbsp;interrupt&nbsp;gates.&nbsp;It&nbsp;then&nbsp;loads<br />&nbsp;*&nbsp;&nbsp;idt.&nbsp;Everything&nbsp;that&nbsp;wants&nbsp;to&nbsp;install&nbsp;itself<br />&nbsp;*&nbsp;&nbsp;in&nbsp;the&nbsp;idt-table&nbsp;may&nbsp;do&nbsp;so&nbsp;themselves.&nbsp;Interrupts<br />&nbsp;*&nbsp;&nbsp;are&nbsp;enabled&nbsp;elsewhere,&nbsp;when&nbsp;we&nbsp;can&nbsp;be&nbsp;relatively<br />&nbsp;*&nbsp;&nbsp;sure&nbsp;everything&nbsp;is&nbsp;ok.&nbsp;This&nbsp;routine&nbsp;will&nbsp;be&nbsp;over-<br />&nbsp;*&nbsp;&nbsp;written&nbsp;by&nbsp;the&nbsp;page&nbsp;tables.<br />&nbsp;</span><span style="color: #008000; ">*/</span><br />setup_idt:<br />&nbsp;&nbsp;&nbsp;&nbsp;lea&nbsp;ignore_int,%edx<br />&nbsp;&nbsp;&nbsp;&nbsp;movl&nbsp;$0x00080000,%eax<br />&nbsp;&nbsp;&nbsp;&nbsp;movw&nbsp;%dx,%ax&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">/*</span><span style="color: #008000; ">&nbsp;selector&nbsp;=&nbsp;0x0008&nbsp;=&nbsp;cs&nbsp;</span><span style="color: #008000; ">*/</span><br />&nbsp;&nbsp;&nbsp;&nbsp;movw&nbsp;$0x8E00,%dx&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">/*</span><span style="color: #008000; ">&nbsp;interrupt&nbsp;gate&nbsp;-&nbsp;dpl=0,&nbsp;present&nbsp;</span><span style="color: #008000; ">*/</span><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;lea&nbsp;_idt,%edi<br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;$256,%ecx<br />rp_sidt:<br />&nbsp;&nbsp;&nbsp;&nbsp;movl&nbsp;%eax,(%edi)<br />&nbsp;&nbsp;&nbsp;&nbsp;movl&nbsp;%edx,4(%edi)<br />&nbsp;&nbsp;&nbsp;&nbsp;addl&nbsp;$8,%edi<br />&nbsp;&nbsp;&nbsp;&nbsp;dec&nbsp;%ecx<br />&nbsp;&nbsp;&nbsp;&nbsp;jne&nbsp;rp_sidt<br />&nbsp;&nbsp;&nbsp;&nbsp;lidt&nbsp;idt_descr<br />&nbsp;&nbsp;&nbsp;&nbsp;ret<br /><br /><span style="color: #008000; ">/*</span><span style="color: #008000; "><br />&nbsp;*&nbsp;&nbsp;setup_gdt<br />&nbsp;*<br />&nbsp;*&nbsp;&nbsp;This&nbsp;routines&nbsp;sets&nbsp;up&nbsp;a&nbsp;new&nbsp;gdt&nbsp;and&nbsp;loads&nbsp;it.<br />&nbsp;*&nbsp;&nbsp;Only&nbsp;two&nbsp;entries&nbsp;are&nbsp;currently&nbsp;built,&nbsp;the&nbsp;same<br />&nbsp;*&nbsp;&nbsp;ones&nbsp;that&nbsp;were&nbsp;built&nbsp;in&nbsp;init.s.&nbsp;The&nbsp;routine<br />&nbsp;*&nbsp;&nbsp;is&nbsp;VERY&nbsp;complicated&nbsp;at&nbsp;two&nbsp;whole&nbsp;lines,&nbsp;so&nbsp;this<br />&nbsp;*&nbsp;&nbsp;rather&nbsp;long&nbsp;comment&nbsp;is&nbsp;certainly&nbsp;needed&nbsp;:-).<br />&nbsp;*&nbsp;&nbsp;This&nbsp;routine&nbsp;will&nbsp;beoverwritten&nbsp;by&nbsp;the&nbsp;page&nbsp;tables.<br />&nbsp;</span><span style="color: #008000; ">*/</span><br />setup_gdt:<br />&nbsp;&nbsp;&nbsp;&nbsp;lgdt&nbsp;gdt_descr<br />&nbsp;&nbsp;&nbsp;&nbsp;ret<br /><br />.org&nbsp;0x1000<br />pg0:<br /><br />.org&nbsp;0x2000<br />pg1:<br /><br />.org&nbsp;0x3000<br />pg2:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;This&nbsp;<span style="color: #0000FF; ">is</span>&nbsp;not&nbsp;used&nbsp;yet,&nbsp;but&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;you<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;want&nbsp;to&nbsp;expand&nbsp;past&nbsp;8&nbsp;Mb,&nbsp;you'll&nbsp;have<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;to&nbsp;use&nbsp;it.<br /><br />.org&nbsp;0x4000<br />after_page_tables:<br />&nbsp;&nbsp;&nbsp;&nbsp;pushl&nbsp;$0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;These&nbsp;are&nbsp;the&nbsp;parameters&nbsp;to&nbsp;main&nbsp;:-)<br />&nbsp;&nbsp;&nbsp;&nbsp;pushl&nbsp;$0<br />&nbsp;&nbsp;&nbsp;&nbsp;pushl&nbsp;$0<br />&nbsp;&nbsp;&nbsp;&nbsp;pushl&nbsp;$L6&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;address&nbsp;<span style="color: #0000FF; ">for</span>&nbsp;main,&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;it&nbsp;decides&nbsp;to.<br />&nbsp;&nbsp;&nbsp;&nbsp;pushl&nbsp;$_main<br />&nbsp;&nbsp;&nbsp;&nbsp;jmp&nbsp;setup_paging<br />L6:<br />&nbsp;&nbsp;&nbsp;&nbsp;jmp&nbsp;L6&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;main&nbsp;should&nbsp;never&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;here,&nbsp;but<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;just&nbsp;<span style="color: #0000FF; ">in</span>&nbsp;<span style="color: #0000FF; ">case</span>,&nbsp;we&nbsp;know&nbsp;what&nbsp;happens.<br /><br /><span style="color: #008000; ">/*</span><span style="color: #008000; ">&nbsp;This&nbsp;is&nbsp;the&nbsp;default&nbsp;interrupt&nbsp;"handler"&nbsp;:-)&nbsp;</span><span style="color: #008000; ">*/</span><br />.align&nbsp;2<br />ignore_int:<br />&nbsp;&nbsp;&nbsp;&nbsp;incb&nbsp;0xb8000+160&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;put&nbsp;something&nbsp;on&nbsp;the&nbsp;screen<br />&nbsp;&nbsp;&nbsp;&nbsp;movb&nbsp;$2,0xb8000+161&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;so&nbsp;that&nbsp;we&nbsp;know&nbsp;something<br />&nbsp;&nbsp;&nbsp;&nbsp;iret&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;happened<br /><br /><br /><span style="color: #008000; ">/*</span><span style="color: #008000; "><br />&nbsp;*&nbsp;Setup_paging<br />&nbsp;*<br />&nbsp;*&nbsp;This&nbsp;routine&nbsp;sets&nbsp;up&nbsp;paging&nbsp;by&nbsp;setting&nbsp;the&nbsp;page&nbsp;bit<br />&nbsp;*&nbsp;in&nbsp;cr0.&nbsp;The&nbsp;page&nbsp;tables&nbsp;are&nbsp;set&nbsp;up,&nbsp;identity-mapping<br />&nbsp;*&nbsp;the&nbsp;first&nbsp;8MB.&nbsp;The&nbsp;pager&nbsp;assumes&nbsp;that&nbsp;no&nbsp;illegal<br />&nbsp;*&nbsp;addresses&nbsp;are&nbsp;produced&nbsp;(ie&nbsp;&gt;4Mb&nbsp;on&nbsp;a&nbsp;4Mb&nbsp;machine).<br />&nbsp;*<br />&nbsp;*&nbsp;NOTE!&nbsp;Although&nbsp;all&nbsp;physical&nbsp;memory&nbsp;should&nbsp;be&nbsp;identity<br />&nbsp;*&nbsp;mapped&nbsp;by&nbsp;this&nbsp;routine,&nbsp;only&nbsp;the&nbsp;kernel&nbsp;page&nbsp;functions<br />&nbsp;*&nbsp;use&nbsp;the&nbsp;&gt;1Mb&nbsp;addresses&nbsp;directly.&nbsp;All&nbsp;"normal"&nbsp;functions<br />&nbsp;*&nbsp;use&nbsp;just&nbsp;the&nbsp;lower&nbsp;1Mb,&nbsp;or&nbsp;the&nbsp;local&nbsp;data&nbsp;space,&nbsp;which<br />&nbsp;*&nbsp;will&nbsp;be&nbsp;mapped&nbsp;to&nbsp;some&nbsp;other&nbsp;place&nbsp;-&nbsp;mm&nbsp;keeps&nbsp;track&nbsp;of<br />&nbsp;*&nbsp;that.<br />&nbsp;*<br />&nbsp;*&nbsp;For&nbsp;those&nbsp;with&nbsp;more&nbsp;memory&nbsp;than&nbsp;8&nbsp;Mb&nbsp;-&nbsp;tough&nbsp;luck.&nbsp;I've<br />&nbsp;*&nbsp;not&nbsp;got&nbsp;it,&nbsp;why&nbsp;should&nbsp;you&nbsp;:-)&nbsp;The&nbsp;source&nbsp;is&nbsp;here.&nbsp;Change<br />&nbsp;*&nbsp;it.&nbsp;(Seriously&nbsp;-&nbsp;it&nbsp;shouldn't&nbsp;be&nbsp;too&nbsp;difficult.&nbsp;Mostly<br />&nbsp;*&nbsp;change&nbsp;some&nbsp;constants&nbsp;etc.&nbsp;I&nbsp;left&nbsp;it&nbsp;at&nbsp;8Mb,&nbsp;as&nbsp;my&nbsp;machine<br />&nbsp;*&nbsp;even&nbsp;cannot&nbsp;be&nbsp;extended&nbsp;past&nbsp;that&nbsp;(ok,&nbsp;but&nbsp;it&nbsp;was&nbsp;cheap&nbsp;:-)<br />&nbsp;*&nbsp;I've&nbsp;tried&nbsp;to&nbsp;show&nbsp;which&nbsp;constants&nbsp;to&nbsp;change&nbsp;by&nbsp;having<br />&nbsp;*&nbsp;some&nbsp;kind&nbsp;of&nbsp;marker&nbsp;at&nbsp;them&nbsp;(search&nbsp;for&nbsp;"8Mb"),&nbsp;but&nbsp;I<br />&nbsp;*&nbsp;won't&nbsp;guarantee&nbsp;that's&nbsp;all&nbsp;:-(&nbsp;)<br />&nbsp;</span><span style="color: #008000; ">*/</span><br />.align&nbsp;2<br />setup_paging:<br />&nbsp;&nbsp;&nbsp;&nbsp;movl&nbsp;$1024*3,%ecx<br />&nbsp;&nbsp;&nbsp;&nbsp;xorl&nbsp;%eax,%eax<br />&nbsp;&nbsp;&nbsp;&nbsp;xorl&nbsp;%edi,%edi&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">/*</span><span style="color: #008000; ">&nbsp;pg_dir&nbsp;is&nbsp;at&nbsp;0x000&nbsp;</span><span style="color: #008000; ">*/</span><br />&nbsp;&nbsp;&nbsp;&nbsp;cld;rep;stosl<br />&nbsp;&nbsp;&nbsp;&nbsp;movl&nbsp;$pg0+7,_pg_dir&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">/*</span><span style="color: #008000; ">&nbsp;set&nbsp;present&nbsp;bit/user&nbsp;r/w&nbsp;</span><span style="color: #008000; ">*/</span><br />&nbsp;&nbsp;&nbsp;&nbsp;movl&nbsp;$pg1+7,_pg_dir+4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">/*</span><span style="color: #008000; ">&nbsp;&nbsp;---------&nbsp;"&nbsp;"&nbsp;---------&nbsp;</span><span style="color: #008000; ">*/</span><br />&nbsp;&nbsp;&nbsp;&nbsp;movl&nbsp;$pg1+4092,%edi<br />&nbsp;&nbsp;&nbsp;&nbsp;movl&nbsp;$0x7ff007,%eax&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">/*</span><span style="color: #008000; ">&nbsp;&nbsp;8Mb&nbsp;-&nbsp;4096&nbsp;+&nbsp;7&nbsp;(r/w&nbsp;user,p)&nbsp;</span><span style="color: #008000; ">*/</span><br />&nbsp;&nbsp;&nbsp;&nbsp;std<br />1:&nbsp;&nbsp;&nbsp;&nbsp;stosl&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">/*</span><span style="color: #008000; ">&nbsp;fill&nbsp;pages&nbsp;backwards&nbsp;-&nbsp;more&nbsp;efficient&nbsp;:-)&nbsp;</span><span style="color: #008000; ">*/</span><br />&nbsp;&nbsp;&nbsp;&nbsp;subl&nbsp;$0x1000,%eax<br />&nbsp;&nbsp;&nbsp;&nbsp;jge&nbsp;1b<br />&nbsp;&nbsp;&nbsp;&nbsp;xorl&nbsp;%eax,%eax&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">/*</span><span style="color: #008000; ">&nbsp;pg_dir&nbsp;is&nbsp;at&nbsp;0x0000&nbsp;</span><span style="color: #008000; ">*/</span><br />&nbsp;&nbsp;&nbsp;&nbsp;movl&nbsp;%eax,%cr3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">/*</span><span style="color: #008000; ">&nbsp;cr3&nbsp;-&nbsp;page&nbsp;directory&nbsp;start&nbsp;</span><span style="color: #008000; ">*/</span><br />&nbsp;&nbsp;&nbsp;&nbsp;movl&nbsp;%cr0,%eax<br />&nbsp;&nbsp;&nbsp;&nbsp;orl&nbsp;$0x80000000,%eax<br />&nbsp;&nbsp;&nbsp;&nbsp;movl&nbsp;%eax,%cr0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">/*</span><span style="color: #008000; ">&nbsp;set&nbsp;paging&nbsp;(PG)&nbsp;bit&nbsp;</span><span style="color: #008000; ">*/</span><br />&nbsp;&nbsp;&nbsp;&nbsp;ret&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">/*</span><span style="color: #008000; ">&nbsp;this&nbsp;also&nbsp;flushes&nbsp;prefetch-queue&nbsp;</span><span style="color: #008000; ">*/</span><br /><br />.align&nbsp;2<br />.word&nbsp;0<br />idt_descr:<br />&nbsp;&nbsp;&nbsp;&nbsp;.word&nbsp;256*8-1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;idt&nbsp;contains&nbsp;256&nbsp;entries<br />&nbsp;&nbsp;&nbsp;&nbsp;.<span style="color: #0000FF; ">long</span>&nbsp;_idt<br />.align&nbsp;2<br />.word&nbsp;0<br />gdt_descr:<br />&nbsp;&nbsp;&nbsp;&nbsp;.word&nbsp;256*8-1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;so&nbsp;does&nbsp;gdt&nbsp;(not&nbsp;that&nbsp;that's&nbsp;any<br />&nbsp;&nbsp;&nbsp;&nbsp;.<span style="color: #0000FF; ">long</span>&nbsp;_gdt&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;magic&nbsp;number,&nbsp;but&nbsp;it&nbsp;works&nbsp;<span style="color: #0000FF; ">for</span>&nbsp;me&nbsp;:^)<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;.align&nbsp;3<br />_idt:&nbsp;&nbsp;&nbsp;&nbsp;.fill&nbsp;256,8,0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;idt&nbsp;<span style="color: #0000FF; ">is</span>&nbsp;uninitialized<br /><br />_gdt:&nbsp;&nbsp;&nbsp;&nbsp;.quad&nbsp;0x0000000000000000&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">/*</span><span style="color: #008000; ">&nbsp;NULL&nbsp;descriptor&nbsp;</span><span style="color: #008000; ">*/</span><br />&nbsp;&nbsp;&nbsp;&nbsp;.quad&nbsp;0x00c09a00000007ff&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">/*</span><span style="color: #008000; ">&nbsp;8Mb&nbsp;</span><span style="color: #008000; ">*/</span><br />&nbsp;&nbsp;&nbsp;&nbsp;.quad&nbsp;0x00c09200000007ff&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">/*</span><span style="color: #008000; ">&nbsp;8Mb&nbsp;</span><span style="color: #008000; ">*/</span><br />&nbsp;&nbsp;&nbsp;&nbsp;.quad&nbsp;0x0000000000000000&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">/*</span><span style="color: #008000; ">&nbsp;TEMPORARY&nbsp;-&nbsp;don't&nbsp;use&nbsp;</span><span style="color: #008000; ">*/</span><br />&nbsp;&nbsp;&nbsp;&nbsp;.fill&nbsp;252,8,0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">/*</span><span style="color: #008000; ">&nbsp;space&nbsp;for&nbsp;LDT's&nbsp;and&nbsp;TSS's&nbsp;etc&nbsp;</span><span style="color: #008000; ">*/</span></div><img src ="http://www.cppblog.com/jackyxinli/aggbug/209055.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/jackyxinli/" target="_blank">jacky_zz</a> 2014-12-08 10:59 <a href="http://www.cppblog.com/jackyxinli/archive/2014/12/08/209055.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[ASM] boot.s</title><link>http://www.cppblog.com/jackyxinli/archive/2014/12/08/209054.html</link><dc:creator>jacky_zz</dc:creator><author>jacky_zz</author><pubDate>Mon, 08 Dec 2014 02:59:00 GMT</pubDate><guid>http://www.cppblog.com/jackyxinli/archive/2014/12/08/209054.html</guid><wfw:comment>http://www.cppblog.com/jackyxinli/comments/209054.html</wfw:comment><comments>http://www.cppblog.com/jackyxinli/archive/2014/12/08/209054.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/jackyxinli/comments/commentRss/209054.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/jackyxinli/services/trackbacks/209054.html</trackback:ping><description><![CDATA[<div style="font-size: 13px; border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 98%; word-break: break-all; background-color: #eeeeee;"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->|<br />|&nbsp;&nbsp;&nbsp;&nbsp;boot.s<br />|<br />|&nbsp;boot.s&nbsp;<span style="color: #0000FF; ">is</span>&nbsp;loaded&nbsp;at&nbsp;0x7c00&nbsp;by&nbsp;the&nbsp;bios-startup&nbsp;routines,&nbsp;and&nbsp;moves&nbsp;itself<br />|&nbsp;<span style="color: #0000FF; ">out</span>&nbsp;of&nbsp;the&nbsp;way&nbsp;to&nbsp;address&nbsp;0x90000,&nbsp;and&nbsp;jumps&nbsp;there.<br />|<br />|&nbsp;It&nbsp;then&nbsp;loads&nbsp;the&nbsp;system&nbsp;at&nbsp;0x10000,&nbsp;<span style="color: #0000FF; ">using</span>&nbsp;BIOS&nbsp;interrupts.&nbsp;Thereafter<br />|&nbsp;it&nbsp;disables&nbsp;all&nbsp;interrupts,&nbsp;moves&nbsp;the&nbsp;system&nbsp;down&nbsp;to&nbsp;0x0000,&nbsp;changes<br />|&nbsp;to&nbsp;<span style="color: #0000FF; ">protected</span>&nbsp;mode,&nbsp;and&nbsp;calls&nbsp;the&nbsp;start&nbsp;of&nbsp;system.&nbsp;System&nbsp;then&nbsp;must<br />|&nbsp;RE-initialize&nbsp;the&nbsp;<span style="color: #0000FF; ">protected</span>&nbsp;mode&nbsp;<span style="color: #0000FF; ">in</span>&nbsp;it's&nbsp;own&nbsp;tables,&nbsp;and&nbsp;enable<br />|&nbsp;interrupts&nbsp;<span style="color: #0000FF; ">as</span>&nbsp;needed.<br />|<br />|&nbsp;NOTE!&nbsp;currently&nbsp;system&nbsp;<span style="color: #0000FF; ">is</span>&nbsp;at&nbsp;most&nbsp;8*65536&nbsp;bytes&nbsp;<span style="color: #0000FF; ">long</span>.&nbsp;This&nbsp;should&nbsp;be&nbsp;no<br />|&nbsp;problem,&nbsp;even&nbsp;<span style="color: #0000FF; ">in</span>&nbsp;the&nbsp;future.&nbsp;I&nbsp;want&nbsp;to&nbsp;keep&nbsp;it&nbsp;simple.&nbsp;This&nbsp;512&nbsp;kB<br />|&nbsp;kernel&nbsp;size&nbsp;should&nbsp;be&nbsp;enough&nbsp;-&nbsp;<span style="color: #0000FF; ">in</span>&nbsp;fact&nbsp;more&nbsp;would&nbsp;mean&nbsp;we'd&nbsp;have&nbsp;to&nbsp;move<br />|&nbsp;not&nbsp;just&nbsp;these&nbsp;start-up&nbsp;routines,&nbsp;but&nbsp;also&nbsp;<span style="color: #0000FF; ">do</span>&nbsp;something&nbsp;about&nbsp;the&nbsp;cache-<br />|&nbsp;memory&nbsp;(block&nbsp;IO&nbsp;devices).&nbsp;The&nbsp;area&nbsp;left&nbsp;over&nbsp;<span style="color: #0000FF; ">in</span>&nbsp;the&nbsp;lower&nbsp;640&nbsp;kB&nbsp;<span style="color: #0000FF; ">is</span>&nbsp;meant<br />|&nbsp;<span style="color: #0000FF; ">for</span>&nbsp;these.&nbsp;No&nbsp;other&nbsp;memory&nbsp;<span style="color: #0000FF; ">is</span>&nbsp;assumed&nbsp;to&nbsp;be&nbsp;"physical",&nbsp;ie&nbsp;all&nbsp;memory<br />|&nbsp;over&nbsp;1Mb&nbsp;<span style="color: #0000FF; ">is</span>&nbsp;demand-paging.&nbsp;All&nbsp;addresses&nbsp;under&nbsp;1Mb&nbsp;are&nbsp;guaranteed&nbsp;to&nbsp;match<br />|&nbsp;their&nbsp;physical&nbsp;addresses.<br />|<br />|&nbsp;NOTE1&nbsp;abouve&nbsp;<span style="color: #0000FF; ">is</span>&nbsp;no&nbsp;longer&nbsp;valid&nbsp;<span style="color: #0000FF; ">in</span>&nbsp;it's&nbsp;entirety.&nbsp;cache-memory&nbsp;is&nbsp;allocated<br />|&nbsp;above&nbsp;the&nbsp;1Mb&nbsp;mark&nbsp;<span style="color: #0000FF; ">as</span>&nbsp;well&nbsp;<span style="color: #0000FF; ">as</span>&nbsp;below.&nbsp;Otherwise&nbsp;it&nbsp;<span style="color: #0000FF; ">is</span>&nbsp;mainly&nbsp;correct.<br />|<br />|&nbsp;NOTE&nbsp;2!&nbsp;The&nbsp;boot&nbsp;disk&nbsp;type&nbsp;must&nbsp;be&nbsp;<span style="color: #0000FF; ">set</span>&nbsp;at&nbsp;compile-time,&nbsp;by&nbsp;setting<br />|&nbsp;the&nbsp;following&nbsp;equ.&nbsp;Having&nbsp;the&nbsp;boot-up&nbsp;procedure&nbsp;hunt&nbsp;<span style="color: #0000FF; ">for</span>&nbsp;the&nbsp;right<br />|&nbsp;disk&nbsp;type&nbsp;<span style="color: #0000FF; ">is</span>&nbsp;severe&nbsp;brain-damage.<br />|&nbsp;The&nbsp;loader&nbsp;has&nbsp;been&nbsp;made&nbsp;<span style="color: #0000FF; ">as</span>&nbsp;simple&nbsp;<span style="color: #0000FF; ">as</span>&nbsp;possible&nbsp;(had&nbsp;to,&nbsp;to&nbsp;<span style="color: #0000FF; ">get</span>&nbsp;it<br />|&nbsp;<span style="color: #0000FF; ">in</span>&nbsp;512&nbsp;bytes&nbsp;with&nbsp;the&nbsp;code&nbsp;to&nbsp;move&nbsp;to&nbsp;<span style="color: #0000FF; ">protected</span>&nbsp;mode),&nbsp;and&nbsp;continuos<br />|&nbsp;read&nbsp;errors&nbsp;will&nbsp;result&nbsp;<span style="color: #0000FF; ">in</span>&nbsp;a&nbsp;unbreakable&nbsp;loop.&nbsp;Reboot&nbsp;by&nbsp;hand.&nbsp;It<br />|&nbsp;loads&nbsp;pretty&nbsp;fast&nbsp;by&nbsp;getting&nbsp;whole&nbsp;sectors&nbsp;at&nbsp;a&nbsp;time&nbsp;whenever&nbsp;possible.<br /><br />|&nbsp;1.44Mb&nbsp;disks:<br />sectors&nbsp;=&nbsp;18<br />|&nbsp;1.2Mb&nbsp;disks:<br />|&nbsp;sectors&nbsp;=&nbsp;15<br />|&nbsp;720kB&nbsp;disks:<br />|&nbsp;sectors&nbsp;=&nbsp;9<br /><br />.globl&nbsp;begtext,&nbsp;begdata,&nbsp;begbss,&nbsp;endtext,&nbsp;enddata,&nbsp;endbss<br />.text<br />begtext:<br />.data<br />begdata:<br />.bss<br />begbss:<br />.text<br /><br />BOOTSEG&nbsp;=&nbsp;0x07c0<br />INITSEG&nbsp;=&nbsp;0x9000<br />SYSSEG&nbsp;&nbsp;=&nbsp;0x1000&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;system&nbsp;loaded&nbsp;at&nbsp;0x10000&nbsp;(65536).<br />ENDSEG&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;SYSSEG&nbsp;+&nbsp;SYSSIZE<br /><br />entry&nbsp;start<br />start:<br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;&nbsp;&nbsp;&nbsp;ax,#BOOTSEG<br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;&nbsp;&nbsp;&nbsp;ds,ax<br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;&nbsp;&nbsp;&nbsp;ax,#INITSEG<br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;&nbsp;&nbsp;&nbsp;es,ax<br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;&nbsp;&nbsp;&nbsp;cx,#256<br />&nbsp;&nbsp;&nbsp;&nbsp;sub&nbsp;&nbsp;&nbsp;&nbsp;si,si<br />&nbsp;&nbsp;&nbsp;&nbsp;sub&nbsp;&nbsp;&nbsp;&nbsp;di,di<br />&nbsp;&nbsp;&nbsp;&nbsp;rep<br />&nbsp;&nbsp;&nbsp;&nbsp;movw<br />&nbsp;&nbsp;&nbsp;&nbsp;jmpi&nbsp;&nbsp;&nbsp;&nbsp;go,INITSEG<br />go:&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;&nbsp;&nbsp;&nbsp;ax,cs<br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;&nbsp;&nbsp;&nbsp;ds,ax<br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;&nbsp;&nbsp;&nbsp;es,ax<br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;&nbsp;&nbsp;&nbsp;ss,ax<br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;&nbsp;&nbsp;&nbsp;sp,#0x400&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;arbitrary&nbsp;value&nbsp;&gt;&gt;512<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;&nbsp;&nbsp;&nbsp;ah,#0x03&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;read&nbsp;cursor&nbsp;pos<br />&nbsp;&nbsp;&nbsp;&nbsp;xor&nbsp;&nbsp;&nbsp;&nbsp;bh,bh<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;&nbsp;&nbsp;&nbsp;0x10<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;&nbsp;&nbsp;&nbsp;cx,#24<br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;&nbsp;&nbsp;&nbsp;bx,#0x0007&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;page&nbsp;0,&nbsp;attribute&nbsp;7&nbsp;(normal)<br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;&nbsp;&nbsp;&nbsp;bp,#msg1<br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;&nbsp;&nbsp;&nbsp;ax,#0x1301&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;write&nbsp;<span style="color: #0000FF; ">string</span>,&nbsp;move&nbsp;cursor<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;&nbsp;&nbsp;&nbsp;0x10<br /><br />|&nbsp;ok,&nbsp;we've&nbsp;written&nbsp;the&nbsp;message,&nbsp;now<br />|&nbsp;we&nbsp;want&nbsp;to&nbsp;load&nbsp;the&nbsp;system&nbsp;(at&nbsp;0x10000)<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;&nbsp;&nbsp;&nbsp;ax,#SYSSEG<br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;&nbsp;&nbsp;&nbsp;es,ax&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;segment&nbsp;of&nbsp;0x010000<br />&nbsp;&nbsp;&nbsp;&nbsp;call&nbsp;&nbsp;&nbsp;&nbsp;read_it<br />&nbsp;&nbsp;&nbsp;&nbsp;call&nbsp;&nbsp;&nbsp;&nbsp;kill_motor<br /><br />|&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;the&nbsp;read&nbsp;went&nbsp;well&nbsp;we&nbsp;<span style="color: #0000FF; ">get</span>&nbsp;current&nbsp;cursor&nbsp;position&nbsp;ans&nbsp;save&nbsp;it&nbsp;<span style="color: #0000FF; ">for</span><br />|&nbsp;posterity.<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;&nbsp;&nbsp;&nbsp;ah,#0x03&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;read&nbsp;cursor&nbsp;pos<br />&nbsp;&nbsp;&nbsp;&nbsp;xor&nbsp;&nbsp;&nbsp;&nbsp;bh,bh<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;&nbsp;&nbsp;&nbsp;0x10&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;save&nbsp;it&nbsp;<span style="color: #0000FF; ">in</span>&nbsp;known&nbsp;place,&nbsp;con_init&nbsp;fetches<br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;&nbsp;&nbsp;&nbsp;[510],dx&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;it&nbsp;from&nbsp;0x90510.<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />|&nbsp;now&nbsp;we&nbsp;want&nbsp;to&nbsp;move&nbsp;to&nbsp;<span style="color: #0000FF; ">protected</span>&nbsp;mode&nbsp;<img src="http://www.cppblog.com/Images/dot.gif" alt="" /><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;cli&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;no&nbsp;interrupts&nbsp;allowed&nbsp;!<br /><br />|&nbsp;first&nbsp;we&nbsp;move&nbsp;the&nbsp;system&nbsp;to&nbsp;it's&nbsp;rightful&nbsp;place<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;&nbsp;&nbsp;&nbsp;ax,#0x0000<br />&nbsp;&nbsp;&nbsp;&nbsp;cld&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;'direction'=0,&nbsp;movs&nbsp;moves&nbsp;forward<br />do_move:<br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;&nbsp;&nbsp;&nbsp;es,ax&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;destination&nbsp;segment<br />&nbsp;&nbsp;&nbsp;&nbsp;add&nbsp;&nbsp;&nbsp;&nbsp;ax,#0x1000<br />&nbsp;&nbsp;&nbsp;&nbsp;cmp&nbsp;&nbsp;&nbsp;&nbsp;ax,#0x9000<br />&nbsp;&nbsp;&nbsp;&nbsp;jz&nbsp;&nbsp;&nbsp;&nbsp;end_move<br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;&nbsp;&nbsp;&nbsp;ds,ax&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;source&nbsp;segment<br />&nbsp;&nbsp;&nbsp;&nbsp;sub&nbsp;&nbsp;&nbsp;&nbsp;di,di<br />&nbsp;&nbsp;&nbsp;&nbsp;sub&nbsp;&nbsp;&nbsp;&nbsp;si,si<br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cx,#0x8000<br />&nbsp;&nbsp;&nbsp;&nbsp;rep<br />&nbsp;&nbsp;&nbsp;&nbsp;movsw<br />&nbsp;&nbsp;&nbsp;&nbsp;j&nbsp;&nbsp;&nbsp;&nbsp;do_move<br /><br />|&nbsp;then&nbsp;we&nbsp;load&nbsp;the&nbsp;segment&nbsp;descriptors<br /><br />end_move:<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;&nbsp;&nbsp;&nbsp;ax,cs&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;right,&nbsp;forgot&nbsp;<span style="color: #0000FF; ">this</span>&nbsp;at&nbsp;first.&nbsp;didn't&nbsp;work&nbsp;:-)<br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;&nbsp;&nbsp;&nbsp;ds,ax<br />&nbsp;&nbsp;&nbsp;&nbsp;lidt&nbsp;&nbsp;&nbsp;&nbsp;idt_48&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;load&nbsp;idt&nbsp;with&nbsp;0,0<br />&nbsp;&nbsp;&nbsp;&nbsp;lgdt&nbsp;&nbsp;&nbsp;&nbsp;gdt_48&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;load&nbsp;gdt&nbsp;with&nbsp;whatever&nbsp;appropriate<br /><br />|&nbsp;that&nbsp;was&nbsp;painless,&nbsp;now&nbsp;we&nbsp;enable&nbsp;A20<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;call&nbsp;&nbsp;&nbsp;&nbsp;empty_8042<br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;&nbsp;&nbsp;&nbsp;al,#0xD1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;command&nbsp;write<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">out</span>&nbsp;&nbsp;&nbsp;&nbsp;#0x64,al<br />&nbsp;&nbsp;&nbsp;&nbsp;call&nbsp;&nbsp;&nbsp;&nbsp;empty_8042<br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;&nbsp;&nbsp;&nbsp;al,#0xDF&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;A20&nbsp;on<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">out</span>&nbsp;&nbsp;&nbsp;&nbsp;#0x60,al<br />&nbsp;&nbsp;&nbsp;&nbsp;call&nbsp;&nbsp;&nbsp;&nbsp;empty_8042<br /><br />|&nbsp;well,&nbsp;that&nbsp;went&nbsp;ok,&nbsp;I&nbsp;hope.&nbsp;Now&nbsp;we&nbsp;have&nbsp;to&nbsp;reprogram&nbsp;the&nbsp;interrupts&nbsp;:-(<br />|&nbsp;we&nbsp;put&nbsp;them&nbsp;right&nbsp;after&nbsp;the&nbsp;intel-reserved&nbsp;hardware&nbsp;interrupts,&nbsp;at<br />|&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;0x20-0x2F.&nbsp;There&nbsp;they&nbsp;won't&nbsp;mess&nbsp;up&nbsp;anything.&nbsp;Sadly&nbsp;IBM&nbsp;really<br />|&nbsp;messed&nbsp;<span style="color: #0000FF; ">this</span>&nbsp;up&nbsp;with&nbsp;the&nbsp;original&nbsp;PC,&nbsp;and&nbsp;they&nbsp;haven't&nbsp;been&nbsp;able&nbsp;to<br />|&nbsp;rectify&nbsp;it&nbsp;afterwards.&nbsp;Thus&nbsp;the&nbsp;bios&nbsp;puts&nbsp;interrupts&nbsp;at&nbsp;0x08-0x0f,<br />|&nbsp;which&nbsp;<span style="color: #0000FF; ">is</span>&nbsp;used&nbsp;<span style="color: #0000FF; ">for</span>&nbsp;the&nbsp;<span style="color: #0000FF; ">internal</span>&nbsp;hardware&nbsp;interrupts&nbsp;<span style="color: #0000FF; ">as</span>&nbsp;well.&nbsp;We&nbsp;just<br />|&nbsp;have&nbsp;to&nbsp;reprogram&nbsp;the&nbsp;8259's,&nbsp;and&nbsp;it&nbsp;isn't&nbsp;fun.<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;&nbsp;&nbsp;&nbsp;al,#0x11&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;initialization&nbsp;sequence<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">out</span>&nbsp;&nbsp;&nbsp;&nbsp;#0x20,al&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;send&nbsp;it&nbsp;to&nbsp;8259A-1<br />&nbsp;&nbsp;&nbsp;&nbsp;.word&nbsp;&nbsp;&nbsp;&nbsp;0x00eb,0x00eb&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;jmp&nbsp;$+2,&nbsp;jmp&nbsp;$+2<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">out</span>&nbsp;&nbsp;&nbsp;&nbsp;#0xA0,al&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;and&nbsp;to&nbsp;8259A-2<br />&nbsp;&nbsp;&nbsp;&nbsp;.word&nbsp;&nbsp;&nbsp;&nbsp;0x00eb,0x00eb<br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;&nbsp;&nbsp;&nbsp;al,#0x20&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;start&nbsp;of&nbsp;hardware&nbsp;<span style="color: #0000FF; ">int</span>'s&nbsp;(0x20)<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">out</span>&nbsp;&nbsp;&nbsp;&nbsp;#0x21,al<br />&nbsp;&nbsp;&nbsp;&nbsp;.word&nbsp;&nbsp;&nbsp;&nbsp;0x00eb,0x00eb<br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;&nbsp;&nbsp;&nbsp;al,#0x28&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;start&nbsp;of&nbsp;hardware&nbsp;<span style="color: #0000FF; ">int</span>'s&nbsp;2&nbsp;(0x28)<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">out</span>&nbsp;&nbsp;&nbsp;&nbsp;#0xA1,al<br />&nbsp;&nbsp;&nbsp;&nbsp;.word&nbsp;&nbsp;&nbsp;&nbsp;0x00eb,0x00eb<br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;&nbsp;&nbsp;&nbsp;al,#0x04&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;8259-1&nbsp;<span style="color: #0000FF; ">is</span>&nbsp;master<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">out</span>&nbsp;&nbsp;&nbsp;&nbsp;#0x21,al<br />&nbsp;&nbsp;&nbsp;&nbsp;.word&nbsp;&nbsp;&nbsp;&nbsp;0x00eb,0x00eb<br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;&nbsp;&nbsp;&nbsp;al,#0x02&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;8259-2&nbsp;<span style="color: #0000FF; ">is</span>&nbsp;slave<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">out</span>&nbsp;&nbsp;&nbsp;&nbsp;#0xA1,al<br />&nbsp;&nbsp;&nbsp;&nbsp;.word&nbsp;&nbsp;&nbsp;&nbsp;0x00eb,0x00eb<br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;&nbsp;&nbsp;&nbsp;al,#0x01&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;8086&nbsp;mode&nbsp;<span style="color: #0000FF; ">for</span>&nbsp;both<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">out</span>&nbsp;&nbsp;&nbsp;&nbsp;#0x21,al<br />&nbsp;&nbsp;&nbsp;&nbsp;.word&nbsp;&nbsp;&nbsp;&nbsp;0x00eb,0x00eb<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">out</span>&nbsp;&nbsp;&nbsp;&nbsp;#0xA1,al<br />&nbsp;&nbsp;&nbsp;&nbsp;.word&nbsp;&nbsp;&nbsp;&nbsp;0x00eb,0x00eb<br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;&nbsp;&nbsp;&nbsp;al,#0xFF&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;mask&nbsp;off&nbsp;all&nbsp;interrupts&nbsp;<span style="color: #0000FF; ">for</span>&nbsp;now<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">out</span>&nbsp;&nbsp;&nbsp;&nbsp;#0x21,al<br />&nbsp;&nbsp;&nbsp;&nbsp;.word&nbsp;&nbsp;&nbsp;&nbsp;0x00eb,0x00eb<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">out</span>&nbsp;&nbsp;&nbsp;&nbsp;#0xA1,al<br /><br />|&nbsp;well,&nbsp;that&nbsp;certainly&nbsp;wasn't&nbsp;fun&nbsp;:-(.&nbsp;Hopefully&nbsp;it&nbsp;works,&nbsp;and&nbsp;we&nbsp;don't<br />|&nbsp;need&nbsp;no&nbsp;steenking&nbsp;BIOS&nbsp;anyway&nbsp;(except&nbsp;<span style="color: #0000FF; ">for</span>&nbsp;the&nbsp;initial&nbsp;loading&nbsp;:-).<br />|&nbsp;The&nbsp;BIOS-routine&nbsp;wants&nbsp;lots&nbsp;of&nbsp;unnecessary&nbsp;data,&nbsp;and&nbsp;it's&nbsp;less<br />|&nbsp;"interesting"&nbsp;anyway.&nbsp;This&nbsp;<span style="color: #0000FF; ">is</span>&nbsp;how&nbsp;REAL&nbsp;programmers&nbsp;<span style="color: #0000FF; ">do</span>&nbsp;it.<br />|<br />|&nbsp;Well,&nbsp;now's&nbsp;the&nbsp;time&nbsp;to&nbsp;actually&nbsp;move&nbsp;into&nbsp;protected&nbsp;mode.&nbsp;To&nbsp;make<br />|&nbsp;things&nbsp;<span style="color: #0000FF; ">as</span>&nbsp;simple&nbsp;<span style="color: #0000FF; ">as</span>&nbsp;possible,&nbsp;we&nbsp;<span style="color: #0000FF; ">do</span>&nbsp;no&nbsp;register&nbsp;<span style="color: #0000FF; ">set</span>-up&nbsp;or&nbsp;anything,<br />|&nbsp;we&nbsp;let&nbsp;the&nbsp;gnu-compiled&nbsp;32-bit&nbsp;programs&nbsp;<span style="color: #0000FF; ">do</span>&nbsp;that.&nbsp;We&nbsp;just&nbsp;jump&nbsp;to<br />|&nbsp;absolute&nbsp;address&nbsp;0x00000,&nbsp;<span style="color: #0000FF; ">in</span>&nbsp;32-bit&nbsp;<span style="color: #0000FF; ">protected</span>&nbsp;mode.<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;&nbsp;&nbsp;&nbsp;ax,#0x0001&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;<span style="color: #0000FF; ">protected</span>&nbsp;mode&nbsp;(PE)&nbsp;bit<br />&nbsp;&nbsp;&nbsp;&nbsp;lmsw&nbsp;&nbsp;&nbsp;&nbsp;ax&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;This&nbsp;<span style="color: #0000FF; ">is</span>&nbsp;it!<br />&nbsp;&nbsp;&nbsp;&nbsp;jmpi&nbsp;&nbsp;&nbsp;&nbsp;0,8&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;jmp&nbsp;offset&nbsp;0&nbsp;of&nbsp;segment&nbsp;8&nbsp;(cs)<br /><br />|&nbsp;This&nbsp;routine&nbsp;checks&nbsp;that&nbsp;the&nbsp;keyboard&nbsp;command&nbsp;queue&nbsp;<span style="color: #0000FF; ">is</span>&nbsp;empty<br />|&nbsp;No&nbsp;timeout&nbsp;<span style="color: #0000FF; ">is</span>&nbsp;used&nbsp;-&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;<span style="color: #0000FF; ">this</span>&nbsp;hangs&nbsp;there&nbsp;<span style="color: #0000FF; ">is</span>&nbsp;something&nbsp;wrong&nbsp;with<br />|&nbsp;the&nbsp;machine,&nbsp;and&nbsp;we&nbsp;probably&nbsp;couldn't&nbsp;proceed&nbsp;anyway.<br />empty_8042:<br />&nbsp;&nbsp;&nbsp;&nbsp;.word&nbsp;&nbsp;&nbsp;&nbsp;0x00eb,0x00eb<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">in</span>&nbsp;&nbsp;&nbsp;&nbsp;al,#0x64&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;8042&nbsp;status&nbsp;port<br />&nbsp;&nbsp;&nbsp;&nbsp;test&nbsp;&nbsp;&nbsp;&nbsp;al,#2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;<span style="color: #0000FF; ">is</span>&nbsp;input&nbsp;buffer&nbsp;full?<br />&nbsp;&nbsp;&nbsp;&nbsp;jnz&nbsp;&nbsp;&nbsp;&nbsp;empty_8042&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;yes&nbsp;-&nbsp;loop<br />&nbsp;&nbsp;&nbsp;&nbsp;ret<br /><br />|&nbsp;This&nbsp;routine&nbsp;loads&nbsp;the&nbsp;system&nbsp;at&nbsp;address&nbsp;0x10000,&nbsp;making&nbsp;sure<br />|&nbsp;no&nbsp;64kB&nbsp;boundaries&nbsp;are&nbsp;crossed.&nbsp;We&nbsp;<span style="color: #0000FF; ">try</span>&nbsp;to&nbsp;load&nbsp;it&nbsp;<span style="color: #0000FF; ">as</span>&nbsp;fast&nbsp;<span style="color: #0000FF; ">as</span><br />|&nbsp;possible,&nbsp;loading&nbsp;whole&nbsp;tracks&nbsp;whenever&nbsp;we&nbsp;can.<br />|<br />|&nbsp;<span style="color: #0000FF; ">in</span>:&nbsp;&nbsp;&nbsp;&nbsp;es&nbsp;-&nbsp;starting&nbsp;address&nbsp;segment&nbsp;(normally&nbsp;0x1000)<br />|<br />|&nbsp;This&nbsp;routine&nbsp;has&nbsp;to&nbsp;be&nbsp;recompiled&nbsp;to&nbsp;fit&nbsp;another&nbsp;drive&nbsp;type,<br />|&nbsp;just&nbsp;change&nbsp;the&nbsp;"sectors"&nbsp;variable&nbsp;at&nbsp;the&nbsp;start&nbsp;of&nbsp;the&nbsp;file<br />|&nbsp;(originally&nbsp;18,&nbsp;<span style="color: #0000FF; ">for</span>&nbsp;a&nbsp;1.44Mb&nbsp;drive)<br />|<br />sread:&nbsp;&nbsp;&nbsp;&nbsp;.word&nbsp;1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;sectors&nbsp;read&nbsp;of&nbsp;current&nbsp;track<br />head:&nbsp;&nbsp;&nbsp;&nbsp;.word&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;current&nbsp;head<br />track:&nbsp;&nbsp;&nbsp;&nbsp;.word&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;current&nbsp;track<br />read_it:<br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;ax,es<br />&nbsp;&nbsp;&nbsp;&nbsp;test&nbsp;ax,#0x0fff<br />die:&nbsp;&nbsp;&nbsp;&nbsp;jne&nbsp;die&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;es&nbsp;must&nbsp;be&nbsp;at&nbsp;64kB&nbsp;boundary<br />&nbsp;&nbsp;&nbsp;&nbsp;xor&nbsp;bx,bx&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;bx&nbsp;<span style="color: #0000FF; ">is</span>&nbsp;starting&nbsp;address&nbsp;within&nbsp;segment<br />rp_read:<br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;ax,es<br />&nbsp;&nbsp;&nbsp;&nbsp;cmp&nbsp;ax,#ENDSEG&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;have&nbsp;we&nbsp;loaded&nbsp;all&nbsp;yet?<br />&nbsp;&nbsp;&nbsp;&nbsp;jb&nbsp;ok1_read<br />&nbsp;&nbsp;&nbsp;&nbsp;ret<br />ok1_read:<br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;ax,#sectors<br />&nbsp;&nbsp;&nbsp;&nbsp;sub&nbsp;ax,sread<br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;cx,ax<br />&nbsp;&nbsp;&nbsp;&nbsp;shl&nbsp;cx,#9<br />&nbsp;&nbsp;&nbsp;&nbsp;add&nbsp;cx,bx<br />&nbsp;&nbsp;&nbsp;&nbsp;jnc&nbsp;ok2_read<br />&nbsp;&nbsp;&nbsp;&nbsp;je&nbsp;ok2_read<br />&nbsp;&nbsp;&nbsp;&nbsp;xor&nbsp;ax,ax<br />&nbsp;&nbsp;&nbsp;&nbsp;sub&nbsp;ax,bx<br />&nbsp;&nbsp;&nbsp;&nbsp;shr&nbsp;ax,#9<br />ok2_read:<br />&nbsp;&nbsp;&nbsp;&nbsp;call&nbsp;read_track<br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;cx,ax<br />&nbsp;&nbsp;&nbsp;&nbsp;add&nbsp;ax,sread<br />&nbsp;&nbsp;&nbsp;&nbsp;cmp&nbsp;ax,#sectors<br />&nbsp;&nbsp;&nbsp;&nbsp;jne&nbsp;ok3_read<br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;ax,#1<br />&nbsp;&nbsp;&nbsp;&nbsp;sub&nbsp;ax,head<br />&nbsp;&nbsp;&nbsp;&nbsp;jne&nbsp;ok4_read<br />&nbsp;&nbsp;&nbsp;&nbsp;inc&nbsp;track<br />ok4_read:<br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;head,ax<br />&nbsp;&nbsp;&nbsp;&nbsp;xor&nbsp;ax,ax<br />ok3_read:<br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;sread,ax<br />&nbsp;&nbsp;&nbsp;&nbsp;shl&nbsp;cx,#9<br />&nbsp;&nbsp;&nbsp;&nbsp;add&nbsp;bx,cx<br />&nbsp;&nbsp;&nbsp;&nbsp;jnc&nbsp;rp_read<br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;ax,es<br />&nbsp;&nbsp;&nbsp;&nbsp;add&nbsp;ax,#0x1000<br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;es,ax<br />&nbsp;&nbsp;&nbsp;&nbsp;xor&nbsp;bx,bx<br />&nbsp;&nbsp;&nbsp;&nbsp;jmp&nbsp;rp_read<br /><br />read_track:<br />&nbsp;&nbsp;&nbsp;&nbsp;push&nbsp;ax<br />&nbsp;&nbsp;&nbsp;&nbsp;push&nbsp;bx<br />&nbsp;&nbsp;&nbsp;&nbsp;push&nbsp;cx<br />&nbsp;&nbsp;&nbsp;&nbsp;push&nbsp;dx<br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;dx,track<br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;cx,sread<br />&nbsp;&nbsp;&nbsp;&nbsp;inc&nbsp;cx<br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;ch,dl<br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;dx,head<br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;dh,dl<br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;dl,#0<br />&nbsp;&nbsp;&nbsp;&nbsp;and&nbsp;dx,#0x0100<br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;ah,#2<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;0x13<br />&nbsp;&nbsp;&nbsp;&nbsp;jc&nbsp;bad_rt<br />&nbsp;&nbsp;&nbsp;&nbsp;pop&nbsp;dx<br />&nbsp;&nbsp;&nbsp;&nbsp;pop&nbsp;cx<br />&nbsp;&nbsp;&nbsp;&nbsp;pop&nbsp;bx<br />&nbsp;&nbsp;&nbsp;&nbsp;pop&nbsp;ax<br />&nbsp;&nbsp;&nbsp;&nbsp;ret<br />bad_rt:&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;ax,#0<br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;dx,#0<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;0x13<br />&nbsp;&nbsp;&nbsp;&nbsp;pop&nbsp;dx<br />&nbsp;&nbsp;&nbsp;&nbsp;pop&nbsp;cx<br />&nbsp;&nbsp;&nbsp;&nbsp;pop&nbsp;bx<br />&nbsp;&nbsp;&nbsp;&nbsp;pop&nbsp;ax<br />&nbsp;&nbsp;&nbsp;&nbsp;jmp&nbsp;read_track<br /><br /><span style="color: #008000; ">/*</span><span style="color: #008000; "><br />&nbsp;*&nbsp;This&nbsp;procedure&nbsp;turns&nbsp;off&nbsp;the&nbsp;floppy&nbsp;drive&nbsp;motor,&nbsp;so<br />&nbsp;*&nbsp;that&nbsp;we&nbsp;enter&nbsp;the&nbsp;kernel&nbsp;in&nbsp;a&nbsp;known&nbsp;state,&nbsp;and<br />&nbsp;*&nbsp;don't&nbsp;have&nbsp;to&nbsp;worry&nbsp;about&nbsp;it&nbsp;later.<br />&nbsp;</span><span style="color: #008000; ">*/</span><br />kill_motor:<br />&nbsp;&nbsp;&nbsp;&nbsp;push&nbsp;dx<br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;dx,#0x3f2<br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;al,#0<br />&nbsp;&nbsp;&nbsp;&nbsp;outb<br />&nbsp;&nbsp;&nbsp;&nbsp;pop&nbsp;dx<br />&nbsp;&nbsp;&nbsp;&nbsp;ret<br /><br />gdt:<br />&nbsp;&nbsp;&nbsp;&nbsp;.word&nbsp;&nbsp;&nbsp;&nbsp;0,0,0,0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;dummy<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;.word&nbsp;&nbsp;&nbsp;&nbsp;0x07FF&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;8Mb&nbsp;-&nbsp;limit=2047&nbsp;(2048*4096=8Mb)<br />&nbsp;&nbsp;&nbsp;&nbsp;.word&nbsp;&nbsp;&nbsp;&nbsp;0x0000&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;<span style="color: #0000FF; ">base</span>&nbsp;address=0<br />&nbsp;&nbsp;&nbsp;&nbsp;.word&nbsp;&nbsp;&nbsp;&nbsp;0x9A00&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;code&nbsp;read/exec<br />&nbsp;&nbsp;&nbsp;&nbsp;.word&nbsp;&nbsp;&nbsp;&nbsp;0x00C0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;granularity=4096,&nbsp;386<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;.word&nbsp;&nbsp;&nbsp;&nbsp;0x07FF&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;8Mb&nbsp;-&nbsp;limit=2047&nbsp;(2048*4096=8Mb)<br />&nbsp;&nbsp;&nbsp;&nbsp;.word&nbsp;&nbsp;&nbsp;&nbsp;0x0000&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;<span style="color: #0000FF; ">base</span>&nbsp;address=0<br />&nbsp;&nbsp;&nbsp;&nbsp;.word&nbsp;&nbsp;&nbsp;&nbsp;0x9200&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;data&nbsp;read/write<br />&nbsp;&nbsp;&nbsp;&nbsp;.word&nbsp;&nbsp;&nbsp;&nbsp;0x00C0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;granularity=4096,&nbsp;386<br /><br />idt_48:<br />&nbsp;&nbsp;&nbsp;&nbsp;.word&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;idt&nbsp;limit=0<br />&nbsp;&nbsp;&nbsp;&nbsp;.word&nbsp;&nbsp;&nbsp;&nbsp;0,0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;idt&nbsp;<span style="color: #0000FF; ">base</span>=0L<br /><br />gdt_48:<br />&nbsp;&nbsp;&nbsp;&nbsp;.word&nbsp;&nbsp;&nbsp;&nbsp;0x800&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;gdt&nbsp;limit=2048,&nbsp;256&nbsp;GDT&nbsp;entries<br />&nbsp;&nbsp;&nbsp;&nbsp;.word&nbsp;&nbsp;&nbsp;&nbsp;gdt,0x9&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;gdt&nbsp;<span style="color: #0000FF; ">base</span>&nbsp;=&nbsp;0X9xxxx<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />msg1:<br />&nbsp;&nbsp;&nbsp;&nbsp;.<span style="color: #0000FF; ">byte</span>&nbsp;13,10<br />&nbsp;&nbsp;&nbsp;&nbsp;.ascii&nbsp;"Loading&nbsp;system&nbsp;<img src="http://www.cppblog.com/Images/dot.gif" alt="" />"<br />&nbsp;&nbsp;&nbsp;&nbsp;.<span style="color: #0000FF; ">byte</span>&nbsp;13,10,13,10<br /><br />.text<br />endtext:<br />.data<br />enddata:<br />.bss<br />endbss:</div><img src ="http://www.cppblog.com/jackyxinli/aggbug/209054.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/jackyxinli/" target="_blank">jacky_zz</a> 2014-12-08 10:59 <a href="http://www.cppblog.com/jackyxinli/archive/2014/12/08/209054.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[ASM] bootsect - nasm</title><link>http://www.cppblog.com/jackyxinli/archive/2014/11/12/208859.html</link><dc:creator>jacky_zz</dc:creator><author>jacky_zz</author><pubDate>Wed, 12 Nov 2014 12:23:00 GMT</pubDate><guid>http://www.cppblog.com/jackyxinli/archive/2014/11/12/208859.html</guid><description><![CDATA[<p>&nbsp;</p>
<div style="font-size: 13px; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; width: 98%; border-bottom: #cccccc 1px solid; word-break: break-all; padding-bottom: 4px; padding-top: 4px; padding-left: 4px; border-left: #cccccc 1px solid; padding-right: 5px; background-color: #eeeeee"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080">&nbsp;1</span>&nbsp;<span style="color: #000000">;&nbsp;</span><span style="color: #000000">2012.6</span><span style="color: #000000">.</span><span style="color: #000000">30</span><span style="color: #000000">,&nbsp;Jinfeng&nbsp;@&nbsp;SWUST<br /></span><span style="color: #008080">&nbsp;2</span>&nbsp;<span style="color: #000000">;&nbsp;nasm&nbsp;boot.asm&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">o&nbsp;boot.bin<br /></span><span style="color: #008080">&nbsp;3</span>&nbsp;<span style="color: #000000"><br /></span><span style="color: #008080">&nbsp;4</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;org&nbsp;07c00h&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;cs:ip&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;07c00h<br /></span><span style="color: #008080">&nbsp;5</span>&nbsp;<span style="color: #000000">entry:<br /></span><span style="color: #008080">&nbsp;6</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;</span><span style="color: #0000ff">set</span><span style="color: #000000">&nbsp;env<br /></span><span style="color: #008080">&nbsp;7</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;ax,cs<br /></span><span style="color: #008080">&nbsp;8</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;ds,ax<br /></span><span style="color: #008080">&nbsp;9</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;es,ax<br /></span><span style="color: #008080">10</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;ss,ax<br /></span><span style="color: #008080">11</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;sp,</span><span style="color: #000000">0x400</span><span style="color: #000000"><br /></span><span style="color: #008080">12</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;<br /></span><span style="color: #008080">13</span>&nbsp;<span style="color: #000000">load_system:<br /></span><span style="color: #008080">14</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;dx,</span><span style="color: #000000">0x0000</span><span style="color: #000000"><br /></span><span style="color: #008080">15</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;cx,</span><span style="color: #000000">0x0002</span><span style="color: #000000"><br /></span><span style="color: #008080">16</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;<br /></span><span style="color: #008080">17</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;ax,</span><span style="color: #000000">0x1000</span><span style="color: #000000"><br /></span><span style="color: #008080">18</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;es,ax<br /></span><span style="color: #008080">19</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;xor&nbsp;bx,bx&nbsp;;&nbsp;[es:bx]<br /></span><span style="color: #008080">20</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;<br /></span><span style="color: #008080">21</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;ax,</span><span style="color: #000000">0x0200</span><span style="color: #000000">+</span><span style="color: #000000">2</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;</span><span style="color: #000000">1024</span><span style="color: #000000">&nbsp;bytes<br /></span><span style="color: #008080">22</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0x13</span><span style="color: #000000"><br /></span><span style="color: #008080">23</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;jnc&nbsp;move_system<br /></span><span style="color: #008080">24</span>&nbsp;<span style="color: #000000">try_again:<br /></span><span style="color: #008080">25</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;jmp&nbsp;load_system<br /></span><span style="color: #008080">26</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;<br /></span><span style="color: #008080">27</span>&nbsp;<span style="color: #000000">move_system:<br /></span><span style="color: #008080">28</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;cli&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;don</span><span style="color: #000000">'</span><span style="color: #000000">t&nbsp;need&nbsp;BIOS&nbsp;func</span><span style="color: #000000"><br /></span><span style="color: #008080">29</span>&nbsp;<span style="color: #000000"></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;will&nbsp;open&nbsp;just&nbsp;before&nbsp;</span><span style="color: #000000">'</span><span style="color: #000000">ret</span><span style="color: #000000">'</span><span style="color: #000000">&nbsp;to&nbsp;task&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">in</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;mode<br /></span><span style="color: #008080">30</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;cld<br /></span><span style="color: #008080">31</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;ax,</span><span style="color: #000000">0x1000</span><span style="color: #000000"><br /></span><span style="color: #008080">32</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;ds,ax<br /></span><span style="color: #008080">33</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;xor&nbsp;ax,ax&nbsp;<br /></span><span style="color: #008080">34</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;es,ax<br /></span><span style="color: #008080">35</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;cx,</span><span style="color: #000000">0x0200</span><span style="color: #000000"><br /></span><span style="color: #008080">36</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;sub&nbsp;si,si<br /></span><span style="color: #008080">37</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;sub&nbsp;di,di<br /></span><span style="color: #008080">38</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;rep&nbsp;movsb<br /></span><span style="color: #008080">39</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;<br /></span><span style="color: #008080">40</span>&nbsp;<span style="color: #000000">load_gdtr:<br /></span><span style="color: #008080">41</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;ax,</span><span style="color: #000000">0x0000</span><span style="color: #000000"><br /></span><span style="color: #008080">42</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;ds,ax<br /></span><span style="color: #008080">43</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;<br /></span><span style="color: #008080">44</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;ax,(gdtr</span><span style="color: #000000">-</span><span style="color: #000000">gdt)<br /></span><span style="color: #008080">45</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;word&nbsp;[gdtr],ax<br /></span><span style="color: #008080">46</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;dword&nbsp;[gdtr</span><span style="color: #000000">+</span><span style="color: #000000">2</span><span style="color: #000000">],gdt&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;not&nbsp;</span><span style="color: #000000">0x7c00</span><span style="color: #000000">+</span><span style="color: #000000">gdt&nbsp;</span><span style="color: #000000">?</span><span style="color: #000000"><br /></span><span style="color: #008080">47</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;<br /></span><span style="color: #008080">48</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;lidt&nbsp;[idtr]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;CPU&nbsp;request&nbsp;IDT&nbsp;before&nbsp;jump&nbsp;into&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;mode<br /></span><span style="color: #008080">49</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;lgdt&nbsp;[gdtr]<br /></span><span style="color: #008080">50</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;<br /></span><span style="color: #008080">51</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;al,</span><span style="color: #000000">0x02</span><span style="color: #000000">&nbsp;<br /></span><span style="color: #008080">52</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">out</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0x92</span><span style="color: #000000">,al&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;open&nbsp;A20,&nbsp;enable&nbsp;</span><span style="color: #000000">32</span><span style="color: #000000">-</span><span style="color: #000000">bit&nbsp;address<br /></span><span style="color: #008080">53</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;<br /></span><span style="color: #008080">54</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;ax,</span><span style="color: #000000">0x0001</span><span style="color: #000000"><br /></span><span style="color: #008080">55</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;cr0,eax&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;</span><span style="color: #0000ff">set</span><span style="color: #000000">&nbsp;PE&nbsp;flag&nbsp;</span><span style="color: #0000ff">in</span><span style="color: #000000">&nbsp;EFLAGS&nbsp;register<br /></span><span style="color: #008080">56</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;<br /></span><span style="color: #008080">57</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;jmp&nbsp;dword&nbsp;</span><span style="color: #000000">0x08</span><span style="color: #000000">:</span><span style="color: #000000">0</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;jmp&nbsp;to&nbsp;reset&nbsp;all&nbsp;registers&nbsp;</span><span style="color: #0000ff">in</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;mode<br /></span><span style="color: #008080">58</span>&nbsp;<span style="color: #000000"><br /></span><span style="color: #008080">59</span>&nbsp;<span style="color: #000000">;end</span><span style="color: #000000">!!!</span><span style="color: #000000"><br /></span><span style="color: #008080">60</span>&nbsp;<span style="color: #000000"><br /></span><span style="color: #008080">61</span>&nbsp;<span style="color: #000000">gdt:&nbsp;&nbsp;&nbsp;&nbsp;dw&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">,</span><span style="color: #000000">0</span><span style="color: #000000">,</span><span style="color: #000000">0</span><span style="color: #000000">,</span><span style="color: #000000">0</span><span style="color: #000000"><br /></span><span style="color: #008080">62</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dw&nbsp;</span><span style="color: #000000">0x1000</span><span style="color: #000000">,</span><span style="color: #000000">0x0000</span><span style="color: #000000">,</span><span style="color: #000000">0x9a00</span><span style="color: #000000">,</span><span style="color: #000000">0x00c0</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;16Mb,</span><span style="color: #000000">0x0000</span><span style="color: #000000">,r</span><span style="color: #000000">/</span><span style="color: #000000">x<br /></span><span style="color: #008080">63</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dw&nbsp;</span><span style="color: #000000">0x1000</span><span style="color: #000000">,</span><span style="color: #000000">0x0000</span><span style="color: #000000">,</span><span style="color: #000000">0x9200</span><span style="color: #000000">,</span><span style="color: #000000">0x00c0</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;10MB,</span><span style="color: #000000">0x0000</span><span style="color: #000000">,r</span><span style="color: #000000">/</span><span style="color: #000000">w<br /></span><span style="color: #008080">64</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dw&nbsp;</span><span style="color: #000000">0x0002</span><span style="color: #000000">,</span><span style="color: #000000">0x8000</span><span style="color: #000000">,</span><span style="color: #000000">0x920b</span><span style="color: #000000">,</span><span style="color: #000000">0x00c0</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;8kb,</span><span style="color: #000000">0xb8000</span><span style="color: #000000">,&nbsp;4kb</span><span style="color: #000000">&lt;-</span><span style="color: #000000">swap</span><span style="color: #000000">-&gt;</span><span style="color: #000000">4kb<br /></span><span style="color: #008080">65</span>&nbsp;<span style="color: #000000"><br /></span><span style="color: #008080">66</span>&nbsp;<span style="color: #000000">gdtr:&nbsp;&nbsp;&nbsp;&nbsp;dw&nbsp;</span><span style="color: #000000">0x0000</span><span style="color: #000000">,</span><span style="color: #000000">0x0000</span><span style="color: #000000">,</span><span style="color: #000000">0x0000</span><span style="color: #000000"><br /></span><span style="color: #008080">67</span>&nbsp;<span style="color: #000000">idtr:&nbsp;&nbsp;&nbsp;&nbsp;dw&nbsp;</span><span style="color: #000000">0x0000</span><span style="color: #000000">,</span><span style="color: #000000">0x0000</span><span style="color: #000000">,</span><span style="color: #000000">0x0000</span><span style="color: #000000"><br /></span><span style="color: #008080">68</span>&nbsp;<span style="color: #000000"><br /></span><span style="color: #008080">69</span>&nbsp;<span style="color: #000000">times&nbsp;</span><span style="color: #000000">510</span><span style="color: #000000">-</span><span style="color: #000000">($</span><span style="color: #000000">-</span><span style="color: #000000">$$)&nbsp;&nbsp;&nbsp;&nbsp;db&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000"><br /></span><span style="color: #008080">70</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dw&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">0xaa55</span></div>
<p>&nbsp;</p><img src ="http://www.cppblog.com/jackyxinli/aggbug/208859.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/jackyxinli/" target="_blank">jacky_zz</a> 2014-11-12 20:23 <a href="http://www.cppblog.com/jackyxinli/archive/2014/11/12/208859.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>