⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 80386asm程序设计基础(八).htm

📁 80386ASM的程序设计基础教程
💻 HTM
📖 第 1 页 / 共 4 页
字号:
    <TD colSpan=3 height=1></TD></TR></TBODY></TABLE>
<TABLE width=770 border=0>
  <TBODY>
  <TR>
    <TD class=td1 vAlign=top align=middle width=150 bgColor=#fafafa><BR><!--广告条开始//-->
      <SCRIPT src="80386ASM程序设计基础(八).files/other.js"></SCRIPT>
<!--广告条结束//--></TD>
    <TD align=middle width=620><!--文章说明信息开始//-->
      <TABLE cellSpacing=0 cellPadding=0 width=600 bgColor=#eeeeee border=0>
        <TBODY>
        <TR bgColor=#ffffff>
          <TD align=middle width=50 height=10></TD>
          <TD align=right><A href="http://www.csdn.net/">CSDN</A> - <A 
            href="http://www.csdn.net/develop/">文档中心</A> - <FONT 
            color=#003399>其他开发语言 </FONT>&nbsp;&nbsp;&nbsp;&nbsp; </TD></TR>
        <TR>
          <TD align=middle height=5></TD>
          <TD align=middle width=500></TD></TR>
        <TR>
          <TD align=middle bgColor=#003399 height=10><FONT 
            color=#ffffff>标题</FONT></TD>
          <TD><B>&nbsp;&nbsp;&nbsp;&nbsp;80386ASM程序设计基础(八)</B>&nbsp;&nbsp;&nbsp;&nbsp;kingcaiyao(原作) 
          </TD></TR>
        <TR>
          <TD align=middle height=5></TD>
          <TD align=middle width=500></TD></TR>
        <TR>
          <TD align=middle bgColor=#003399><FONT color=#ffffff>关键字</FONT></TD>
          <TD width=500>&nbsp;&nbsp;&nbsp;&nbsp;80386ASM</TD></TR>
        <TR>
          <TD align=middle height=5></TD>
          <TD align=middle width=500></TD></TR></TBODY></TABLE><!--文章说明信息结束//-->
      <TABLE width=600 border=0>
        <TBODY>
        <TR>
          <TD align=left><!--内容开始//--><BR>
            <P>&nbsp;80386实模式下编程<BR>&nbsp;80386在实模式下是一个更快的8086,它不但可以进行32位操作,而且还可以进32位寻址,并且还可以使用80386的扩展指令。不过,由于是在实模下,寻址的最大空间为1M。在一个段内,段的最大长度不超过64K,否则就会发生异常。<BR>&nbsp;在8086下定义一个段的完整格式是:<BR>&nbsp;段名 
            [定位类型]&nbsp; [组合类型]&nbsp; 
            [‘类别’]<BR>&nbsp;80386下定义一个段的完整格式是:<BR>&nbsp;段名 [定位类型]&nbsp; 
            [组合类型]&nbsp; [‘类别’] 
            [属性类型]<BR>&nbsp;说明:属性类型有两种:USE32和USE16,USE32表示32位段,USE16表示16位段。如果你在程序中用到伪指令.386,那么默认的属性类型就是USE32(32位段),如果没有用伪指令指定CPU的类型,那么默认的属性类型就是USE16,在实方式下只能使用16位段,即用USE16。<BR>&nbsp;eg:<BR>&nbsp;&nbsp;&nbsp; 
            CSEG PARA PUBLIC USE32;定义一个32位的段<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
            AA DW ?</P>
            <P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; BB DD 
            ?<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CC DB 
            ?<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DD DW 
            ?<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; EE DW 
            0,0,0.....<BR>&nbsp;&nbsp;&nbsp; CSEG 
            ENDS<BR>&nbsp;由于在80386中用到了66H操作前缀和67H地址前缀,因此尽管在实式模式下,只要设定的CPU类型是80386,仍然可以进行32位操作,可以进行32位寻址,66H,67H这两个前缀无需程序员在程序中书写,汇编程序会自动加上的。只要在程序中对32位操作数进行访问,或进行32位寻址,那么就会加上操作数前缀66H和地址前缀67H。相反,如果在32位段中对16位或8位的访问,汇编程序中也会加上这两个前缀。<BR>&nbsp;&nbsp;&nbsp; 
            下面将给出一个例子程序,演示一下在80386的实模式下编程的方法与技巧(这是从网上down的一个程序,不是我写的,但我会作详细的解剖,并与8086下的程序设计作出比较):<BR>&nbsp;&nbsp;&nbsp; 
            用十进制,十六进制,二进制三种形式显示双字存储单元F000:1234中的内容<BR>&nbsp;&nbsp; 
            |------------------MAIN PROC------------|<BR>&nbsp;&nbsp; | 
            .386&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|<BR>&nbsp;&nbsp; 
            | code segment para public 'code' use16&nbsp;|<BR>&nbsp;&nbsp; 
            |&nbsp;&nbsp; assume 
            cs:code&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|<BR>&nbsp;&nbsp; 
            | 
            begin:&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|<BR>&nbsp;&nbsp; 
            |&nbsp;&nbsp; mov 
            ax,0f000h&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|<BR>&nbsp;&nbsp; 
            |&nbsp;&nbsp; mov 
            fs,ax&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; 
            |<BR>&nbsp;&nbsp; |&nbsp;&nbsp; mov 
            eax,fs:[1234H]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
            |<BR>&nbsp;&nbsp; |&nbsp;&nbsp; call 
            todec&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; 
            |<BR>&nbsp;&nbsp; |&nbsp;&nbsp; call 
            newline&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
            |<BR>&nbsp;&nbsp; |&nbsp;&nbsp; call 
            tohex&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;|<BR>&nbsp;&nbsp; 
            |&nbsp;&nbsp; mov 
            al,'H'&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;|<BR>&nbsp;&nbsp; 
            |&nbsp;&nbsp; call 
            echo&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;&nbsp;|<BR>&nbsp;&nbsp; 
            |&nbsp;&nbsp; call 
            newline&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|<BR>&nbsp;&nbsp; 
            |&nbsp;&nbsp; call 
            tobin&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;|<BR>&nbsp;&nbsp; 
            |&nbsp;&nbsp; mov 
            al,'B'&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;|<BR>&nbsp;&nbsp; 
            |&nbsp;&nbsp; call 
            echo&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;&nbsp;| 
            <BR>&nbsp;&nbsp; |&nbsp;&nbsp; call 
            newline&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;| 
            <BR>&nbsp;&nbsp; |&nbsp;&nbsp; mov 
            ah,4ch&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;|<BR>&nbsp;&nbsp; 
            |&nbsp;&nbsp; int 
            21h&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;&nbsp;&nbsp;&nbsp;|<BR>&nbsp;&nbsp; 
            |---------------------------------------|&nbsp;&nbsp; 
            <BR>&nbsp;&nbsp;&nbsp; ;sub-function todec<BR>&nbsp;&nbsp;&nbsp; 
            todec proc near<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
            pushad<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mov 
            ebx,10<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xor 
            cx,cx<BR>&nbsp;&nbsp;&nbsp;&nbsp; 
            dec1:<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xor 
            edx,edx<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; div 
            ebx<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; push 
            dx<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; inc 
            cx<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; or 
            eax,eax<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; jnz 
            dec1<BR>&nbsp;&nbsp;&nbsp;&nbsp; 
            dec2:<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pop 
            ax<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; call 
            toasc<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; call 
            echo<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; loop 
            dec2<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
            popad<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ret<BR>&nbsp;&nbsp; 
            todec endp <BR>&nbsp;&nbsp; <BR>&nbsp;&nbsp; ;sub-function 
            tobin<BR>&nbsp;&nbsp; tobin proc 
            near<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; push 
            eax<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; push 
            ecx<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; push 
            edx<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; bsr 
            edx,eax<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; jnz 
            bin1<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xor 
            dx,dx<BR>&nbsp;&nbsp;&nbsp; bin1:<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
            mov cl,31<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sub 
            cl,dl<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; shl 
            eax,cl<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mov 
            cx,dx<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; inc 
            cx<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mov 
            edx,eax<BR>&nbsp;&nbsp;&nbsp; 
            bin2:<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; rol 
            edx,1<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mov 
            al,'0'<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; adc 
            al,0<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; call 
            echo<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; loop 
            bin2<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pop&nbsp; 
            edx<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pop&nbsp; 
            ecx<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pop&nbsp; 
            eax<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ret<BR>&nbsp;&nbsp; tobin 
            endp</P>
            <P>&nbsp;&nbsp; ;sub-function tohex<BR>&nbsp;&nbsp; tohex proc 
            near<BR>&nbsp;&nbsp;&nbsp;&nbsp; 
            countb=8<BR>&nbsp;&nbsp;&nbsp;&nbsp; enter 
            countb,0<BR>&nbsp;&nbsp;&nbsp;&nbsp; movzx 
            ebp,bp<BR>&nbsp;&nbsp;&nbsp;&nbsp; mov&nbsp;&nbsp; 
            ecx,countb<BR>&nbsp;&nbsp;&nbsp;&nbsp; mov&nbsp;&nbsp; 
            edx,eax<BR>&nbsp;&nbsp; hex1:<BR>&nbsp;&nbsp;&nbsp;&nbsp; mov 
            al,dl<BR>&nbsp;&nbsp;&nbsp;&nbsp; and 
            al,0fh<BR>&nbsp;&nbsp;&nbsp;&nbsp; mov 
            [ebp-countb+ecx-1],al<BR>&nbsp;&nbsp;&nbsp;&nbsp; ror 
            edx,4<BR>&nbsp;&nbsp;&nbsp;&nbsp; loop 
            hex1<BR>&nbsp;&nbsp;&nbsp;&nbsp; mov 
            cx,countb<BR>&nbsp;&nbsp;&nbsp;&nbsp; xor ebx,ebx<BR>&nbsp;&nbsp; 
            hex2:<BR>&nbsp;&nbsp;&nbsp;&nbsp; cmp byte ptr 
            [ebp-countb+ebx],0<BR>&nbsp;&nbsp;&nbsp;&nbsp; jnz 
            hex3<BR>&nbsp;&nbsp;&nbsp;&nbsp; inc ebx<BR>&nbsp;&nbsp;&nbsp;&nbsp; 
            loop hex2<BR>&nbsp;&nbsp;&nbsp;&nbsp; dec 
            ebx<BR>&nbsp;&nbsp;&nbsp;&nbsp; mov cx,1<BR>&nbsp; 
            hex3:<BR>&nbsp;&nbsp;&nbsp;&nbsp; mov 
            al,[ebp-countb+ebx]<BR>&nbsp;&nbsp;&nbsp;&nbsp; inc 
            ebx<BR>&nbsp;&nbsp;&nbsp;&nbsp; call 
            toasc<BR>&nbsp;&nbsp;&nbsp;&nbsp; call 
            echo<BR>&nbsp;&nbsp;&nbsp;&nbsp; loop 
            hex3<BR>&nbsp;&nbsp;&nbsp;&nbsp; leave<BR>&nbsp;&nbsp;&nbsp;&nbsp; 
            ret<BR>&nbsp; tohex endp<BR>&nbsp;<BR>&nbsp;;sub-function 
            toasc<BR>&nbsp;toasc proc near<BR>&nbsp;&nbsp;&nbsp;&nbsp; and 
            al,0fh<BR>&nbsp;&nbsp;&nbsp;&nbsp; cmp 
            al,'0'<BR>&nbsp;&nbsp;&nbsp;&nbsp; cmp 
            al,'9'<BR>&nbsp;&nbsp;&nbsp;&nbsp; seta 
            dl<BR>&nbsp;&nbsp;&nbsp;&nbsp; movzx 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -