汇编语言 db为什么后面可以加两个量,详见问题补充
adb53h,43hdb既然是字节类型,即占8位,那么也存不下53h,43h两个8位的数,可是为什么给出的答案是这个呢?如果你要定义53h,43h两个值不应该直接定义两个...
a db 53h,43h
db既然是字节类型,即占8位,那么也存不下53h,43h两个8位的数,可是为什么给出的答案是这个呢?如果你要定义53h,43h两个值不应该直接定义两个db类型的变量么 展开
db既然是字节类型,即占8位,那么也存不下53h,43h两个8位的数,可是为什么给出的答案是这个呢?如果你要定义53h,43h两个值不应该直接定义两个db类型的变量么 展开
5个回答
展开全部
DB定义的,是一个字节类型的指针,完全没有容量的概念, 不存在容量的限制,没有存不下的问题。
数据存储从指针所指向的地址开始往下分配,需要填多少数据都可以。(当然还有一个段的大小不能超过64KB的限制)
你的困惑,是你强行将高级语言中一个变量只能存一个数据、是一个数据容器的概念直接拿来套用造成的。这样的概念对于汇编语言来说是错误的。
如果你这样定义:
XY DB 05H, 43H, 21H, 32H
那么,内存中数据就这么分布
地址 数据
XY+0 05
XY+1 43
XY+2 21
XY+3 32
如果你改成这样定义:
XZ DW 4305H, 3221H
那么,内存中数据这么分布:
XZ+0 05
XZ+1 43
XZ+2 21
XZ+3 32
可以看出,这两种定义方式,数据在内存的分布是一模一样的。
区别仅仅是变量名的数据类型的属性不同。
如果你程序中这样用数据:
MOV AL, XY
MOV AH, XY+1
结果AX的内容变成4305H
与用指令 MOV AX, XZ 的结果也是一模一样。
在汇编语言中,并不需要为每个数据存储单元定义一个名字。
数据是可以直接按地址访问的。
实际上,经汇编程序翻译以后,和变量名就变成了直接按地址访问。
机器指令也只能按地址访问。
按地址访问数据时,需要明确数据类型。
定义一个名字,用名字代表具体的地址值(同时也隐含着数据类型), 是为了让汇编程序在汇编时,将指令中的变量名替换为地址,减少编程者的人工工作量,便于编写程序。
数据存储从指针所指向的地址开始往下分配,需要填多少数据都可以。(当然还有一个段的大小不能超过64KB的限制)
你的困惑,是你强行将高级语言中一个变量只能存一个数据、是一个数据容器的概念直接拿来套用造成的。这样的概念对于汇编语言来说是错误的。
如果你这样定义:
XY DB 05H, 43H, 21H, 32H
那么,内存中数据就这么分布
地址 数据
XY+0 05
XY+1 43
XY+2 21
XY+3 32
如果你改成这样定义:
XZ DW 4305H, 3221H
那么,内存中数据这么分布:
XZ+0 05
XZ+1 43
XZ+2 21
XZ+3 32
可以看出,这两种定义方式,数据在内存的分布是一模一样的。
区别仅仅是变量名的数据类型的属性不同。
如果你程序中这样用数据:
MOV AL, XY
MOV AH, XY+1
结果AX的内容变成4305H
与用指令 MOV AX, XZ 的结果也是一模一样。
在汇编语言中,并不需要为每个数据存储单元定义一个名字。
数据是可以直接按地址访问的。
实际上,经汇编程序翻译以后,和变量名就变成了直接按地址访问。
机器指令也只能按地址访问。
按地址访问数据时,需要明确数据类型。
定义一个名字,用名字代表具体的地址值(同时也隐含着数据类型), 是为了让汇编程序在汇编时,将指令中的变量名替换为地址,减少编程者的人工工作量,便于编写程序。
展开全部
DB 定义,要这样理解:
它定义的,是一个指针,而不是容器。
也就是说,它指向的是一个特定类型数据区的开始地址。
它的数据部分可以使用多个数据项的列表。
它的定义没有限定数据的空间大小和数量。
比如,XY DB ?, ?, ? 这里的XY,具有三个属性:段属性提交修改说明它在程序中的哪一个段里,类型属性说明它指向的单元的数据类型是字节还是字,偏移属性说明它的偏移地址值。
它定义的,是一个指针,而不是容器。
也就是说,它指向的是一个特定类型数据区的开始地址。
它的数据部分可以使用多个数据项的列表。
它的定义没有限定数据的空间大小和数量。
比如,XY DB ?, ?, ? 这里的XY,具有三个属性:段属性提交修改说明它在程序中的哪一个段里,类型属性说明它指向的单元的数据类型是字节还是字,偏移属性说明它的偏移地址值。
追问
没有听明白,db既然指向的是8字节,那么也存不下上面两个数据, 按照楼下说的是他是一个数组,那我可以 db 05h,43h,21h,32h么,dw也可以这么做么 dw 4126h,4567h
追答
========
对你追问的回复:
========
DB定义的,是一个字节类型的指针,完全没有容量的概念, 不存在容量的限制,没有存不下的问题。
数据存储从指针所指向的地址开始往下分配,需要填多少数据都可以。(当然还有一个段的大小不能超过64KB的限制)
你的困惑,是你强行将高级语言中一个变量只能存一个数据、是一个数据容器的概念直接拿来套用造成的。这样的概念对于汇编语言来说是错误的。
如果你这样定义:
XY DB 05H, 43H, 21H, 32H
那么,内存中数据就这么分布
地址 数据
XY+0 05
XY+1 43
XY+2 21
XY+3 32
如果你改成这样定义:
XZ DW 4305H, 3221H
那么,内存中数据这么分布:
XZ+0 05
XZ+1 43
XZ+2 21
XZ+3 32
可以看出,这两种定义方式,数据在内存的分布是一模一样的。
区别仅仅是变量名的数据类型的属性不同。
如果你程序中这样用数据:
MOV AL, XY
MOV AH, XY+1
结果AX的内容变成4305H
与用指令 MOV AX, XZ 的结果也是一模一样。
===========
对你问题的补充的回复:
===========
在汇编语言中,并不需要为每个数据存储单元定义一个名字。
数据是可以直接按地址访问的。
实际上,经汇编程序翻译以后,和变量名就变成了直接按地址访问。
机器指令也只能按地址访问。
按地址访问数据时,需要明确数据类型。
定义一个名字,用名字代表具体的地址值(同时也隐含着数据类型), 是为了让汇编程序在汇编时,将指令中的变量名替换为地址,减少编程者的人工工作量,便于编写程序。
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
哈我用C语言描述给你吧,
a db 53h,43h相当于 char a[2]; a[0]=0x53,a[1]=0x43
汇编中定义一串数值或字符串就是这样的,比方说定义一串字符可以如下
a db 'UNIX'而不用
db 'U'
db 'N'
db 'I'
db 'X'
因为上述写法很麻烦,编译器会将 a db 'UNIX'转换成我们所需要的方式。
a db 53h,43h相当于 char a[2]; a[0]=0x53,a[1]=0x43
汇编中定义一串数值或字符串就是这样的,比方说定义一串字符可以如下
a db 'UNIX'而不用
db 'U'
db 'N'
db 'I'
db 'X'
因为上述写法很麻烦,编译器会将 a db 'UNIX'转换成我们所需要的方式。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这相当于c语言中的字符串或数组啊!
追问
那对应dw有相当于c语言中的什么呢
追答
db 是定义字节型的变量的
dw是定义word型变量的,或者说双字节的,相当于C语言中的int或unsigned int型变量了。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询