汇编学习笔记:段

xeonds

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。这样的设计十分方便我们随时使用不同的段。如此组织代码,数据和栈,程序就显得十分清晰。所以,多多使用段吧。