zoukankan      html  css  js  c++  java
  • 汇编(三)——关于寄存器的操作

    汇编(三)

    一、通用寄存器

    AX、BX、CX、DX

    1 byte = 8 bit

    2 byte = 16 bit

    0000 0000 0000 0000 ~ 1111 1111 1111 11111

    他们可以各自分为2个8位寄存器

    AX = AH*AL

    BX = BH*BL

    CX = CH *CL

    DX = DH*DL

    为什么存在通用寄存器?

    1.因为为了兼容之前的8位寄存器,保证之前的程序,稍加修改就可以运行在8086CPU上

    2.内存最小单元 8 bit

    CPU从内存中读取一个字节 8 bit字节的数据

    8位数据 -> 8位寄存器中

    16根数据线

    8086CPU一次性可以处理 2种尺寸的数据

    字节型数据 byte 8bit 8位寄存器中

    字型数据 2byte 16bit 16位寄存器中 2个字节

    一个字节是高位数据,一个是低位

    二、加深对AX、BX、CX、DX印象

    mov ax,5

    mov ax,0

    mov al,5

    按下r查询,按下t执行

    分析下面命令
    mov ax,4E20
    mov bx,ax
    mov ch,bl
    mov cl,bh
    mov dl,ch
    mov ax,dx
    

    16位寄存器和8位寄存器不能互相移动

    mov ax,bl 不行,不能将8位数据移动到16位寄存器中
    mov al,bx 不行,不能将16位数据移动到8位寄存器中
    

    问题:我们使用数据处理加法,超过了al或者bx,那么是报错还是?

    mov ax,18
    mov bx,8
    add ax,5
    

    add 加法指令 类似C中的+=

    8位寄存器进行8位计算,保存8位数据,如果超过了,那么保存在其他地方了,并没有消失

    三、监测点2.1

    写出每条指令执行后相关寄存器的值

    mov ax,62627
    mov ah,31H
    mov al,23H
    add ax,ax
    mov bx,826cH
    mov cx,ax
    mov ax,bx
    mov ax,bx
    mov al,bh
    mov ah,bl
    mov ah,bh
    mov ah,ah
    mov al,6
    

    四、地址寄存器

    段地址寄存器,偏移地址寄存器

    ds sp

    es bp

    ss si

    cs di

    ​ lp

    ​ bx

    • cs code Segment
    • ds data segment
    • ss stack segment
    • es extra segment

    8086 CPU 给了20根地址线

    0000 0000 0000 0000 ~ 1111 1111 1111 1111

    0 ~ FFFFF H

    地址线的数量,决定了CPU的寻址能力

    地址加法器 地址的计算方式

    段地址 * 16 + 偏移地址 = 物理地址

    段地址 * 16 = 基础地址

    基础地址 + 偏移地址 = 物理地址

    段地址:偏移地址

    段地址 偏移地址

    F230H*10H C8H

    练习:

    我们对地址进行修改并且查看,之后发现我们的地址确实修改了,我们也可以转换为其他地址进行修改

    d 2001:1F60//查看地址
    e 2001:1F60//修改地址
    

    五、监测点2.2

    段地址*10H + 偏移地址 = 物理地址

    1.段地址为0001H,仅通过变化偏移进行寻址,CPU寻址范围为()~()

    基础地址10H

    偏移地址0~FFFFH

    物理地址为10H~1000FH

    2.计算SA

    SA * 10H + FFFFH = 20000H
    

    所以SA计算是小数,所以,不能首先确定逻辑地址

    六、CPU如何区分指令与数据

    u指令 将某个内存地址,全部当做指令

    d指令 将某个内存地址,全部当做数据

    r指令 查看寄存器

    CS寄存器 IP寄存器

    CS:code Segment

    ip:instrument pointer

    七、加深CPU如何区分指令和数据印象

    将上面的机器码,用e指令,输入到2000H中,修改cs和ip指向2000H:0中,然后即可执行

    机器码           汇编指令
    
    b8 20 4e       mov ax,4E20
    
    05 16 14       add  ax,141
    
    bb 00 20       mov bx,2000H
    
    01 d8             add ax,ax
    
    89 c3              mov bx,ax
    
    01 d8              add ax,bx
    
    b8 1a 88         mov ax,001AH
    
    bb 26 00         mov bx,0026H
    
    00 d8               add al,bl
    
    00 dc                add ah,bl
    
    00 c7                 add bh,al
    
    b4 00                 mov ah,0
    
    00 d8                add a1,b1
    
    04 9c                 add a1,9c
    

    八、IP寄存器和指令的关系

    指令都是有长度的 一条指令可以由多个字节构成

    指令的执行过程

    1. CPU 从 CS : IP 进行读取指令,存放到缓存器中
    2. IP = IP + 所读指令长度
    3. 执行指令缓存器中的内容,回到第一步
  • 相关阅读:
    从程序员到项目经理(13):如何管理自己的时间(下)
    从程序员到项目经理(11):每个人都是管理者
    从程序员到项目经理(15):项目管理三大目标
    程序员:伤不起的三十岁
    从程序员到项目经理(9):程序员加油站 再牛也要合群
    从程序员到项目经理(7):程序员加油站 完美主义也是一种错
    从程序员到项目经理(4):外行可以领导内行吗
    ArcGIS API For Android离线地图的实现
    ArcGIS for Android地图控件的5大常见操作
    从程序员到项目经理(16):原来一切问题都是可以解决的
  • 原文地址:https://www.cnblogs.com/littlepage/p/11939471.html
Copyright © 2011-2022 走看看