6.1 在代码段中使用数据
把以下8个数据和计算出来, 存在ax寄存器中
assume cs:code;code segment; 数据段程序段地址是dw 0123h,0123h,0123h,0123h,0123h,0123h,0123h,0123hmov bx,0mov ax,0mov cx,8s: add ax,cs:[bx]add bx,2loop smov ax,4c00hint 21h;code endsend

t
这种情况会有问题,程序的执行会CS:IP去执行,程序的入口不是执行指令, 添加指令入口伪指令
assume cs:codecode segmentdw 0123h,0123h,0123h,0123h,0123h,0123h,0123h,0123hstart: mov bx,0;添加startmov ax,0mov cx,8s: add ax,cs:[bx]add bx,2loop smov ax,4c00hint 21h;code endsend start;添加start
6.2 在代码段中使用栈
将下面数据段的数据逆序存放
0001h,0002h,0003h,0004h,0005h,0006h,0007h,0008h
assume cs:codecode segmentdw 0123h,0124h,0125h,0126h,0127h,0128h,0129h,012Ahdw 0000h,0000h,0000h,0000h,0000h,0000h,0000h,0000hstart: mov ax,csmov ss,axmov sp,32; 栈底部设置mov bx,0mov cx,8s: push cs:[bx]add bx,2loop s; 循环入栈,循环到第四次有bugmov bx,0mov cx,8; 标记清理s0: pop cs:[bx]add bx,2loop s0; 循环出栈mov ax,4c00hint 21h;code endsend start;添加start
6.3 将数据,代码,栈放入不同的段
- 放到一个段程序混乱
- 数据多,栈空间大的时候,就不能放在一起 ``` assume cs:code,ds:data,ss:stack
data segment dw 0123h,0124h,0125h,0126h,0127h,0128h,0129h,012Ah data ends
stack segment dw 0000h,0000h,0000h,0000h,0000h,0000h,0000h,0000h stack ends
code segment start: mov ax,stack mov ss,ax mov sp,16;设置栈顶指向stack:16 mov ax,data mov ds,ax mov bx,0;ds:bx指向第一个单元 mov cx,8
s: push [bx]add bx,2loop smov bx,0mov cx,8s0: pop [bx]add bx,2loop s0mov ax,4c00hint 21h
code ends
end start ```
- 定义多个段的方法
进行不同的命名 - 对段地址引用, data中的数据
mov ax,data
mov ds,ax - 代码段, 数据段, 栈段
完全是操作者来安排, code, data, stack只是命名
