Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Assembly 什么是;地址为;汇编语言中的平均值_Assembly_Memory_X86_Stack_Cpu Registers - Fatal编程技术网

Assembly 什么是;地址为;汇编语言中的平均值

Assembly 什么是;地址为;汇编语言中的平均值,assembly,memory,x86,stack,cpu-registers,Assembly,Memory,X86,Stack,Cpu Registers,我只是想知道当你说“BP(或任何寄存器)的数据地址”是否与[BP]符号相同,如果不是,它是什么意思?示例也值得欣赏我假设这是16位实模式。假设bp=0xFFFE,ss=0x1000。请注意,使用bp作为基址寄存器意味着使用ss作为段寄存器 mov ax,ss:[bp] ;load ax with data from address 0x1FFFE 计算地址的数学方法是将段寄存器中的值乘以16,然后加上偏移量。对于8086,偏移量可以是立即偏移量加上基址寄存器bx或

我只是想知道当你说“BP(或任何寄存器)的数据地址”是否与[BP]符号相同,如果不是,它是什么意思?示例也值得欣赏

我假设这是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寻址模式的示例链接:


我假设这是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寻址模式的示例链接:


为了访问某个地址的字节,对于大多数处理器,您可以将要访问的地址放入通用寄存器中,然后使用适当的指令和/或寻址模式,您可以访问该地址或从该地址开始的数据

伪码

mov r0,#0x12345678
mov r1,#0x11223344
str r1,[r0]
所以我把地址0x12345678放在寄存器0中,我把我想写入地址的值放在r1中。然后,我告诉处理器将该值存储在r1(0x11223344)内存中r0(0x12345678)中包含的地址处。处理器读取寄存器r0,获取作为地址的值,并在地址总线上使用该值,以及从数据总线上的r1读取的值,并执行存储(写入)。在本例中,我对该地址进行32位写入

语法和指令集因体系结构/目标而异。
有些指令集允许您使用指令中指定的地址直接向内存加载或存储(有时只是使用mov或move来加载和存储),通常这些指令集提供基于寄存器的寻址模式,而不是立即寻址。必须使用寄存器来保存所有事务要访问的地址的其他指令集。

为了访问某个地址的字节,对于大多数处理器,您可以将要访问的地址放入通用寄存器中,然后使用适当的指令和/或寻址模式,您可以访问该地址或从该地址开始的数据

伪码

mov r0,#0x12345678
mov r1,#0x11223344
str r1,[r0]
所以我把地址0x12345678放在寄存器0中,我把我想写入地址的值放在r1中。然后,我告诉处理器将该值存储在r1(0x11223344)内存中r0(0x12345678)中包含的地址处。处理器读取寄存器r0,获取作为地址的值,并在地址总线上使用该值,以及从数据总线上的r1读取的值,并执行存储(写入)。在本例中,我对该地址进行32位写入

语法和指令集因体系结构/目标而异。
有些指令集允许您使用指令中指定的地址直接向内存加载或存储(有时只是使用mov或move来加载和存储),通常这些指令集提供基于寄存器的寻址模式,而不是立即寻址。您必须使用寄存器来保存所有事务要访问的地址的其他指令集。

它只是意味着
BP
包含一个地址,并且该地址用于访问数据。使用语法
[BP]
意味着您希望内存内容由寄存器寻址,而不是寄存器本身的内容。换句话说,如果
BP
包含地址

MOV AX,BP 
将地址(BP的内容)复制到AX中,但是

MOV AX,[BP]
BP
寻址的内存的内容复制到
AX


这就是他们写“addressed by”时的意思。

它只是意味着
BP
包含一个地址,该地址用于访问数据。使用语法
[BP]
意味着您希望内存内容由寄存器寻址,而不是寄存器本身的内容。换句话说,如果
BP
包含地址

MOV AX,BP 
将地址(BP的内容)复制到AX中,但是

MOV AX,[BP]
BP
寻址的内存的内容复制到
AX


这就是他们写“addressed by”时的意思。

它只是意味着
BP
包含一个地址,该地址用于访问数据。使用语法
[BP]
意味着您希望内容由寄存器寻址,而不是寄存器本身的内容。换句话说,如果BP包含地址,
MOV AX,BP
将地址(BP的内容)复制到AX中,但
MOV AX,[BP]
将BP寻址的内存内容复制到AX中。这只意味着
BP
包含地址,并且该地址用于访问数据。使用语法
[BP]
意味着您希望内容由寄存器寻址,而不是寄存器本身的内容。换句话说,如果BP包含地址,
MOV AX,BP
将地址(BP的内容)复制到AX中,但
MOV AX,[BP]
将BP寻址的内存内容复制到AX中。