关闭

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

508人阅读 评论(0) 收藏 举报
分类:

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


例如这个 代码:

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 后,内存结构如下:





0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:95466次
    • 积分:2438
    • 等级:
    • 排名:第16020名
    • 原创:141篇
    • 转载:47篇
    • 译文:0篇
    • 评论:3条
    最新评论