2021.09.14 16:50:45
[[Assembly|汇编笔记系列]]
直接上例程吧:
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
。这样的设计十分方便我们随时使用不同的段。如此组织代码,数据和栈,程序就显得十分清晰。所以,多多使用段吧。