首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >汇编中的直接内存寻址和[]

汇编中的直接内存寻址和[]
EN

Stack Overflow用户
提问于 2017-02-12 10:57:32
回答 2查看 4.6K关注 0票数 1

我在看这个conventions.29

直接内存寻址时,它说:

代码语言:javascript
复制
.data
  my_var dw 0abcdh ; my_var = 0xabcd

.code
  mov ax, [my_var] ; copy my_var content into ax (ax=0xabcd)

我想知道,如果没有它的值0xabc d,它会复制什么到ax?

为什么它一开始就是内容呢?它不应该把0xabc d当作一个内存地址,然后去看看存储在地址0xabc d上的是什么吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-02-12 11:05:59

my_var是指某些内存地址的符号。指令

代码语言:javascript
复制
my_var dw 0abcdh

使汇编程序分配两个字节的存储,将值0abcdh写入它,然后让my_var指向该存储的开头。

注释my_var = 0xabcd想要解释变量my_var指向的值具有这个值。要理解这一点,请注意在像C这样的高级语言中,当您声明一个全局变量时,变量名总是被隐式取消引用:

代码语言:javascript
复制
int foo = 1;
// compiles to
foo dw 1

我想知道,如果没有它的值0xabc d,它会复制什么到ax?

如果不使用内存引用,则复制符号my_var的值,即该变量的地址。例如,

代码语言:javascript
复制
    mov ax, my_var

就像你写的

代码语言:javascript
复制
    ax = &my_var;

在C.

为什么它一开始就是内容呢?它不应该把0xabc d作为一个内存地址,并去看看什么是存储在地址0xabc d而不是?

不是的。要做到这一点,您需要两个内存访问,因为您首先需要获取my_var的内容以获取0xabcd,然后从0xabcd获取内容以获得其中的内容:

代码语言:javascript
复制
mov bx,[myvar]
mov ax,[bx]
票数 6
EN

Stack Overflow用户

发布于 2017-02-12 11:05:13

Kotaa

基本上:

代码语言:javascript
复制
mov  ax, my_var   ; Moves the location of my_var into ax
mov  ax, [my_var] ; Moves the content found at the address of my_var

你的第二组问题。实际上,如果my_var应该保存指向另一个数据块的指针,那么:

代码语言:javascript
复制
mov  eax, [my_var]  ; Get pointer stored at my_var
mov  ebx, [eax]      ; Get data from pointer whose address is in eax
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42186740

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档