第6章

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之间的代码)

 

posted @ 2018-11-25 19:39  不吃耗子的猫  阅读(86)  评论(0编辑  收藏  举报