免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2416 | 回复: 3
打印 上一主题 下一主题

请教寄存器寻址问题 [复制链接]

论坛徽章:
2
技术图书徽章
日期:2013-09-28 17:43:46金牛座
日期:2013-09-28 18:39:14
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2014-10-21 16:18 |只看该作者 |倒序浏览
从《汇编语言程序设计》(布鲁姆)这本书书里看到的一个例子:
  1. .section .data
  2. values:
  3.     .int 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60
  4. .section .text
  5. .globl _start
  6. _start:
  7.     nop
  8.     movl values, %eax
  9.     movl $values, %edi
  10.     movl $100, 4(%edi)
  11.     movl $1, %edi
  12.     movl values(, %edi, 4), %ebx
  13.     movl $1, %eax
  14.     int $0x80
复制代码
在这段汇编码的第11行,将1存入了edi寄存器指向的内存里了,我理解就是values这个标签指向的内存,第一个位置应该就是1了,可是在调试的时候那段values的第一个位置还是10,可是上一行的100就存进去了,调试过程如下:
  1. [root@iZ251yujg9zZ asm]# gdb -q movtest3
  2. Reading symbols from /asm/movtest3...done.
  3. (gdb) break *_start+1
  4. Breakpoint 1 at 0x4000b1: file movtest3.s, line 8.
  5. (gdb) run
  6. Starting program: /asm/movtest3

  7. Breakpoint 1, _start () at movtest3.s:8
  8. 8            movl values, %eax
  9. (gdb) s
  10. 9            movl $values, %edi
  11. (gdb) s
  12. 10            movl $100, 4(%edi)
  13. (gdb) x/11d &values
  14. 0x6000dc <values>:        10        15        20        25
  15. 0x6000ec <values+16>:        30        35        40        45
  16. 0x6000fc <values+32>:        50        55        60
  17. (gdb) s
  18. 11            movl $1, %edi
  19. (gdb) x/11d &values
  20. 0x6000dc <values>:        10        100        20        25
  21. 0x6000ec <values+16>:        30        35        40        45
  22. 0x6000fc <values+32>:        50        55        60
  23. (gdb) s
  24. 12            movl values(, %edi, 4), %ebx
  25. (gdb) x/11d &values
  26. 0x6000dc <values>:        10        100        20        25
  27. 0x6000ec <values+16>:        30        35        40        45
  28. 0x6000fc <values+32>:        50        55        60
  29. (gdb)
复制代码
有点不理解为什么第一个数字还是10,而不是1呢,恳请大家指点~

论坛徽章:
6
2015年辞旧岁徽章
日期:2015-03-05 16:13:092015年迎新春徽章
日期:2015-03-05 16:13:092015小元宵徽章
日期:2015-03-06 15:58:1815-16赛季CBA联赛之浙江
日期:2016-11-05 14:38:4115-16赛季CBA联赛之新疆
日期:2016-11-11 18:38:06
2 [报告]
发表于 2014-10-21 22:17 |只看该作者
第1个数字的地址是values+0

程序对100的写入地址是values+4,这已经是第2个数的地址了,原值15=>100

论坛徽章:
6
2015年辞旧岁徽章
日期:2015-03-05 16:13:092015年迎新春徽章
日期:2015-03-05 16:13:092015小元宵徽章
日期:2015-03-06 15:58:1815-16赛季CBA联赛之浙江
日期:2016-11-05 14:38:4115-16赛季CBA联赛之新疆
日期:2016-11-11 18:38:06
3 [报告]
发表于 2014-10-21 22:22 |只看该作者
而那个1,只写入了寄存器,并未写入内存,当然看不到

论坛徽章:
2
技术图书徽章
日期:2013-09-28 17:43:46金牛座
日期:2013-09-28 18:39:14
4 [报告]
发表于 2014-10-22 10:29 |只看该作者
回复 3# 爻易


    看完你回答我又回去看了下书,确实写到了带括号的寄存器是存到里面指向的地址,不带的是存寄存器。。。还是看书不认真啊- -、谢谢了啊!{:2_172:}
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP