当前位置:首页 » 多媒体相关

关于8255A的小问题


下面这个程序是从a口输入数据,取反后从b口输出,可是中间为什么要用那些nop呢?  
  请指教  
  data   segment   para    
            innum       db       ?  
            outnum     db       ?  
  data   ends  
   
  stack   segment   para   stack  
              db     100h     dup(?)  
  stack   ends  
   
  code   segment  
      main   proc   far  
        assume   cs:code,ds:data,ss:stack  
        org   100h  
   
  start:  
        mov   ax,data  
        mov   ds,ax  
   
        mov   dx,306h  
        mov   al,10010000b  
        out   dx,al  
        nop                                                           //?  
   
        mov   dx,300h  
        in     al,dx  
        mov   innum,al  
   
        mov   al,innum  
        xor   al,0ffh  
        mov   outnum,al  
   
        mov   dx,302h  
        nop                                             //?  
        nop                                             //?  
        out   dx,al  
   
        mov   ax,4c00h  
        int   21h  
   
        main     endp  
      code   ends  
  end   start  
   
   
   
 

推荐阅读

  • 《NBA2005》灌篮技巧 [详细内容]
  • 台电T29拆机暨魅族Miniplayer PK秀台电 Teclast TL-T29 1G女性MP3 [详细内容]
  • 魅族全面升级 M6se M3se多功能曝光魅族 meizu miniplayer 4G闪存MP3 [详细内容]
  • 诺基亚3108节约内存的技巧 [详细内容]
  • 关于大家关心的待机问题 [详细内容]
  • 不过299元10款廉价高性价比MP3选购纽曼 精音王N08 512M选购指南 [详细内容]
  • 《罗马:全面战争》操作技巧 [详细内容]
  • 网友回答:
    网友:w32api

    13b5:0100   b8b513                 mov           ax,13b5  
      13b5:0103   8ed8                     mov           ds,ax  
      13b5:0105   90                         nop  
      13b5:0106   ba0603                 mov           dx,0306  
      13b5:0109   b090                     mov           al,90  
      13b5:010b   ee                         out           dx,al  
      13b5:010c   90                         nop  
      13b5:010d   ba0003                 mov           dx,0300  
      13b5:0110   ec                         in             al,dx  
      13b5:0111   a2fe00                 mov           [00fe],al  
      13b5:0114   a0fe00                 mov           al,[00fe]  
      13b5:0117   34ff                     xor           al,ff  
      13b5:0119   a2ff00                 mov           [00ff],al  
      13b5:011c   ba0203                 mov           dx,0302  
      13b5:011f   90                         nop  
      13b5:0120   90                         nop  
      13b5:0121   ee                         out           dx,al  
      13b5:0122   b8004c                 mov           ax,4c00  
      13b5:0125   cd21                     int           21  
       
      看这样的代码也没有觉得有什么,开始以为是要按照   word   对齐,可惜不是。  
      不清楚你的代码从哪里得到的。。。

    网友:sp13532

    不一定要用吧。  
      不知你试了没?

    网友:seeking

    nop占用一个cpu周期,这样就可以让外设有时间作出反应。

    网友:hswxf

    楼上说的对  
      mov   dx,302h要用二个周期才能完成或可靠完成  
      端口准备好了  
      out   dx,al  
      硬件要用一定的时间才能完成可靠的传送  
      一般在端口写上用的较多,而且是二次命令  
       
     

    .

    讨论区

    Login