zoukankan      html  css  js  c++  java
  • <汇编语言(第2版)>2011033101

    学习指令:
    and指令:逻辑与指令,按位进行与运算
        AND r/m,r/m/data
    or指令:逻辑或指令,按位进行与运算
        OR r/m,r/m/data

    关于如何灵活访问地址,以下用mov指令看定位内存地址
    1、mov ax,[bx+idata]或mov ax,idata[bx]
    内存地址=(bx)+idata

    2、
    8086CPU的SI和DI,不能分为两个8位寄存器使用
    mov ax,[bx+si]也可以写成mov ax,[bx][si]
    内存地址=(bx)+(si)

    3、mov ax,[bx+si+idata]或mov ax,idata[bx][si]或mov ax,[bx].idata[si]或mov ax,[bx][si].200
    内存地址=(bx)+(si)+idata

    我们这么来定义:
    reg集合:
        ax,bx,cx,dx,ah,al,bh,bl,ch,cl,dh,dl,sp,bp,si,di
    sreg集合:
        ds,ss,cs,es

    注意:
    在8086CPU中只有bx、si、di、bp4类寄存器可以使用[...]来进行内存单位的寻址
    像mov ax,[cs]之类是错误的。

    在[...]中,这4个寄存器可以单独出现,或只能以4种组合出现:bx和si、bx和di、bp和si、bp和di。

    只要在[...]中使用寄存器bp,而指令中没有显性地给出段地址,默认段地址为ss

    汇编中对数据所在位置有3个概念:
    1、立即数(idata),数据就在指令里面,es.mov ax,1
    2、寄存器,数据在寄存器里面,es.mov ax,bx
    3、段地址(SA)和偏移地址(EA)
    SA和EA是一个未知的,类似方程式中的X、Y

    寻址方式:
    1、直接寻址    es.mov ax,1
    2、寄存器间接寻址    es.mov ax,[bx]
    3、寄存器相对寻址    es.mov ax,[bx+idata]
    4、相对基址变址寻址    es.mov ax,[bx+si+idata]



    8086CPU的指令,可以处理两种尺寸的数据,byte和word。
    确定指令做的是字操作还是字节操作,如下可解:
    1、通过寄存器名指明要处理的数据的尺寸
    mov ax,1;字操作
    mov al,1;字节操作
    mov ds:[0],ax;字操作
    mov ds:[0],al;字节操作

    2、在没有寄存器名存在的情况下,使用操作符X ptr指明内存单元的长度,X在汇编指令中可以为word或byte.
    mov word ptr ds:[0],1;字操作
    mov byte ptr ds:[0],1;字节操作

    3、其他地方
    有些指令默认了访问为字单元还是字节单元
    比如栈指令pop,push就是默认只进行字操作



    学习指令:
    div指令格式:
             div 8位寄存器/8位内存操作数
             div 16位寄存器/16位内存操作数
             div 32位寄存器/32位内存操作数


             被除数 、 除数、商、余数之间的关系:


            被除数                         除数                    商         余数
            ax                8位寄存器/8位内存操作数                al            ah
            dx:ax            16位寄存器/16位内存操作数            ax            dx       
            edx:eax            32位寄存器/32位内存操作数            eax            edx
    1.
             举个例子:
             mov ax, 0060h
             mov bl, 2
             div bl   ;al = 30h , ah = 00h

             那么执行完后, 商是30h ,余数是00h


    2.
             在举个例子
             执行(6005h/100h),由于我们的出示是16位,所以被除数是放在dx:ax中的。 但是由于被除数是6005h,所以我们必须将dx清0.
             xor dx, dx
             mov ax, 6005h
             mov bx, 100h
             div bx
           
             那么执行后, 我们的ax = 0060h, dx = 0005h。 所以我们的商是60h, 余数是5h。
             很简单。

    8086/8088汇编语言指令集http://blog.pfan.cn/wukong/5101.html
  • 相关阅读:
    动手实验01-----vCenter 微软AD认证配置与用户授权
    esxi 主机用户功能说明
    vCenter组件和服务
    配置vSphere Web Client超时值
    如何修改 Vmware vRealize Operations Manager Appliance root密码
    linux如何搭建sftp服务器
    Vmware vSphere 开启嵌套虚拟化
    在VS2013上配置OpenCV1.0
    FFmpeg深入分析之零-基础
    坚持看英文文档
  • 原文地址:https://www.cnblogs.com/GoGoagg/p/2001136.html
Copyright © 2011-2022 走看看