• 04_物理地址算法


    寄存器: 汇编就是通过汇编指令修改寄存器中的内容
    
    寄存器 debug -r
        AX(AH + AL) BX(BH + BL) CX(CH + CL) DX(DH + DL)  = 0000(H)
            通用寄存器, 一般存放数据, 两个16进制数, 最大FFFF(1111 1111 1111 1111), 十进制 65535, 两个字节构成.
            AX = AH + AL 互相独立的寄存器
                H: high 高八位 2^8-1 = 0-255
                L: low  低八位 2^8-1 = 0-255
        SP = 00FD BP = 0000(H)  偏移地址寄存器
        SI DI        = 0000(H)  偏移地址寄存器
        DS EC SS CS  = 073F(H)  段地址寄存器
        IP           = 0100(H)  偏移地址寄存器
        NV UP EI PL NZ NA PO NC
        另: BX 也可以是偏移地址寄存器
    
    
    # DosBox操作
    debug
        -a mov ax,4e20(两个回车)
        -r 查看寄存器
        -t 执行
        -d 查看地址信息
    
        -a mov cl,al    # 将AX的低八位移动到CX的低八位
        -a mov ad,8     # 将 0008(H) 移动到AX寄存器中  AX = 0008(H)
        -a add ax,8     # 给 AX 寄存器加 0008(H)      AX = 0010
    
    注意:
        如果相加超出寄存器范围, 则截取后四位显示(高八位和低八位都是独立的, 各自都会截取)
        高/低八位的寄存器不能与十六位寄存器(AX..)进行直接运算
    
    -d解释:
        左边: 1,2: 段地址   3,4: 偏移地址(最大FFFF)
        右边: 
        1 2  3 4   1  2  3  4  5  6  7  8  9  10 11 12 13 14 15 16           宽度 16
        073F:0100  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00    ................
        073F:0110  00 00 00 00 00 00 00 00-00 00 00 00 34 00 2E 07    ............4...
        073F:0120  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00    ................
        073F:0130  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00    ................
        073F:0140  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00    ................
        073F:0150  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00    ................
        073F:0160  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00    ................
        073F:0170  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00    ................
    
        物理地址 = 段地址*10H(段寄存器左移四位,相当于右边拼接一个十六进制0) + 偏移地址(cpu的地址加法器完成的)
        根本原因 = 8086CPU, 寄存器只能表示3位的地址 比如: 2864 = 200 * 10 + 864
        
        8086CPU, 地址总线是20位的, 即可以寻址能力可以达到1M字节, 但是它的ALU和寄存器都只有16位, 也就是表示数的能力只能达64k,于是用两个寄存器对来表示一个物理地址,
        这两个寄存器都是16位, 直接相加还是不能匹配20位的地址线的访问能力, 地址加法器将两个16位地址合成为一个20位的物理地址,
        地址加法器通过内部总线将20位物理地址送入输入输出控制电路, 输入输出控制电路将20位物理地址送上地址总线, 20位物理地址被地址总线传送到存储器
    
    # 练习
     1. 地址段为 0001H, 如果只能通过偏移地址来寻址, 则CPU的寻址范围:
        0001H * 10H + 0H   = 10H
        0001H * 10H + FFFF = 0010H + FFFF = 1000F
                             0010
                             FFFF
                            1000F
    2. 有一数据存放在内存20000H中, 现在给定地址段a, 如果只用偏移地址找到20000H, 那么段地址应该满足的最大最小值是什么
        A * 10H + 0    = 20000H  A = 20000H / 10         = 2000H  最大
        A * 10H + FFFF = 20000H  A = (20000H -FFFF) / 10 = 1000H  最小
                                   -   FFFF
                                      10001

  • 相关阅读:
    [WPF 自定义控件]好用的VisualTreeExtensions
    [UWP]从头开始创建并发布一个番茄钟
    [WPF 自定义控件]使用TextBlockHighlightSource强化高亮的功能,以及使用TypeConverter简化调用
    [WPF 自定义控件]排序、筛选以及高亮
    《写给大家看的设计书》,推荐给想了解设计的程序员
    [WPF 自定义控件]使用WindowChrome自定义RibbonWindow
    [书籍]通过《番茄工作法图解》复习番茄工作法
    [WPF 自定义控件]使用WindowChrome的问题
    [WPF 自定义控件]使用WindowChrome自定义Window Style
    时时监听input内容的改变
  • 原文地址:https://www.cnblogs.com/luwei0915/p/16032493.html
Copyright © 2020-2023  润新知