zoukankan      html  css  js  c++  java
  • In和Out指令

    In和Out
    OUT 0FAH,AL(它是指从AL中输出一个字节到0FAH的一个端口吗?)
    OUT DX,AL  
    OUT 0FAH,AX(AX是一个字为什么也能输出到0FAH所指的8位端口中呢?)
    OUT 03F8H,AL(这个指令有错误为什么?)
       
     这是因为在OUT指令中直接用数字寻址,端口号只能是0到FFH,而上面这条指令应改为
    MOV DX 03F8H ;只能放在DX,这是规定。
    OUT DX,AL
    -----------------------------------------
    OUT 0FAH,AL(它是指从AL中输出一个字节到0FAH的一个端口吗?)
    是的
    ---------------------------------------
    OUT 0FAH,AX(AX是一个字为什么也能输出到0FAH所指的8位端口中呢?)
    这条指令将AL中的数据放在0FAH,将AH中的数据放在0FBH。
    这四条指令主要就是说明这个OUT指令的不同用法,学这些指令不用硬记每条指令的各种用法,只要根据规定的寻址方式。
    IN(Input) 输入
    OUT(Output) 输出
    这组指令只限于使用累加器AX或AL传送信息.
    IN 输入指令长格式为:   IN  AL,PORT(字节)  
                           IN  AX,PORT(字)
    执行的操作: (AL)<-(PORT)(字节)        
               (AX)<-(PORT+1,PORT)(字)
    短格式为:   IN   AL,DX(字节)        
                IN AX,DX(字)
    执行的操作: AL<-((DX))(字节)        
               AX<-((DX)+1,DX)(字).
    OUT 输出指令长格式为:   OUT  PORT,AL(字节)        
                             OUT  PORT,AX(字)
    执行的操作: (PORT)<-(AL)(字节)        
               (PORT+1,PORT)<-(AX)(字)
    短格式为:   OUT  DX,AL(字节)        
                OUT DX,AX(字)
    执行的操作: ((DX))<-(AL)(字节)        
               ((DX)+1,(DX))<-AX(字)  
    在IBM-PC机里,外部设备最多可有65536个I/O端口,端口(即外设的端口地址)为0000~FFFFH.其中前256个端口(0~FFH)可以直接在指令中指定,这就是长格式中的PORT,此时机器指令用二个字节表示,第二个字节就是端口号.所以用长格式时可以在指定中直接指定端口号,但只限于前256个端口.当端口号>=256时,只能使用短格式,此时,必须先把端口号放到DX寄存器中(端口号可以从0000到0FFFFH),然后再用IN或OUT指令来传送信息. 
    IN,OUT端口读写指令
    端口是主机与外设进行数据交换的。(外设接口电路有专用于数据交互的寄存器。为了与CPU中的寄存器相区别,称之为端口)。端口有数据端口,状态端口和控制端口3种。
    PC机给予每一个端口分配了一个地址(称为端口号),形成一个独立于内存空间的I/O地址空间。在8086/8088中,端口地址的范围是0000至FFFF。
    CPU对外设的操作通过专门的端口读写指令来完成。读端口用IN指令,写端口用OUT指令。
    IN ACC,PORT;从端口PORT读取数据到ACC;
    PORT可以是立即数,也可以是DX。
    ACC为AL时,从PORT读取1字节数据到AL
        ACC为AX时,从PORT读取2字节数据到AX
    OUT PORT,ACC;将ACC的数据写入端口PORT;
    例子:
    IN AL,21H;表示从21H端口读取一字节数据到AL
    IN AX,21H;表示从端口地址21H读取1字节数据到AL,从端口地址22H读取1字节到AH
    MOV DX,379H
        IN   AL,DX;从端口379H读取1字节到AL
     
        OUT 21H,AL;将AL的值写入21H端口
        OUT 21H,AX;将AX的值写入端口地址21H开始的连续两个字节。(port[21H]=AL,port[22h]=AH)
    MOV DX,378H
        OUT DX,AX;将AH和AL分别写入端口379H和378H
  • 相关阅读:
    ListComparer
    C#.net中类与结构的区别
    对C# 中堆栈,堆,值类型,引用类型的理解
    一道面试题
    Mvc不等于三层架构
    SQL养成一个好习惯是一笔财富
    清除MSSQL事务日志文件
    面向对象设计(OOD)五大基本原则
    .net/c#中栈和堆的区别及代码在栈和堆中的执行流程详解之一
    IIS7 Login failed for user IIS APPPOOL\ASP.NET v4.0
  • 原文地址:https://www.cnblogs.com/xuyinghui/p/6180802.html
Copyright © 2011-2022 走看看