内存数据存放问题。

mustmust 2011-11-26 09:50:50
代码如下:

ORG 30H

DATE1 DB 56H,“ABCD”   ;这里打不出来英文单引号

  DATE2 DW 1234H,“EF”

  CONT = DATA2-DATA1

DATE3 = DATA2+2

想问的是: 

  一、DATA1定义的是字节类型,那么“ABCD”怎么可能是一个字节就能放得下的,如果“ABCD”不能放在一个字节里面,那么怎么又把定义成一个字节类型?

  二、上面的数据如果放到内存里面,是不是这样的
       -----
      | 56H  |  偏移量 30H
      | 41H  |      31H
      | 42H  |      32H
      | 43H  |      33H
     | 44H  |      34H  
      | 12H  |      35H
      | 34H  |      36H
      | 45H  |      37H
      | 46H  |      38H
       -----
  那么DATA2-DATA1,也就是 CONT 的值是不是:35H — 30H=6?
    DATA2+2, 也就是 DATA2 的值是不是:35H + 2=37H=45H?
...全文
99 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
imwds 2011-11-28
  • 打赏
  • 举报
回复
没看过
gsy999 2011-11-27
  • 打赏
  • 举报
回复
[Quote=引用楼主 mustmust 的回复:]
代码如下:
ORG 30H
DATE1 DB 56H,“ABCD”   ;这里打不出来英文单引号
  DATE2 DW 1234H,“EF”
  CONT = DATA2-DATA1
DATE3 = DATA2+2
想问的是: 
  一、DATA1定义的是字节类型,那么“ABCD”怎么可能是一个字节就能放得下的,如果“ABCD”不能放在一个字节……
[/Quote]
实际情况是:

       -----
      | 56H  |  偏移量 30H
      | 41H  |      31H
      | 42H  |      32H
      | 43H  |      33H
     | 44H  |      34H  
      | 34H  |      35H
      | 12H  |      36H
      | 46H  |      37H
      | 45H  |      38H
      | ???  |      39H
      | ???  |      40H
mustmust 2011-11-27
  • 打赏
  • 举报
回复
书上CONT 的值是 36H - 30H =6?也就是DATA2 的偏移量是 36H?而不是35H?
mustmust 2011-11-27
  • 打赏
  • 举报
回复
上面打错了,书上给出的答案是 CONT = 36H-30H=6
mustmust 2011-11-27
  • 打赏
  • 举报
回复
这么说来又是书本上错了?
这本书叫《汇编语言》,清华大学出版社的,王晓虹,毕于深,李飒编著的
总共只看了三章,明显的第一处错误是一个习题的答案搞错了,前不久我也在论坛发过帖子的,现在又错了,
上面的代码是照书上一字不漏的照搬过来的,书上就是那么写的,而且它给出的答案是:
CONT = 36H-30H=5
DATA3=DATA2+2=36H+2=38H='EF'
我晕了,奉劝大家以后不要买他写的书了,误人子弟啊。
  • 打赏
  • 举报
回复
DATE1 DB 56H,“ABCD”   ;这里打不出来英文单引号

  DATE2 DW 1234H,“EF”

  CONT = DATA2-DATA1

DATE3 = DATA2+2
//你这么写语法是有问题的。
DATE1 DB 56H,“ABCD”
应该改成:DATE1 DB 56H,'A','B','C','D'
DATE2 DW 1234H,“EF”
应该改成:
DATE2 DW 1234H,4546H//45是"E",46是'F'这种把相关码值放在低位了,高位为0
当然也可以这样存:DATE2 DW 1234H,45460000H高位存码值,低位为0;

CONT = DATA2-DATA1//DATA2和DATA1分别是两个地址,相减的结果为56H,'A','B','C','D'占用的空间.即:5

  • 打赏
  • 举报
回复
DATE1 DB 56H,“ABCD”   ;这里打不出来英文单引号

  DATE2 DW 1234H,“EF”

  CONT = DATA2-DATA1

DATE3 = DATA2+2
//你这么写语法是有问题的。
DATE1 DB 56H,“ABCD”
应该改成:DATE1 DB 56H,'A','B','C','D'
DATE2 DW 1234H,“EF”
应该改成:DATE2 DW 1234H,“EF”
DATE2 DW 1234H,4546H//45是"E",46是'F'这种把相关码值放在低位了,高位为0
当然也可以这样存:DATE2 DW 1234H,45460000H高位存码值,低位为0;

CONT = DATA2-DATA1//DATA2和DATA1分别是两个地址,相减的结果为56H,'A','B','C','D'占用的空间.即:5


mustmust 2011-11-27
  • 打赏
  • 举报
回复
CONT 和 DATA3 的值到底是多少啊?
ariser 2011-11-27
  • 打赏
  • 举报
回复
初学汇编,不对之处,还望见谅,

定义成字节类型只是说每个字符占一个字节,而不是所有的字符就都放到一个字节里了.

建议debug看一下详细会比较好.

21,459

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧