鱼C论坛

 找回密码
 立即注册
查看: 3149|回复: 0

[汇编作业] 第18章综合研究

[复制链接]
发表于 2016-4-20 11:41:03 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 yundi 于 2016-4-20 14:41 编辑

322页(5)示例代码,向安全内存空间写入a~h ,个人理解如下:
  1. #define Buffer ((char *)*(int far *)0x02000000)
复制代码

1.宏定义,就是把后面的一串用Buffer表示
2.(int far *)0x02000000 , 0x02000000是一个数值,(int far *) *指明这个值表示一个内存空间地址,far 指明地址是段地址+偏移地址方式,int指明这地址存的数据大小是word型数据
3.* (int far *)0x02000000 , 第一个* 表示访问上述地址
4.(char *) ### ,表示刚取得的数值又是一个内存空间地址,大小是byte型数据
5.整体看Buffer意思是:在0:200位置1个word大小的内存空间保存一个值,这个值是一个地址,这个地址还未知,但大小为1个byte

  1. Buffer = (char *)malloc(20);
复制代码

malloc函数申请了一个20字节的内存空间,函数的返回值(ax)是这段空间的首地址,Buffer= 赋值,就是把返回值ax存到0:200内存位置。
当*Buffer 或Buffer[x]时,就是访问地址为 (ax)的空间

  1. Buffer[10] = 0
复制代码

将空间10号偏移的地址,1byte大小中存入0

  1. while(Buffer[10]!=8)
  2. {
  3.     Buffer[Buffer[10]] = 'a'+Buffer[10];
  4.     Buffer[10]++;
  5. }
复制代码

依次给0,1,2,... , 7号偏移的内存中存入 a,b,c,...,h
开始认为把abc...h存到了0:200 ,201,202...是错的! 0:200只有一个值,是一段内存的首地址,abc...h保存在那段内存中!




小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-7-12 11:53

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表