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

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


例如这个 代码:

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

汇编语言(五) 汇编代码在内存中的结构( 8086 + masm 编译器)_第1张图片

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

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


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


详细解释 在下面,

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


汇编语言(五) 汇编代码在内存中的结构( 8086 + masm 编译器)_第2张图片汇编语言(五) 汇编代码在内存中的结构( 8086 + masm 编译器)_第3张图片



你可能感兴趣的:(汇编语言)