• 端口的读写指令:int 、out
    • 只能使用ax或al存放信息
    • 从端口读取:int
      • int al,60h(从60h号硬件端口读入一个字节)
    • 往端口写入:out
      • out 21h,al
  • 执行时与总线相关的操作:
    • CPU通过地址线将地址信息60h发出
    • CPU通过控制线发出端口读命令,选中端口所在芯片,通知它将要从中读取数据;
    • 端口所在芯片将60h端口中的数据通过数据线送入CPU
  • 对0~255以内的端口进行读写:int al,60h
  • 对256~65535的端口进行读写,端口号放在dx中
    • mov dx,03f8h
    • in al,dx
  • CMOS RAM芯片

    • 0~0dh存放系统时间
      • 00H:秒,02H:分,04H:时,07h:日,08H:月,09H:年
      • BCD码的方式存放(四位2进制表示一个十进制,一个字节可以表示2个BCD码)
      • BCD码+30h(0)=十进制对对应的ASCII码
    • 其他存放系统配置信息,供系统启动时的BIOS程序读取
    • 读CMOS:通过70h地址端口
    • 写CMOS:通过71h数据端口

      shl和shr指令

  • 逻辑移位指令

  • shl:逻辑左移,X=X*2
    • mov al,01001000b
    • shl al,1
      • (al)=10010000b,CF=0
      • 1)将一个寄存器或内存单元中的数据向左移位,将最后移出的一位写入CF中;
      • 2)最低位用0补充。
    • mov al,01010001b
    • mov cl,3
    • shl al,cl
      • (al)=100010000,CF=0
  • shr:逻辑右移
    • 1)将一个寄存器或内存单元中的数据向右移位,将最后移出的一位写入CF中;
    • 2)最高位用0补充。
  • 从CMOS RAM的8号单元中读取一个字节,分成BCD码的数据(两位)
    1. mov al,8
    2. out 70h,al ;读取8号单元的月份
    3. in al,71h ;将读取的数据写入al
    4. mov ah,al
    5. mov cl,4
    6. shr ah,cl ;ah中存放十位
    7. and al,00001111h ;al中存放个位