6.1 在代码段中使用数据
把以下8个数据和计算出来, 存在ax寄存器中
assume cs:code;
code segment; 数据段程序段地址是
dw 0123h,0123h,0123h,0123h,0123h,0123h,0123h,0123h
mov bx,0
mov ax,0
mov cx,8
s: add ax,cs:[bx]
add bx,2
loop s
mov ax,4c00h
int 21h;
code ends
end
t
这种情况会有问题,程序的执行会CS:IP去执行,程序的入口不是执行指令, 添加指令入口伪指令
assume cs:code
code segment
dw 0123h,0123h,0123h,0123h,0123h,0123h,0123h,0123h
start: mov bx,0;添加start
mov ax,0
mov cx,8
s: add ax,cs:[bx]
add bx,2
loop s
mov ax,4c00h
int 21h;
code ends
end start;添加start
6.2 在代码段中使用栈
将下面数据段的数据逆序存放
0001h,0002h,0003h,0004h,0005h,0006h,0007h,0008h
assume cs:code
code segment
dw 0123h,0124h,0125h,0126h,0127h,0128h,0129h,012Ah
dw 0000h,0000h,0000h,0000h,0000h,0000h,0000h,0000h
start: mov ax,cs
mov ss,ax
mov sp,32; 栈底部设置
mov bx,0
mov cx,8
s: push cs:[bx]
add bx,2
loop s; 循环入栈,循环到第四次有bug
mov bx,0
mov cx,8; 标记清理
s0: pop cs:[bx]
add bx,2
loop s0; 循环出栈
mov ax,4c00h
int 21h;
code ends
end 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,2
loop s
mov bx,0
mov cx,8
s0: pop [bx]
add bx,2
loop s0
mov ax,4c00h
int 21h
code ends
end start ```
- 定义多个段的方法
进行不同的命名 - 对段地址引用, data中的数据
mov ax,data
mov ds,ax - 代码段, 数据段, 栈段
完全是操作者来安排, code, data, stack只是命名