汇编网首页登录博客注册
yugong的学习博客
博客首页博客互动【做检测题】论坛求助

我的博客

个人首页 |  我的文章 |  我的相册 |  我的好友 |  最新访客 |  文章收藏 |  论坛提问 |  友情链接 |  给我留言  
图片载入中
学习动态
友情链接

[2008-12-09 21:44] 研究试验3  使用内存空间

1、在debug 中对main函数进行单步跟踪:
   进行如下设置将cs:ip指向main地址
   >>a
    15A3:0000 mov ax,15a3
    15a3:0003 mov ds,ax
    15a3:0005 call word ptr [9]
  >>e
    15a3:0009 30.fa   CD.01
这是一种愚蠢的方法
很简单的:
    call 01fa
   g 01fa
(看来自己相关的知识有问题哦)

2、show程序如下:
   main()
  {
   *(char far *)(0xb8000000+160*12+40*2)='a';
  }

3、根据汇编代码观察有:
   C语言中将全局变量存放在01A6,01A8,01AA内存单元中。
   问题,是不是所有的C语言程序的全局变量都都在01A6开始的内存单元中?
   
   局部变量存放在栈中,所以每个函数的开头的
   push bp
  mob bp,sp
  就是用来保存原先栈顶指针的!

4、C程序
int f(void);
int a,b,ab;
 
main()                  push bp
{                       mov bp,sp
int c;                  sub sp,2
c=f();                  call 020a
}

int f(void)             push bp
{                       mov bp,sp
 ab=a+b;                mov ax,[01a6] add ax,[01a8]
 return ab;             mov [01aa],ax
                        mov ax,[01aa]
}
思考:①C语言将函数的返回值放在AX中
   ②全局变量a,b ,ab也是放在向系统申请的数据段ds:01a6
           ds:01a8,ds:01aa
       ③局部变量放在向系统申请的栈段中
        ④一个变量(不是什么类型的变量)代表一个内存单元!

5、程序理解
#define Buffer((char*)*(int far *)0x02000000)
   Buffer为字符型指针指向内存单元0200:0000
Buffer=(char *)malloc (20)
   在汇编程序中call 04DD完成malloc功能,返回指针即内存单元放在AX中,这种分配是动态的体现在,每次执行call 04DD后AX的值是不同的。mov bx,0200 mov es,bx  xor bx,bx  mov es:[bx],ax将Buffer指向动态分配的内存单元。
评论次数(2)  |  浏览次数(980)  |  类型(汇编作业) |  收藏此文  | 

[  younggay   发表于  2008-12-09 22:09  ]

嗯。不错。

[  yugong   发表于  2008-12-10 16:52  ]

younggay,你知道上面3中那个问题吗?

 
 请输入验证码  (提示:点击验证码输入框,以获取验证码