zoukankan      html  css  js  c++  java
  • 寄存器(通用寄存器)

    因为学习使用的是王爽的《汇编语言(第3版)》,因此也只能提到8086CPO的寄存器。对于其他而言,原理都是相通的。

    对于8086寄存器,有14个寄存器,主要是:AX、BX、CX、DX、SI、DI、SP、BP、IP、CS、SS、DS、ES、PSW。

    一、通用寄存器

    8086的通用寄存器有AX、BX、CX、DX4个,16位,可存放两个字节,可分为高8位和低8位,这里主要是考虑兼容性问题,8086一次可以处理1字节或是1字的数据。例如:


    这里需要注意的是,对于AH和BH是两个完全不相干的东西,例如:

    mov al,93H
    add al,C5H


    通过计算的到的结果应该是158H,但是这已经超过了AL所能存储的最大值了,但1并没有进入到AH中去,而是“丢失了”。至于原因自己还没有找到,还在学习中,等找到答案我会回来进行修改。但这足以说明AL和AH是两个不同的东西。

    二、几条汇编指令

    (1)数据传送指令mov

    格式:mov oprd1,oprd2

    功能:本指令将一个源操作数送到目的寄存器中,即oprd1<—oprd2。

    说明:

    <1>oprd1 为目的操作数,可以是寄存器、存储器、累加器。 oprd2为源操作数,可以是寄存器、存储器、累加器和立即数。

    <2>mov 指令有四种可能的操作: 

    • 寄存器与寄存器之间的数据传输指令。如:mov ax,bx;
    • 立即数到通用寄存器数据传送指令。如:mov ax,5600H,这里需要注意立即数只能作为源操作数使用;
    • 寄存器与存储器之间的数据传送指令。如:mov ax,buffer;
    • 立即数到存储器的数据传送。如:mov alfa,24。
    <3>本指令不影响状态标志位。
    <4>mov指令执行时的数据传送方向

    • 立即数只能作为源操作数,不允许作目的操作数,立即数也不通送至段寄存 器。
    • 通用寄存器可以与段寄存器,存储器互相传送数据,寄存器之间也可以互相传送。但CS段不能作为目的操作数。
    • 存储器与存储器之间不能进行数据直接传送。若要实现存储单元间的数据传送,可以借助于通用寄存器作为中介来进行。
    (2)加法指令add
    格式:add oprd1,oprd2
    功能:两数相加。
    说明:
    <1>opr1为任一通用寄存器或存储器操作数,可以是任意一个通用寄存器,而且还可以是任意一个存储器操作数。这给程序的编写带来了很大的方便.。
          opr2为立即数,也可以是任意一个通用寄存器操作数。立即数只能用于源操作数。

    <2>opr1和opr2均为寄存器是允许的,一个为寄存器而另一个为存储器也是允许的,但不允许两个都是存储器操作数。理由是指令代码的寻址方式中规定了两个操作数(除立即        数)至少有一个是寄存器操作数。

    <3>加法指令运算的结果对CF、SF、OF、PF、ZF、AF都会有影响。以上标志也称为结果标志。加法指令适用于无符号数或有符号数的加法运算。操作数可以是8位,也可以是 16位。


  • 相关阅读:
    .NET牛人应该知道些什么
    ASP.NET常用的分页
    获取字符串长度
    去掉网页的滚动条
    GridView动态生成字段常见问题及解决方法
    PagesSection.ValidateRequest 属性
    我刚刚做了一个艰难的决定
    Jquery UI Dialog 对话框学习
    c语言病毒分析(转)
    不用不熟悉的工具和方法
  • 原文地址:https://www.cnblogs.com/pipinet/p/6257373.html
Copyright © 2011-2022 走看看