学习参考:汇编语言(第2版)王爽
- 在代码段中使用数据
- 在代码段中使用栈
- 将数据、代码、栈放入不同的段
在代码段中使用数据
1 2 3 4 5 6 7 8 9 10 11 12
| assume cs:code
code segment
数据 start: 代码 code ends end start
|
这里 end 的作用除了通知编译器程序结束外,还可以通知编译器程序的入口在什么地方。比如在程序中指明了程序的入口在标号 start 处,也就是说,会从 start 标号处,执行第一条指令
在代码段中使用栈
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
| assume cs:codesg
codesg segment
dw 0123h, 0456h,0789h,0abch,0defh,0fedh,0cbah,0987h dw 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ; 用 dw 定义 16 个字形数据,在程序加载后,将取得 16 个字的 ; 内存空间,存放这 16 个数据。在后面的程序中将这段 ; 空间当作栈来使用 start: mov ax,cs mov ss,ax mov sp,30h ; 将设置栈顶 ss:sp 指向 cs:30 mov bx,0 mov cx,8 s: push sc:[bx] add bx,2 loop s ; 将以上代码段 0~15 单元中的 8 个字型数据依次入栈 mov bx,0 mov cx,8 s0: pop cs:[bx] add bx,2 loop s0 ; 以上依次出栈 8 个字型数据到代码段 0~15 单元中 mov ax,4c00h int 21h
codesg ends end start ; 指明程序入口在 start 处
|
我们要将 cs:10~cs:2F (10是因为前面定义了 8 个字(2*8=10h),2F是因为 10+16*2=2Fh)的内存空间当作栈来用,初始状态下为空,所以 ss:sp 要指向栈底,则设置 ss:sp 指向 cs:30
将数据、代码、栈放入不同的段
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
| assume cs:code,ds:data,ss:stack
data segment ;数据 data ends
stack segment
;数据 stack ends
code segment
start: mov ax, stack mov ss,ax mov sp,20h ; 设置栈顶 ss:sp 指向 stack:20 这里只是距离 mov ax,data mov ds,ax ; ds 指向 data 段 ; 其他代码
code ends end start
|