相关疑难解决方法(0)

在x86-64 AT&T组装中,地址前的星号*是什么意思?

以下行是什么意思:

...
401147: ff 24 c5 80 26 40 00    jmpq   *0x402680(,%rax,8)
...
Run Code Online (Sandbox Code Playgroud)

内存地址前面的星号是什么意思?此外,当内存访问方法缺少它的第一个寄存器值时,它意味着什么?

通常它的类似("%register",%rax,8),但在这种情况下它没有第一个寄存器.

有小费吗?

assembly x86-64

30
推荐指数
6
解决办法
2万
查看次数

在MASM32中混淆括号

我试图掌握MASM32,并对以下内容感到困惑:

我认为括号用于间接,所以如果我有一个预定义的变量

 .data
   item dd 42
Run Code Online (Sandbox Code Playgroud)

然后

 mov ebx, item
Run Code Online (Sandbox Code Playgroud)

将'item'的内容,即数字42,放入ebx和

 mov ebx, [item]
Run Code Online (Sandbox Code Playgroud)

将'item'的地址,即存储42的地址放入ebx.

但是控制台应用程序中的以下代码:

 mov ebx, item
 invoke dwtoa, ebx, ADDR valuestr 
 invoke StdOut, ADDR valuestr
 mov ebx, [item]
 invoke dwtoa, ebx, ADDR valuestr 
 invoke StdOut, ADDR valuestr
Run Code Online (Sandbox Code Playgroud)

两次打印42次.要获得"项目"的地址,我似乎需要

 mov ebx, [OFFSET item]
 invoke dwtoa, ebx, ADDR valuestr 
 invoke StdOut, ADDR valuestr
Run Code Online (Sandbox Code Playgroud)

任何人都可以解释MASM中的方括号,或者指出一个很好的参考.

assembly masm masm32

7
推荐指数
1
解决办法
1679
查看次数

x86 中的 jmpl 指令是什么?

x86 汇编设计有指令后缀,如l(long), w(word), b(byte)
所以我认为这jmpllong jmp

但是当我编译它时它的工作很奇怪。
见下面的例子。

测试1:组装

main:
  jmp main
Run Code Online (Sandbox Code Playgroud)

测试1:编译结果

eb fe     jmp 0x0804839b <main> 
Run Code Online (Sandbox Code Playgroud)


测试2:组装

main:
  jmpl main # added l suffix
Run Code Online (Sandbox Code Playgroud)

测试2:编译结果

ff 25 9b 83 04 08   jmp *0x0804839b
Run Code Online (Sandbox Code Playgroud)


与Test1相比,Test2的结果出乎意料。
我认为它应该与Test1一样编译。


问:
jmpl什么不同的指令在8086的设计?
(根据这里jmpl在 SPARK 中意味着 jmp 链接。是这样的吗?)

...或者这只是 gnu 汇编程序上的错误?

x86 assembly gnu-assembler att

6
推荐指数
2
解决办法
2507
查看次数

标签 统计

assembly ×3

att ×1

gnu-assembler ×1

masm ×1

masm32 ×1

x86 ×1

x86-64 ×1