Chinaunix首页 | 论坛 | 博客
  • 博客访问: 497320
  • 博文数量: 161
  • 博客积分: 6010
  • 博客等级: 准将
  • 技术积分: 1947
  • 用 户 组: 普通用户
  • 注册时间: 2007-08-25 01:20
文章分类

全部博文(161)

文章存档

2011年(44)

2010年(47)

2009年(48)

2008年(22)

我的朋友

分类:

2009-08-28 23:03:02

汇编语言--编译器成为可执行文件*.exe
伪指令由编译器执行!无对应的机器码
1>定义一个段
段名 segment
:
段名 ends
一个汇编程序由多个段组成
这些段被用来存放代码,数据,或当作栈空间来使用
指令,数据,栈被划分到了不同的段中
一个由意义的汇编程序中至少要有一个段,这个段用来存放代码

2>end
结束整个源代码,编译器认为程序结束

区别:
源程序:源程序中的所有内容
程序:将源程序中最终由计算机执行,处理的指令或数据
程序经编译,连接转为机器码,存储在可执行的文件中

 

3>assume
假设:将有特定用途的段和相关的段寄存器关联起来即可
4>标号
code segment
:
code ends
code就是标号,这个段的名称最终被编译,连接程序处理为一个段的段地址
5>程序的结构
源程序一般由段组成,不同的段用来存放数据,代码,等
assume cs:abc
abc segment
mov ax,2
add ax,ax
add ax,ax
mov ax,4c00h
int 21h
abc ends
end
 
6>程序返回
编程->1.asm ->编译->1.obj->连接->1.exe->加载->内存中的程序->运行
                                         command          cpu

程序执行过程更中
dos系统中.exe文件中的程序的加载过程
step1:
找到起始地址为SA:0000H,偏移为0H,容量足够的内存空间
step2:
在这段内存空间中的前256B,创建一个成为程序段的前缀psp的数据区
dos要利用psp来和 加载程序进行通信
step3:
在256B后面,将程序装入,程序的地址为sa+10h:0
{空闲sa:0开始!0-255为psp,从256开始为程序
dos为了更好的区分他们,将他们划分不同的段
空闲内存区sa:0  =={写入的ds}
psp区:sa:0
程序区sa+10h:0}
psp区和程序区,虽然物理地址连续,但有不同的段地址

step4:
将该内存区的段地址sa存入ds,初始化其他寄存器后,设置cs:ip指向程序的入口 (程序区sa+10h:0)ds=sa

///////
debug 1.exe
ds=0B4A  cs=0B5a ip=0000 要执行的是第一条指令
psp:ds:0
程序区:cs:ip 或ds+10:0

实验3 编程 编译 连接 跟踪
阅读(587) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~

chinaunix网友2011-06-05 02:21:38

大连法律咨询在线 http://www.fabowang.com 大连律师在线咨询 http://www.fabowang.com 大连法律顾问网 http://www.fabowang.com 大连律师咨询 http://www.fabowang.com