夜烛流 发表于 2012-3-9 14:08:20

关于实验5(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

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:15:01

本帖最后由 莫名其妙 于 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 19:58:11

莫名其妙 发表于 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:} 非常感谢!了解了

夜烛流 发表于 2012-3-9 20:13:47

怎么设置最佳答案啊{:5_94:}

尔陔·芣慬倳 发表于 2012-3-10 22:23:58

答案如下

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]
查看完整版本: 关于实验5(5)