汇编指令中 db 00 什么意思啊

在od中经常看到 db 00,网上说是对齐区段,那对齐区段有什么用,db 00的作用到底是什么,谢谢

楼主说的“od”,我不懂。应该是个什么全称的缩写吧,且不去管它。

别的版本的汇编语言,我也不知道,只知道一点Intel 8086/8088的汇编语言。

关于对齐区段,有这么几个伪指令,称作:调整偏移量伪指令。

1、偶对齐伪指令EVEN
偶对齐伪指令格式:
EVEN
伪指令的作用是:告诉汇编程序(Assember),本伪指令下面的内存变量从下一个偶地址单元开始分配。
如果下一个偏移量是偶地址,那么,该伪指令不起作用,否则,汇编程序将空出一个字节,从下一偶地址开始为其后变量分配内存单元。
假设有下列变量定义,并且变量B1的偏移量是偶数,其内存单元分布如图4.2所示。
B1 DB 12H ;为了表示方便,不妨再假设其偏移量为:xxxx0H
W1 DW 4567H
在上述定义情况下,在许多微机系统中,当需要读变量W1及其后面的字内容时,硬件将按图4.3所示的方式分二次读出该字内容,再拼接成一个字内容,这时,无疑需要二个读内存周期,从而影响程序执行的速度。
出现上述问题的主要原因就是字变量W1在数据段内的偏移量是奇数,为了保证其偏移量是偶数,需要在其定义之前加上伪指令EVEN。
所以,可把前面的变量定义改变成下列形式:
B1 DB 12H
EVEN
W1 DW 4567H

2、对齐伪指令ALIGN
对齐伪指令格式:
ALIGN Num
其中:Num必须是2的幂,如:2、4、8和16等。
伪指令的作用是:告诉汇编程序,本伪指令下面的内存变量必须从下一个能被Num整除的地址开始分配。
如果下一个地址正好能被Num整除,那么,该伪指令不起作用,否则,汇编程序将空出若干个字节,直到下一个地址能被Num整除为止。
试比较下面二组变量定义,它们的对齐效果一致吗?
B1
DB 12H B1 DB 12H
EVEN ALIGN 2
W1
DW 4567H W1 DW 4567H
从上面的对比,我们不难看出:伪指令ALIGN的说明功能要比伪指令EVEN强。

3、调整偏移量伪指令ORG
调整偏移量伪指令格式:
ORG 数值表达式
伪指令的作用是:告诉汇编程序,本伪指令下面的内存变量从该“数值表达式”所指定的地址开始分配。
假设有下列变量定义,并且变量word1的偏移量为0。
word1
DW 1234h
byte1 DB 56h
word2 DW 0abcdh
ORG 1
byte2 DB ?
word3 DW ?
byte3 DB ? 图4.5 内存变量分配示意图
前三个变量定义的内存分布如图4.5的左边所示,但由于伪指令“ORG 1”的作用,说明其后面所说明的变量要从偏移量为“1”的内存单元开始存放。
这些变量的内存分配是相互重叠的,对某个变量的操作无疑会影响到与之重叠的变量。
另外,变量byte2、word3和byte3没有赋初值,如果赋初值的话,则重叠部分的内存单元的原来初值将被覆盖掉。

在以上三个伪指令EVEN、ALIGN和ORG中,伪指令EVEN的使用频率较高。
温馨提示:内容为网友见解,仅供参考
第1个回答  2009-05-09
CPU存取内存中的字型(两个字节)数据的时候如果这个地址正好是偶数(如果是386的处理器的话应该是4的倍数,也就是一个双字)的话,存取的速度最快,想想看,如果前面若干个数据的字节数之和如果是奇数(内存中的数据也有字节型的,所以可能产生数据的字节数和为奇数的情况.字节型的数据占用一个字节,对不对齐对存取的速度没影响)的话,那么如果再定义字型数据的话,就不能保证这个数据地址是偶数了,但如果加上一个字节的话,地址就又是偶数了
解决这个问题最好的方法是先定义双字的数据,然后是字,最后是字节和字串的数据,这样就不用考虑对齐的问题了

PS(不知道你对内存了解多少,所以写这些):一个内存单元对应一个内存的地址,一个内存单元能存储一个字节的数据,多于一个字节的数据是通过相邻的几个内存单元来存储的,这个多于一个字节的数据的地址是这几个内存单元中的第一个内存单元的地址

好像高级的CPU没有这个对齐的问题了,好像在别的地方看过本回答被提问者采纳

汇编指令中 db 00 什么意思啊
CPU存取内存中的字型(两个字节)数据的时候如果这个地址正好是偶数(如果是386的处理器的话应该是4的倍数,也就是一个双字)的话,存取的速度最快,想想看,如果前面若干个数据的字节数之和如果是奇数(内存中的数据也有字节型的,所以可能产生数据的字节数和为奇数的情况.字节型的数据占用一个字节,对不对齐...

单片机汇编中DB指令起什么作用?
DB 就是从当前地址开始,之后开始存放DB后面的字节数据。DB 02,00,00 就是从当前地址开始依次存放 02H,00H,00H

汇编里的定义数据库时 DB 0DBH,00H,0,1 是什么意思
DB一般在汇编中表示表格,表里的数是0DBH,00H,0,1。 0DBH、00H是十六进制的DB和0,0和1是十进制数0 ,1

汇编语言中DB是什么意思?
DB作为汇编语言中的伪操作命令,它用来定义操作数占用的字节数。表达式中可包含符号、字符串、或表达式等项,各个项之间用逗号隔开,字符串应用引号括起来。括号内的标号是可选项,如果使用了标号。DB的作用:在这里B是byte的缩写,即字节,所以,该伪操作所定义的每个操作数占有1个字节(8位)。如:1M...

单片机编写音乐程序中DB表示什么意思? 这些数字是什么意思?急急急...
DB是单片机汇编语言中的指令 DB 指令以表达式的值的字节形式初始化代码空间。格式: [标号:] DB 表达式表 表达式中可包含符号、字符串、或表达式等项,各个项之间用逗号隔开,字符串应用引号括起来。括号内的标号是可选项,如果使用了标号,则标号的值将是表达式表中第一字节的地址。DB 指令必须...

汇编的tab db 00000001b是什么意思
tab db 00000001b是什么意思 DB,定义字节。TAB,是这个字节的名称。00...1B,是这个字节的内容。

汇编指令解释
3.direct 表示8位的地址 00H~FFH 4.@Ri 表示寄存器间接寻址 只能是R0或者R1 5.@DPTR 表示数据指针间接寻址 6.bit 表示位地址 7.$ 表示当前地址 寄存器寻址 MOV A,R1 将R1中的数值赋予A 直接寻址 MOV A,3AH 将地址3AH中的数值赋予A 立即寻址 MOV A,#3AH 将3AH数值赋予A 寄存器间址 ...

汇编语言中DB3DUP(0)是什么意思
DB 是声明字节 后面的3表示数量 dup(0)是 0x00 执行后 00 00 00 3个0X00数据空间

汇编语言db 'hello',0中的0是什么意思?
所以C语言就规定以 0(或者'\\0' 本质上就是数字0)来表示一个字符串的结尾,这样就可以用一个基本数据类型去表示一个字符串了,字符串处理函数 strcat这些都是以这个0做为字符串结尾判定标致的,当然这个规则也被用在了汇编中(因为现在的汇编都要尽量与上层兼容,早期DOS时代的结束符是美元号$)。

单片机的DB命令使用
DB是伪指令,定义字节命令,貌似用在数据表的比较多,你那个应该这样写 ORG 0060H TABLE:DB 00H,01H,02H,03H,04H,05H,06H,07H,08H,09H 后面的00h-00h是你想要赋的值

相似回答