累加0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987h并将其结果放入ax中
assume cs:code
code segment
dw 0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987h ;dw即define word,用来定义字型数据
start: mov bx,0
mov ax,0
mov cx,8
s: add ax,cs:[bx]
add bx,2
loop s
mov ax,4c00h
int 21h
code ends
end start ;end除了通知编译器在哪里结束,还会通知编译器程序的入口在什么地方。
上面dw指令定义了8个字型数据,由于是在代码段code中定义的,所以这八个字型数据的段地址为cs。又因为dw定义的数据处于代码段的最开始,所以编译地址为0,这8个数据的偏移地址分别为0,2,4,6,8,A,C,E。
利用栈,将程序中定义的数据逆序存放。
assume cs:code
code segment
dw 0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987h
dw 0,0,0,0,0,0,0,0 ;用dw定义8个字型数据,在程序加载后,将取得8个字的内存空间
;在后面的程序中会将这段空间当作栈来使用
start: mov ax,cs
mov ss,ax
mov sp,32 ;将栈顶ss:sp指向cs:32,即上面定义字的内存空间
mov bx,0
mov cx,8
s1: push cs:[bx]
add bx,2
loop s1
mov bx,0
mov cx,8
s2: pop cs:[bx]
add bx,2
loop s2
mov ax,4c00h
int 21h
code ends
end start
将数据、代码、栈放入不同的段
assume cs:code,ds:data,ss:stack
data segment
dw 0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987h
data ends
stack segment
dw 0,0,0,0,0,0,0,0
stack ends
code segment
start: mov ax,stack ;stack会被编译为栈的段地址
mov ss,ax
mov sp,16 ;执行这段指令设置ss:sp指向stack:16,cpu执行
;这些指令后,将把stack段当作栈空间来用。
mov ax,data
mov ds,ax
mov bx,0
mov cx,8
s1: push [bx]
add bx,2
loop s1
mov bx,0
mov cx,8
s2: pop [bx]
add bx,2
loop s2
mov ax,4c00h
int 21h
code ends
end start