爱问知识人 爱问教育 医院库

汇编语言物理地址

首页

汇编语言物理地址

1.我想知道汇编里 MOV EAX,TABLE[EBP][EDI*4]这条指令中TABLE[EBP][EDI*4]的物理地址怎么求,EBP的默认段寄存器应该是SS段而EDI的默认段寄存器却是DS段那么应该选哪一个???
2.在XCHG BX,[BP+SI]里,它的求法为什么是SS*16d+BP+SI,而不用DS*16d+BP+SI呢???
总结:BP和EBP的默认段位SS而DI、EDI、SI默认段位DS段,当BP或EBP和DI或EDI等同时出现是应该选用什么段地址???

提交回答
好评回答
  • 2008-10-28 09:39:00
      你要知道 
    只有bx和 bp是指定段寄存器是ds和ss的 
    而si di是所谓增量寄存器 也就是说
    以bx和bp优先考虑的
    这里有个规定
    bx bp si di
    要不他们单独出现
    比如 mov ax [bx]
    要不他们只以4种组合出现
    即 bx配di si
       bp配di si
    比如 mov ax [bp+si]
    当第1种情况时 是你所说那种bp对应ss而其他3种对应ds
    当第二种情况时 是优先考虑 bp的 
    总之 你要记住2点
    除非以上2点 其他的组合是错误的
    比如mov ax [bx+bp]
    只要是上面的组合 那么只要有bp就优先bp的段寄存器
    至于为什么只有上面2种组合 
    这是定义 计算机内部构造决定的 
    bp和bx优先考虑
    这也是内部构造决定的 在8086里 si,di只是被用作所谓增量寄存器 
    如果你觉得难以接受的话 我给你说的稍微深一点 
    比如在指令里面 假如一个指令有8位
    再假如前面2位是说明这条指令是干什么的
    再假如后面每隔3位是说明所用到的寄存器
    比如 add ax bx 这个指令
    翻译成指令译码是00 111 000
    前面2个00是说明这个是加法 
    后面3个1说明这个指令用到ax寄存器
    后面3个0说明这个指令用到bx寄存器
    那么再假如计算机默认按照第3位到5位对应的地方找他对应的段地址寄存器
    这个例子里就是说计算机自动找111那个地方对应的寄存器对应的段寄存器 如果你的程序里有bp又有si 那么编译器就自动把bp写在那个位置 这样他就找到的是ss而不是ds
    只要有bp  按照上面所说的原理 对应的就是ss
    这样懂了吧。
      。。汇编语言的理解是要结合硬件和体系结构知识的 。

    z***

    2008-10-28 09:39:00

类似问题

换一换
  • 汇编语言 相关知识

  • 电脑网络技术
  • 电脑网络

相关推荐

正在加载...

热点检索

  • 1-20
  • 21-40
  • 41-60
  • 61-80
  • 81-100
  • 101-120
  • 121-140
  • 141-160
  • 161-180
  • 181-200
返回
顶部
帮助 意见
反馈

确定举报此问题

举报原因(必选):