在汇编语言中,使用DB(Define Byte)指令来为一个或多个字节的数据分配内存空间,该指令后面紧跟着的是需要存储的字节数据。在输入字符串时,可以使用DB指令来定义一个字符数组,并在程序中循环读取输入字符,直到读到回车符为止。
当需要遍历字符串时,可以使用MOV指令将字符数组的起始地址存储到CL寄存器中,然后使用循环指令(如LOOP)逐个读取字符并处理。CL寄存器是一个8位的寄存器,可以存储0-255的整数,因此可以通过MOV指令将一个字节(即一个字符)的地址存储到CL中,然后使用LOOP指令对CL寄存器的值进行递减 *** 作,直到CL寄存器的值为0,循环结束。这样可以遍历整个字符串,无需知道字符个数。
db
是define
byte的简写,就是定义一个字节的意思。
“假设op1,op2是已经用db定义的变量”也就是说定义两个字节变量,变量名为op1和op2。
dataseg
segment
aa
db
bb
db
cc
db
dataseg
ends
-------------------------
上面的db又是什么意思?问号呢?
定义的数据段,段名为dataseg,在该代码段中有三个字节变量,名称分别是aa,bb,cc,而且每个变量都没有赋值。也就是空的。?的意思就是说定义的变量所在的内存单元没有赋值,预留一个内存单元的空间。
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 的结果也是一模一样。
在汇编语言中,并不需要为每个数据存储单元定义一个名字。
数据是可以直接按地址访问的。
实际上,经汇编程序翻译以后,和变量名就变成了直接按地址访问。
机器指令也只能按地址访问。
按地址访问数据时,需要明确数据类型。
定义一个名字,用名字代表具体的地址值(同时也隐含着数据类型), 是为了让汇编程序在汇编时,将指令中的变量名替换为地址,减少编程者的人工工作量,便于编写程序。
以上就是关于汇编语言 输入字符串,不知道字符个数所以定义了DB ,但后来直接把mov到cl里循环,为什么可以这样呢全部的内容,包括:汇编语言 输入字符串,不知道字符个数所以定义了DB ,但后来直接把mov到cl里循环,为什么可以这样呢、汇编中db表示什么,如何用、汇编语言 db为什么后面可以加两个量,详见问题补充等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)