汇编语言(五) 汇编代码在内存中的结构( 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 后,内存结构如下:





8086汇编基础 简单代码的分析示例

慈心积善融学习,技术愿为有情学。善心速造多好事,前人栽树后乘凉。我今于此写经验,愿见文者得启发。 1、这个是初始的代码 assume cs:code code s...
  • yushaopu
  • yushaopu
  • 2016年07月22日 20:28
  • 6373

Windows10下搭建汇编语言开发环境(利用DOSBOX和MASM32)

学一门语言,最好的方法便是在实践中学习。对于不少初学者来说,首先要面临的是如何搭建开发平台/环境的问题。由于汇编语言的特殊性,不少初学者会担心自己直接对寄存器进行操作会不会导致系统崩溃或者系统硬件损坏...
  • doniexun
  • doniexun
  • 2015年05月02日 11:08
  • 73438

[Intel汇编-MASM]源程序的组成以及编译调试

1. 以第一个汇编源程序为例说明: assume cs:codesg codesg segment mov ax, 0123H mov bx, 0456H add ax, bx ...
  • Lirx_Tech
  • Lirx_Tech
  • 2014年12月17日 15:34
  • 1050

8086汇编基础 使用masm编译源文件

慈心积善融学习,技术愿为有情学。善心速造多好事,前人栽树后乘凉。我今于此写经验,愿见文者得启发。 1、原来的文件夹 2、进行编译 3、...
  • yushaopu
  • yushaopu
  • 2016年07月22日 08:42
  • 876

8086 汇编小程序

仅以此文记录我在Centos上使用DosBox写8086汇编小程序,不知为何DosBox总是会将我当前用户Logout,然后我必须重新登录的艰苦岁月……1:HelloWorldDATA SEGMENT...
  • yangbodong22011
  • yangbodong22011
  • 2016年11月19日 11:13
  • 2400

贪食蛇的汇编代码(8086)

这是我学习8086汇编的时候做得一个练习,代码写得比较长,可能有BUG,没认真去测试了,不过结构化做得还算好,应该容易看懂,这是目前这止写得最长的汇编程序,有好几百行代码,汇编语言的基本知识都用到了。...
  • gaslinux
  • gaslinux
  • 2010年02月18日 22:05
  • 2284

浅谈汇编语言与Visual C++的混合编程

汇编语言是面向机器的语言,它与机器密切相关,具有占用存储空间小,运行速度快,可以直接控制硬件等特点;但是汇编语言程序的编写及调试烦琐,复杂,通用性不好,移植性差,程序员需要熟悉机器的内部结构之后才能编...
  • niushitang
  • niushitang
  • 2013年04月06日 19:21
  • 2325

在Linux环境下(Ubuntu)编写MASM汇编程序

转载自:http://blog.renren.com/share/333499439/14661346767 作者:丁枣枣 名词解释: MASM: MASM是微软公司开...
  • tenlee
  • tenlee
  • 2015年09月24日 15:44
  • 3435

<汇编>MASM5.0编译出现<error link:no stack segment>

汇编代码如下:assume cs:code,ds:datasgdatasg segment db 'BaSiC' db 'AFDSKJJ' datasg endscode segment ...
  • Demak
  • Demak
  • 2015年04月30日 10:28
  • 955

8086CPU提供的栈机制简介

我们先简单提一下栈的概念:栈是一种具有特殊访问形式的存储空间,特殊性在于数据后进先出。 8086提供入栈(PUSH)和出栈(POP)指令:比如push ax表示将AX寄存器中数据送入栈中,pop ...
  • best_fiends_zxh
  • best_fiends_zxh
  • 2016年09月24日 19:00
  • 558
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:汇编语言(五) 汇编代码在内存中的结构( 8086 + masm 编译器)
举报原因:
原因补充:

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