汇编语言物理地址
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等同时出现是应该选用什么段地址???
你要知道 只有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 这样懂了吧。
。。汇编语言的理解是要结合硬件和体系结构知识的 。
答:地址偏移量为100H的话,数据太容易给系统修改了,所以我写在偏移量为1000H的地方,你想写在100H的地方的话那你可以自己改一下。(PS:汇编代码太久没写了。...详情>>
答:QBasic简单一点详情>>