汇编语言 输入字符串,不知道字符个数所以定义了DB ,但后来直接把mov到cl里循环,为什么可以这样呢

汇编语言 输入字符串,不知道字符个数所以定义了DB ,但后来直接把mov到cl里循环,为什么可以这样呢,第1张

在汇编语言中,使用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为什么后面可以加两个量,详见问题补充等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9821154.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-02
下一篇 2023-05-02

发表评论

登录后才能评论

评论列表(0条)

保存