汇编语言(五) 汇编代码在内存中的结构( 8086 + masm 编译器)

原创 2016年06月02日 11:00:24

汇编代码 在编译,链接后,加载到 内存中  数据段,程序段,栈段 是如何 存放的呢?


例如这个 代码:

assume cs:codesg,ds:data
;每个单词的头一个字母改为大写
data segment
	db '1. file         '
	db '2. edit         '
	db '3. search       '
	db '4. view         '
	db '5. options      '
	db '6. help         '
data ends

codesg segment
start:	mov ax,data
		mov ds,ax
		mov cx,6
		mov bx,0
	s:	mov al,[bx+4]
		and al,11011111B
		mov [bx+4],al
		add bx,16
		loop s
	mov ax,4c00H
	int 21H
codesg ends

end start


编译,链接成 convert.exe 后,   debug  convert.exe


加载exe 后,ds 存储着 psp 的地址,而 程序 的地址 是 075AH + 10H = 076AH, 

而076A 中 存放的是 数据段的 结构,数据段的长度为6* 16个字节,076A + 6 = 0770,为什么 只是加6呢? 因为是 段地址。而代码段的 地址 在 CS:IP = 0770:0000 中,所以 数据段 之后 紧跟着 代码段。


所以 代码在 内存中,是按 代码 书写的 顺序来存储的。如果 代码是 : 数据段 ;栈段;代码段,则内存中亦是如此。若是 代码段,数据段,栈段,则 内存中 是 代码,数据,栈段, 所有 段的 内存 不足 16 的倍数,则空闲一些地址后,才可以 存入 下面的 段。


详细解释 在下面,

王爽的 《汇编语言》4.8小节 提到,dos 下 加载 exe 后,内存结构如下:





关于Eclipse中main(String[] args)中参数配置的问题

在Robert Sedgewick的《算法》(第四版)中第28页中对于二分查找中在命令窗口中用java BinarySearch tinyW.txt 如果是在Run as -> Run Confi...

汇编语言学习00_计算机系统的硬件结构、8086cpu结构

在我们学习汇编语言之前,或是其他高级语言编程时,我们必须必要深刻理解计算机系统的硬件结构,就好像计算机的整个硬件结构都印在你的脑子里,然后程序在你的脑子里不断重复的执行,取指令、读外设接口寄存器、写外...

《汇编语言》王爽 实验7 基于8086汇编代码

可以用emu8086或者debug查看运行结果,以下是我的代码: assume cs:codesg,ds:datasg,ss:stacksg datasg segment db '197...

VS2010配置MASM完成汇编代码编译

场景: 1. 虽然使用MASM32也可以编译运行汇编程序,但是既然装了VS2010,它也能支持编译运行汇编吧.不然微软的开发人员难道还不用vs写汇编程序了? http://www.masm...
  • kingswb
  • kingswb
  • 2017年03月20日 07:40
  • 301

MASM汇编代码编辑器

  • 2010年08月25日 20:45
  • 437KB
  • 下载

32位汇编语言学习笔记(40)--在汇编代码中使用libc库函数

前面的汇编代码没有使用libc库函数,都是通过直接进行系统调用完成。《32位汇编语言学习笔记(21)--用NASM实现Hello World小程序》通过系统调用实现了一个HelloWorld小程序,我...

32位汇编语言学习笔记(9)--分析while循环的汇编代码

 while循环与do-while循环不同,是先判断循环条件。gcc会把while循环转换成如下格式的代码,再生成汇编代码: if (循环条件不成立) goto done ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:汇编语言(五) 汇编代码在内存中的结构( 8086 + masm 编译器)
举报原因:
原因补充:

(最多只允许输入30个字)