(1)程序返回前,data段中的数据:
程序返回前,cs=076c,ss=076b,ds=076a
code段地址为X,data段地址为X-2,stack段地址为X-1
(2)程序返回前,data段中的数据:
程序返回前,cs=076c,ss=076b,ds=076a
code段的段地址为X,则data段地址为X-2,stack段地址为X-1
对定义如下的段:
name segment:
...
name ends
若段中数据占N个字节,则程序加载后,该段实际占有的空间:(N/16+1)*16
(3)
程序返回前,data段中的数据:
程序返回前,cs=076a,ss=076e,ds=076d
code段的段地址为X,则data段地址为X+3,stack段地址为X+4
(4)
题(3)中的可以顺利执行,因为题(3)中代码段放在第一位,若不指明程序入口,默认第一个为程序入口。
(5)
源代码 :
assume cs:code a segment db 1,2,3,4,5,6,7,8 a ends b segment db 1,2,3,4,5,6,7,8 b ends c segment db 0,0,0,0,0,0,0,0 c ends code segment start: mov cx,8 mov bx,0 s: mov dl,0 mov ax,a mov ds,ax add dl,[bx] mov ax,b mov ds,ax add dl,[bx] mov ax,c mov es,ax mov es:[bx],dl inc bx loop s mov ax,4c00h int 21h code ends end start
截图:
未运行前:
运行后:
经过验证,实验数据确实相加了。
(6)源代码:
1 assume cs:code 2 a segment 3 dw 1,2,3,4,5,6,7,8,9,0ah,0bh,0ch,0dh,0eh,0fh,0ffh 4 a ends 5 6 b segment 7 dw 0,0,0,0,0,0,0,0 8 b ends 9 10 code segment 11 start: 12 mov cx,8 13 mov ax,a 14 mov ds,ax 15 mov ax,b 16 mov ss,ax 17 mov sp,10h 18 mov bx,0 19 20 s: 21 push [bx] 22 add bx,2 23 loop s 24 25 mov ax,4c00h 26 int 21h 27 code ends 28 end start
实验结果截图:
由图可知,运行前b段都为0,运行后将这八个字型数据逆序存入该段中。
二.总结与体会
在这一块中,我更多学习了关于多个段的程序编写的方法,而且了解到各个程序段我们该学会如何去安排他们。
通过不同段的存放,避免了长度不能超过64kb的问题,还是很实用的。