我只是想知道你何时说出BP(或任何寄存器)的数据地址"与[BP]表示法相同,如果不是,它是什么意思?例子也很受欢迎
答案 0 :(得分:0)
我假设这是16位实模式。假设bp = 0xFFFE,ss = 0x1000。注意,使用bp作为基址寄存器意味着使用ss作为段寄存器。
mov ax,ss:[bp] ;load ax with data from address 0x1FFFE
计算地址的数学运算是将段寄存器中的值乘以16,然后添加偏移量。对于8086,偏移量可以是立即偏移量加基址寄存器的组合:bx或bp,加上索引寄存器:si或di。 8086寻址模式的示例链接:
https://courses.engr.illinois.edu/ece390/books/artofasm/CH04/CH04-2.html
答案 1 :(得分:0)
为了访问某个地址的字节,对于大多数处理器,您可以将要访问的地址放在通用寄存器中,然后使用正确的指令和/或寻址模式,您可以访问该地址或从该地址开始访问数据
在伪代码中
mov r0,#0x12345678
mov r1,#0x11223344
str r1,[r0]
所以我把地址0x12345678放在寄存器0中,然后把我要写的值写入r1中的那个地址。然后我告诉处理器将r1(0x11223344)中的值存储在r0(0x12345678)中包含的地址的内存中。处理器读取寄存器r0,取该值作为地址,并在地址总线上使用该值,并从数据总线上的r1读取值并执行存储(写入)。在这种情况下,我正在对该地址进行32位写操作。
语法和指令集因架构/目标而异。 某些指令集允许您使用指令中指定的地址直接对存储器进行加载或存储(有时只是使用mov或一般用于加载和存储),这些指令集通常会提供基于寄存器而非立即的寻址模式。其他指令集必须使用寄存器来保存您要为所有事务访问的地址。
答案 2 :(得分:0)
它只是意味着BP
包含一个地址,并且该地址用于访问数据。使用语法[BP]
表示您希望寄存器寻址的内存,而不是寄存器本身的内容。换句话说,如果BP
包含地址,
MOV AX,BP
将地址(BP
的内容)复制到AX
,但
MOV AX,[BP]
将BP
所解决的内存的内容复制到AX
。
这就是他们写作"由"解决的意思。