⑴ 汇编语言与接口技术怎么求物理地址
1.汇编语言 SI DI BX BP SS DS
SI: 16位寄存器,源变址寄存器
DI: 16寄存器,目变址寄存器
BX: 16位寄存器(28位寄存器BH,BL),基址寄存器
BP: 16位寄存器,基址指针寄存器
SS : 16位段寄存器作用存放前堆栈段段址般SP连用
DS: 16段寄存器, 作用存放前数据段段址
2.根据些求物理址
面几寄存器跟求物理址谈关系.
公式: 物理址 = 基础址 + 偏移址 = CS*10H(基础址)+ IP(偏移址)
CS: 16位段寄存器,存放前代码段段址
IP: 存放条要执行指令偏移址
LZ明白追问
⑵ 汇编语言 有关段跨越物理地址的计算问题
是不是求ES:[BX]指向的物理地址的问题?
是的话,可以这样计算:
(ES)*16+(BX)=物理地址
2100H*16+0100H=21100H
补充:
源操作数就是ES:[BX],它的物理地址可由上面公式计算出来,就是21100H
⑶ 汇编语言 SI DI BX BP SS DS 是什么 怎样根据这些求物理地址
SI、DI、BX、BP是8086CPU可用来作指针使用的寄存器,一般用来表示一个偏移量,具体的和寻址方式有关。
SS、DS是段地址寄存器。
由于8086CPU是16的,而其存储容量可达1MB,也就是20位的寻址空间,因此编程时用两个16位的地址来表示,即 段地址:偏移地址,它和实际地址,也就是物理地址的关系是:
物理地址=段地址×16+偏移地址
对于上面的寄存器,当作地址使用时,根据寻址方式不同,有一种默认关系,只要指令中出现BP作地址的,则其段地址为SS,否则就为DS。当然还有段前缀一说,这要看实际情况来定了。
比如:
MOV AX,[BX];则其物理地址=DS×16+BX
MOV AX,[BP];则其物理地址=SS×16+BP
MOV AX,[BX][SI] ;则其物理地址=DS×16+(BX+SI)
MOV AX,[BP][SI];则其物理地址=SS×16+(BP+SI)
⑷ x86汇编语言求物理地址算法
也没那种最初的玩泥巴的心思。指条路你自己学着走:
需要指出,此算法严格上是有缺陷的,其正确的前提是假设bx中的段地址高四位总为零,如此bx*10H就不会溢出,同时也需要加上偏移量后bx不产生溢出,这样冲从限制下的结果才是正确的。
该算法正确的前提是所得的物理地址高四位都是零,所以就不需多考虑,只需输出0XXXXH即可。
至于将ax或内存的二进制以十六进制字符输出,网络上有许多现成的简单算法,既然你都没兴趣自己尝试,那就自己去找找吧,阿门。。。
真要得到任意二十位偏移物理地址,需要用到dx:ax
lds ax,list
mov bx,10H
xor dx,dx
mul bx
;至此得到段地址的20位物理地址存于dx:ax中,其中高12位始终为零也无使用意义
mov cx,offset list
add cx,2
;至此得到目标内存单元的偏移量
add ax,cx
adc dx,0
;至此得到目标内存单元的20位物理地址存于dx:ax的低20位
;输出dx:ax的低20位即可,阿门。。。。
⑸ 汇编语言 物理地址问题
这个答案是错误的,正确的是:7E814H。
1、先计算数据区末字的偏移地址
16个字占20H字节的内存空间,0DDF6H+20H=DE16H,这是末字数据后面的偏移地址,末字的偏移地址为DE16H-2=DE14H。
2、再计算末字的物理地址
物理地址=段地址*10H+偏移地址=70A0H+DE14H=7E814H。
⑹ 汇编如何计算目标操作数的物理地址
第一个为ES(段基址)*16+SI(偏移地址)第二个为SS(段基址)*16+BP+SI+6。至于段基址的判断为当含有BP时,段基址为SS,而如第一个已经给出段基址了为ES,其余情况均为DS
⑺ 汇编语言SI、DI、BX、BP、SS、DS分别是什么怎样根据这些求物理地址
1.汇编语言 SI DI BX BP SS DS 是什么
SI: 16位寄存器,源变址寄存器
DI: 16为寄存器,目的变址寄存器
BX: 16位寄存器(可分成2个8位寄存器BH,BL),基址寄存器
BP: 16位寄存器,基址指针寄存器
SS : 16位段寄存器,作用是存放当前堆栈段的段地址,一般和SP连用
DS: 16为段寄存器, 作用是存放当前数据段的段地址
2.怎样根据这些求物理地址
上面的这几个寄存器跟求物理地址谈不上关系.
有个公式: 物理地址 = 基础地址 + 偏移地址 = CS*10H(基础地址)+ IP(偏移地址)
CS: 16位段寄存器,存放当前代码段的段地址
IP: 存放下一条要执行的指令的偏移地址
LZ如有不明白的地方,可追问
⑻ 汇编语言:SI、DI、BX、BP、SS、DS分别是什么怎样根据这些求物理地址
1.汇编语言 SI DI BX BP SS DS 是什么
SI: 16位寄存器,源变址寄存器
DI: 16为寄存器,目的变址寄存器
BX: 16位寄存器(可分成2个8位寄存器BH,BL),基址寄存器
BP: 16位寄存器,基址指针寄存器
SS : 16位段寄存器,作用是存放当前堆栈段的段地址,一般和SP连用
DS: 16为段寄存器, 作用是存放当前数据段的段地址
2.怎样根据这些求物理地址
上面的这几个寄存器跟求物理地址谈不上关系.
有个公式: 物理地址 = 基础地址 + 偏移地址 = CS*10H(基础地址)+ IP(偏移地址)
CS: 16位段寄存器,存放当前代码段的段地址
IP: 存放下一条要执行的指令的偏移地址
LZ如有不明白的地方,可追问
⑼ <汇编语言> 里说物理地址=段地址乘16d+偏移地址,那么段地址*16d是如何计算
不是算出来的,这个和你的系统有关,这个根据你用的汇编支持的地址宽度、字长等等决定的,确切地是你汇编对应的CPU规定死的。
16d=10h=10000b,十进制是乘以16,16进制左移一位,2进制是左移4位。
这个其实是进制乘法的问题,你可以按照普通的竖式乘法计算,只不过,16进制是逢G(F+1)进1,2进制是逢2进1。
就像你平时做十进制的x*10的时候,很自然地会在后面加个0,16进制、2进制也是看到*10可以在后面加个0的。