6.1~6.2
程序6.3
assume cs:code
code segment
dw 0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987h ---------用dw定义的数据,偏移地址为0,2,4,6,8,a,c, e;由于它们在代码段中,段地址在CS。
dw 0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ————用dw定义了16个字型数据,程序加载后取得16个字的内存空间存放这16个数据,在后面的程序中将这段空间当栈空间使用
(数据data)
start: —————程序入口
mov ax,cs ————第一个指令
mov ss,ax
mov sp30h (栈顶ss:sp指向cs:30)
mov bx,0
mov,cx,8
s: push cs:[bx]
add bx,2
loop s (将0~15单元的八个字型数据依次入栈)
mov bx,0
mov,cx,8
s0: pop cs:[bx]
add bx,2
loop s0 (依次出栈到代码段的0~15单元中)
mov ax,4c00h
int 21h
code ends
end start
6.3
程序6..4
assume cs:code,ds:data,ss:stack 定义多个段:“code”,“data”,“stack”为段名(可随意取名,a,b,c都行)
data segment
dw 0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987h data段
data ends
stack segment
dw 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 stack段
stack ends
code segment code段
start:(可以改名,比如D:则最后end D)
mov ax,stack 意为将名称为“stack”的段的段地址送入ax,。
mov ss,ax
mov sp,20h ss:sp即栈顶指向stack:20(20-2=1d,.........)
mov ax,data
mov ds,ax
mov bx,0 ds:bx指向data段的第一个单元
mov cx,8
s: push [bx]
add bx,2
loop s 将data段0~15单元的8个字型数据入栈
mov cx,8
s0: pop [bx]
add bx,2
loop s0 依次出栈到data段的0~15单元
mov ax,4c00h
int 21h
code ends
end start
(cpu真正执行的是start~end start之间的代码)