数据,代码,栈放入不同的段

1.为什么要引入不同的段放不同的东西

而且代码和数据本身都是二进制信息
所以代码,数据和栈放入同一个段中无法分清,哪里是数据,哪里是代码
所以我们需要用多个段来放不同的

2.段

段如何定义
Name segment
//内容
Name ends
表示一个段
数据段 把内容变成 dw 0123h,0456h...
栈段   把内容变成 dw 0,0,0,0...
代码段 把内容变成 mov ax,bx...
带来的问题:

这样一来也出现一个问题程序我们把前面的数据段和栈段安排现在前面,程序执行的时候会出错,执行的是我们不希望执行的指令

解决方案

我们的解决方案是用 start 标号来表明程序的入口,并用end start去向编译器指明程序入口,start也可以是别的符号

assume ...
//各个段 在你想要作为开头的段 写入标号start
end start

注:

  1. dw 是定义字型数据 “define word”
  2. db 是定义字符数据 “define Byte”
  3. dd 是定义双字型数据 ''double word"
  4. dup 是进行数据重复
    dw / db / dd 重复的次数 dup (重复的数据)
    可以让相同的数据变简短

汇编源代码分析

assume cs:code,ds:data,ss:stack
data segment    
	dw 0123h,0456h,0abch                                                                                      
data ends

stack segment     
	dw 0,0,0,0
stack ends

code segment  
start:  mov ax,code       
	mov ss,ax       
	mov sp,8h    
	mov ax,data       
	mov ds,ax       
	mov bx,0                                                                                                                                                                                       
	mov cx,3     
s: 	push [bx]       
	add bx,2       
	loop s 
	mov bx,0
	mov cx,3
s0:	pop [bx]
	add bx,2       
	loop s0
	mov ax,4c00
	int 21h
code ends
end start
  1. mov ax stack 执行到 mov ds,ax
    在这里插入图片描述

    stack 和 data 变成一个地址
    stack 的段地址为 076c
    data 的段地址为 076a
    在这里插入图片描述

  2. mov sp,4h 并没有去执行 ,sp在执行 mov ss,ax 后就变成了0004

  3. 执行完第一个入栈循环
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    如上,从高地址开始向低地址赋值,stack空间多一个,有一个没有变化

  4. 执行完第二个出栈循环
    在这里插入图片描述 在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

这里出现了一个问题:

前面我们知道栈的入栈,不改变其他的位置
出栈也不会覆盖原来的,只有再push到这个位置的时候,覆盖
但是这里【 00 00 ss ip A3 01】 这4个字都会来填充这个栈没有元素的,这是让我费解的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yilyil

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值