• 09_CPU从内存中读取数据


    # 数据的长度
        byte = 8bit                 字节型数据
        word = 2byte = 16bit        字型数据
        一个word需要2个连续的内存单元来存放, 高位地址存放高位字节, 低位地址存放低位字节
        如: 
            内存单元存放 4E20
            0 -> 20
            1 -> 4E
            2
            3
            4
            5
            6
            7
    
    # 数据的读取: 
        需要地址信息: 段地址 + 偏移地址
        DS ES SS CS  = 073F(H)  段地址寄存器,保存的是段地址信息
        
        练习: 从段地址 + 偏移地址中读取数据
        -r es\n 0
        -r ss\n 0
        CS 跟 IP 搭配, 可以不用改
        -d 2000:0                          查看段地址偏移地址中的内容
        -e 2000:0 11 22 33 44 55 66 77     修改段地址中偏移地址的内容         
        mov bx,2000H                       修改BX值
        mov ds,bx                          修改段地址为20000
        mov al,ds:[0]                      从段地址(2000) 偏移地址(0) 中读取一个字节的内容 // ds: 不用写
        mov cx,ds:[2]                      从段地址(2000) 偏移地址(2) 中读取一个字的内容   // ds: 不用写

      
        

    练习:
        1. 内存中的情况如图所示, 指令执行后寄存器中的内容
        题目:                    地址单元   数据                    解析:
        mov ax,2000H             20000H    23H                     AX = 2000H
        mov ds,ax                20001H    11H                     DS = 2000H
        mov ax,ds:[0]            20002H    22H                     AX = 1123H
        mov bx,ds:[2]            20003H    66H                     BX = 6622H
        mov cx,ds:[1]                                              CX = 2211H
        add bx,ds:[1]                                              BX = 6622H + 2211H = 8833H
        add cx,ds:[2]                                              CX = 2211H + 6622H = 8833H

        2. 内存中的情况如图所示, 指令执行后寄存器中的内容
        题目:                    地址单元   数据                    解析:
        mov ax,2000H             20000H    23H                     AX = 2000H
        mov ds,ax                20001H    11H                     DS = 2000H
        mov ax,2C34H             20002H    22H                     AX = 2C34H
        mov ds:[0],ax            20003H    11H                     20000H = 34H  20001H = 2CH
        mov bx,ds:[0]                                              BX = 2C34H
        sub bx,ds:[2]                                              BX = 2C34H - 1122H = 1B12H
        mov ds:[2],bx                                              20002H = 12H  20003H = 1BH
     
        3. 写一段指令, 将连续的3个字型数据累加存放到AX中         -e 2000:0 12 34 99 88 FF EE   段地址的偏移地址数据
            20000H    12H    =>  3412H                    mov bx,2000                    BX = 2000H
            20001H    34H                                 mov ds,bx                      DS = 2000H 段地址是2000
            20002H    99H    =>  8899H                    mov ax,0                       AX = 0H
            20003H    88H                                 add ax,ds:[0]                  AX = 3412H
            20004H    FFH    =>  EEFFH                    add ax,ds:[2]                  AX = 3412H + 8899H = BCABH
            20005H    EEH                                 add ax,ds:[4]                  AX = BCABH + EEFFH = ABAAH
                                                                                              EEFFH
                                                                                             1ABAAH
     
        4. 偏移地址溢出的情况
           -e 2000:0 FF
           -d 2000:0
           mov bx,2000
           mov ds,bx
           mov al,10
           add [0],al           ds:[0] = FF + 10 = 10FH = 0FH               只取前2位
           -d 2000:0 F          查看
           -e 2000:0 EE FF
           add [0],bx           ds:[0] = FFEEH + 2000H = 11FEEH = 1FEEH     只取前4位
    
    
  • 相关阅读:
    singleton 创建static类型的对象
    记忆曲线 遗忘曲线
    创建classic 得到函数 调用函数
    abstract factory 创建相互关联的类
    log4j PatternLayout
    C#中override重写与new隐藏的区别,以及C#与Java的override区别 转
    iptables如何做内网的https端口映射 转
    得到一棵树 取自表内自递归(即ID 与ParentID)
    Common.TcpLibTcpClientT
    得到汉字的首拼音字符 ZT
  • 原文地址:https://www.cnblogs.com/luwei0915/p/16042467.html
Copyright © 2020-2023  润新知