青春纸盒子

文: 芦苇

你喜欢我笑的样子

我靠上了落寞的窗子

晚风吹起了我的袖子

明月沾湿了你的眸子


转身,你走出了两个人的圈子

树影婆娑,整座院子


挽起袖子

回头,把揽你忧伤一地的影子

装进,青春,这纸盒子


更多代码请关注我的微信小程序: "ecoder"

luwei0915

导航

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

 

posted on 2022-03-20 22:33  芦苇の  阅读(277)  评论(0编辑  收藏  举报