zoukankan      html  css  js  c++  java
  • 汇编笔记

    寄存器

    8086 CPU 中寄存器总共为 14 个,且均为 16 位 。

    • 数据寄存器:

      AX (Accumulator):累加寄存器,也称之为累加器;
      BX (Base):基地址寄存器;
      CX (Count):计数器寄存器;
      DX (Data):数据寄存器;

    • 指针寄存器:

      SP (Stack Pointer):堆栈指针寄存器;
      BP (Base Pointer):基指针寄存器;

    • 变址寄存器:

      SI (Source Index):源变址寄存器;
      DI (Destination Index):目的变址寄存器;

    • 控制寄存器

      IP (Instruction Pointer):指令指针寄存器;
      FLAG:标志寄存器;

    • 段寄存器

      CS (Code Segment):代码段寄存器;
      DS (Data Segment):数据段寄存器;
      SS (Stack Segment):堆栈段寄存器;
      ES (Extra Segment):附加段寄存器;

    任何时间CS IP 指向CPU当前要读取指令的地方.CSx16+IP.
    mov指令不能用于设置CS/IP的值。

    Bx和Loop,做循环

    执行loop指令时的两步操作:
    1.(cx)=(cx)-1;
    2.判断cx中的值,不为0则中转至loop标号处执行程序,如果为0则向下执行。

    16位 段+偏移 的地址表示

    当时cpu是16位的,但是内存64k有点小就扩容到1M,也就是20根地址线。为了兼容之前的架构,就设计出了通过段寄存器左移4位+偏移地址的寻址方式。

    地址总线有20根,但是数据总线只有16根。所以需要用两个16进制表示20进制的地址。
    段地址(16位)×16+偏移地址(16位)=地址(20位)。
    如:(ax)=((ds)*16 + (bx)+200)

    更灵活的寻址方式:
    [bx/si/di + idata]
    [bx + si/di]
    [bx + si/di + idata]

    jmp跳转系列指令

    Call Ret 指令。CS:IP指向下一个要执行的指令。SS:SP指向栈顶。

    依赖标志寄存器的 加减乘除

    cmp指令:cmp ax,bx
    zf=1 说明 (ax)=(bx)
    zf=0 说明 (ax)!=(bx)
    cf=1 说明 (ax)<(bx)
    cf=0 说明 (ax)>(bx)
    cf=0 并且 zf=0 说明 (ax)>(bx)
    cf=1 并且 zf=1 说明 (ax)<=(bx)

    内中断

    中断向量表,中断例程,类似于call ret

    int指令

    Interrupt主要用来调用BIOS和操作系统提供的一些中断

    端口

    • 读写指令 in/out

    主板上各种芯片的RAM。
    都有一组供CPU读写的寄存器。

    CPU可以直接读写的地方:
    1.CPU内部的寄存器。
    2.内存单元
    3.端口。

    cmos芯片:
    地址端口70h.
    数据端口71h.

    • shl、shr

    shl是逻辑左移指令,功能:
    1.将一个寄存器或内存单元中的数据向左移位。
    2.将最后移出的一位写入CF中。
    3.最低位用0补充。

    将X逻辑左移一位,相当于执行X=X*2.
    将X逻辑右移一位,相当于执行X=X/2.

    外中断

    中断的产生原因:比如,外设的输入到达。

    CPU与外设的交互,都是将数据送入到端口中。
    即CPU通过端口与外部设备进行联系。

    1.可屏蔽中断
    内中断设置IF=0,TF=0. 可屏蔽中断会判断IF=1才执行中断。
    因此,内中断执行时,会禁用可屏蔽中断。
    2.不可屏蔽中断(类型码固定为2)

    几乎所有由外设引发的中断都是外中断,都是中屏蔽中断。

    键盘的输入到达时,引发9号中断。

    直接定址表

    在后面加有”:”的地址标号,只能在代码段中使用,不能在其它段中使用。
    seg操作符,功能为取得某一标号的段地址。

    将通过给出的数据进行计算或比较而得到结果的问题,转化为用给出的数据作为查表的依据,通过查表得到结果的问题。具体的查表方法,是用查表的依据数据,直接计算出所要查找的元素在表中的位置。像这种可以通过依据数据,直接计算出所要找的元素的位置的表,叫做直接定址表。

    使用BIOS进行键盘输入和硬盘读写

    键盘输入引发的中断:int 9h

    读取键盘缓冲区中断:int 16h
    ah=扫描码,al=ASCII码.

    硬盘读写中断:int 13h
    ah=2/3(2表示读扇区,3表示写扇区)

    综合研究

    用C语言编程可以不用变量吗?
    用C语言编程可以不用main函数吗?
    我们能写一个printf函数吗?(可以接受不定数量的参数)

    其它

    • 微机中常用的Intel系列微处理器的主要发展过程是:

    8080,8086/8088,80186,80286,80386,80486,Pentium,Pentium II,Pentium III,Pentium4.
    80386是划时代的产品,可以在3个模式下工作:实模式,保护模式,虚拟8086模式。

    • 负数的表示,补码

    反码,0 -> 1, 1 -> 0.
    补码,按位取反码,加1。

    • 用栈传递参数

    由调用者将需要传递给子程序的参数压入栈中,子程序从栈中取得参数。
    子程序返回时要使用ret n。
    ret n的含意:
    pop ip
    add sp,n

  • 相关阅读:
    failonerror on MSBuild
    近期Windows Mobile问题汇总
    android的文件操作 sdcard和rom
    用实际库存数调整批次保留最新的批次
    各种布局layout
    javascript让ui线程让出时间片的模型
    android ListView控件操作绑定数据、单击事件
    Pocket PC 模拟器上网设置
    android单元测试
    打电话发短信
  • 原文地址:https://www.cnblogs.com/jrmy/p/14316267.html
Copyright © 2011-2022 走看看