汇编学习笔记:段

[[Assembly|汇编笔记系列]]

直接上例程吧:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
assume cs:code,ds:data,ss:stack

data segment

dw 0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987h

dw ends

stack segment

dw 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0

stack ends

code segment

start: mov ax,stack
mov ss,ax
mov sp,20h ;设置栈顶ss:sp指向stack:20

mov ax,data
mov ds,ax

mov bx,0

mov cx,8
s: push [bx]
add bx,2
loop s

mov bx,0

mov cx,8
s0: pop [bx]
add bx,2
loop s0

mov ax,4c00h
int 21h

code ends

end start

简单来说,段可以把程序划分为多个部分,便于我们更清晰地组织指令,数据和栈。

一个程序可以有多个段,只需要使用不同的段名即可。那么编译器怎么知道程序从哪里开始执行呢?从start标号开始。同样,这个标号的名称也是由我们自己确定的。

每个段的地址是段名:0000H。这样的设计十分方便我们随时使用不同的段。如此组织代码,数据和栈,程序就显得十分清晰。所以,多多使用段吧。

作者

xeonds

发布于

2021-09-14

更新于

2024-05-13

许可协议

评论