汇编笔记_第六章
包含多个段的程序
在代码段中使用数据
先看程序:
assume cs:codesg
codesg segment
dw 0123h,0456h,0789h,0abch,0fedh,0cbah,0987h
start:
mov bx,0
mov ax,0
mov cx,8
s:
add ax,cx:[bx]
add bx,2
loop s
mov ax,4c00h
int 21h
codesg ends
end start
- dw 的含义是定义字型数据;
- 程序的第一条指令前加了标号start,这个标号又在end后出现,这样end除了可以同值编译器结束程序外,还可以通知编译器的入口在哪里,即,若要CPU从何处卡是执行程序,只要在源程序中用
end 标号
指明就行;
所以程序的框架可以为:
assume cs:code
cdoe segment
...
数据
...
start:
...
代码
...
code ends
end start
将数据、代码、栈放入不同的段
- 放到一个段中使得程序很混乱
- 当处理的数据、栈、代码需要的空间超过64KB时,就不能放在一个段中;
伪指令;
assume
cs:code,ds:data,ss:stack
...
mov ax,stack
mov ss,ax
mov ax,data
mov ds,ax
ss:sp就指向stack:16,CPU把stack段当栈空间用;
把数据段、堆栈段放在代码段前,其对应的段地址是x-1、x-2
放在后面紧跟代码段后面(貌似)
(end)
剑之所指,心之所向,身之所往!!!