汇编语言中的数据移动与交换指令详解
1. 数据移动基础示例
在汇编语言调试过程中,我们可以看到如下操作:
(gdb) s
12 movl $100, 4(%edi)
(gdb) print/x $edi
$2 = 0x804909c
此时,EDI 寄存器持有十六进制值 0x804909c,这是一个内存地址。接下来的指令将立即数据值 100 移动到 EDI 寄存器所指向地址之后 4 字节的内存地址处,这应该是 values 数组中的第二个数据元素。我们可以使用 x 命令来查看 values 数组:
(gdb) s
13 movl $1, %edi
(gdb) x/4d &values
0x804909c <values>: 10 100 20 25
可以看到,值 100 已经替换了 values 数组中第二个数据元素原来的值。后续指令将数组的第二个数据元素加载到 EBX 寄存器中。程序的退出码应该是存储在 EBX 寄存器中的新创建的数组第二个数据元素的值(即 100),可以在 shell 中使用特殊环境变量 $? 来检查这个退出码:
$ ./movtest4
$ echo $?
100
$
超级会员免费看
订阅专栏 解锁全文
91

被折叠的 条评论
为什么被折叠?



