没有合适的资源?快使用搜索试试~ 我知道了~
20150518_综合研究3研究报告V3.0_13邵温财1
需积分: 0 0 下载量 133 浏览量
2022-08-08
21:56:50
上传
评论
收藏 12KB DOCX 举报
温馨提示
试读
2页
20150518_综合研究3研究报告V3.0_13邵温财1
资源详情
资源评论
资源推荐
实验三
1.指针的理解
*(char *)0x2000 =’a’;自己以前的理解为:将 2000h 强行转换为 char 型指针地址,将字
符送到指向 2000h 的指针所指向的单元中。现在理解:第一个*表示要访问的是一个内存空
间。“(char *)”里面的“*”指明了数值表示一个内存空间的地址。“Char” 指明了这个地
址是储存 char 型数据的内存空间的地址。
2.编写程序在屏幕中显示字符‘a’
main()
{
*(int far*)0xb80007d0=0x0261;
}
3. c 全局变量放在内存中,就是所谓的静态区。局部变量放在堆栈中,如果局部变量多次
使用,会把局部变量放在 si,di 寄存器中。对于 push bp,mov bp,sp 的含义,因为局部变量的
访问要用 bp 来寻址,就要改变 bp 的值,所以要 push bp. 之后又 sub sp,06h 这是为局部变
量开辟的空间,这样就可以在主程序 push pop 不会覆盖局部变量区域。最后 sp 和 bp 恢
复到进入子程序的值,这样就会正确返回。因为 main 函数其实是子程序,调用的时候就把
main 程序的偏移地址压入堆栈。
4.c 语言将函数的返回值存放在哪里?
经过研究得以下结论:char 型的返回值放在 AL 中,int 型的返回值放在 AX 中。Long int 型返
回值在 AX,DX 中,double 尚未研究明白
5.解析程序
#define buffer ((char *)*(int far *)0x200) ;定义 buffer 为 char 型地址,地址为 0000:0200 地
址处所放的地址
main()
{
buffer=(char *)malloc(20);//在内存空间找连续 20 字节单元为空的内存空间,把首地址放到
// AX 中在把 AX 放到 0000:0200 处 经 debug 调试发现 0000:0200 处放的偏移地址为 0298h
// 即申请的内存空间为 DS:0298H 开始的 20 个字节单元
buffer[10]=0; //令 ds:0298h+a 处的单元赋值为 0
while(buffer[10]!=8) //判断 ds:0298h+a 处的单元值是否为 8 不是就继续执行,是就跳转
色空空色
- 粉丝: 57
- 资源: 331
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0