关于实验5(5)
assume cs:codea 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
d segment
db 0,0,0,0,0,0,0,0
d ends
code segment
start:mov ax,a
mov ds,ax
mov ax,d
mov es,ax
mov bx,0h
mov cx,8
mov ax,0
s:mov al,ds:
add al,ds:
mov es:,al
inc bx
loop s
mov ax,4c00h
int 21h
code ends
end start
在定义字型数据dw和定义字节数据db时,a、b、d三者中的数据在数据段中是不是一定按次序连续存放? 中间不会有其他数据
本帖最后由 莫名其妙 于 2012-3-9 18:25 编辑
0B75:000001 02 03 04 05 06 07 08-00 00 00 00 00 00 00 00a段
0B75:001001 02 03 04 05 06 07 08-00 00 00 00 00 00 00 00b段
0B75:002000 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00c段
这是debug下看的 存放在内存中的 段内数据
当你只设定一个a段的时候数据是依次存放的
当你设定b段的时候 a段数据不够16位的将会用0补齐 一直到下一个16位开始的地方 开始存放B段数据
当你设定C段时候 b段不够16位数据 将用0补齐16位 然后在下一个16位开始的地方开始存放C段数据
如果只有一个数据段 a 那么 不管里面有dd 的数据还是dw的数据 或者DB的数据那么他们总是一个挨着一个的存放直到结束
如果有两个或者两个以上的段( a b c d....)那么 不管DD DW DB 数据都是按照各段的顺序依次存放 段与段之间 不够16位的用0填充
比如说上面的a段如果有21个数据那么
0B75:000001 02 03 04 05 06 07 08-09 10 11 12 13 14 15 16 a段
0B75:001017 18 19 20 21 00 00 00-00 00 00 00 00 00 00 00这里a段在21位置处存放完了 后面用0补齐16位 然后 开始b段
0B75:0020 01 02 03 04 05 06 07 08-00 00 00 00 00 00 00 00 b段
上面是我编出來的内存图 方便观看
莫名其妙 发表于 2012-3-9 18:15 static/image/common/back.gif
0B75:000001 02 03 04 05 06 07 08-00 00 00 00 00 00 00 00a段
0B75:001001 02 03 04 05 06 07 08- ...
{:5_95:} 非常感谢!了解了 怎么设置最佳答案啊{:5_94:} 答案如下
start:mov ax,b
mov ds,ax
mov ax,c
mov es,ax
mov bx,0
mov ax,0
mov cx,8
s1: mov al,ds:
mov ah,0
mov es:,ax
inc bx
inc ax
loop s1
mov bx,0
mov ax,0
mov cx,8
s2: mov al,bx
mov ah,0
add es:,ax
inc bx
inc ax
loop s2
页:
[1]