为什么需要“string DB 20, 22 dup('?')”中的“20, 22”?

2023-12-10

我一直用 for 定义字符串DB 20, 22有一段时间不知道为什么:

我读到第一个字节是缓冲区大小,第二个字节保存字符串使用的字节数,但我不知道这两个值是否都是强制性的。例如,当我定义一个字符串并想要将寄存器指向它时,我必须使用 +2 来跳过这两个字符。

string DB 20, 22 dup('?')
lea si, string+2
lea si, [string] ; I think this is another alternative

这让我想知道如果我定义了没有它们的字符串我是否可以这样做lea si, string。这是可能的还是这两项都是强制性的?另外,当我想跳过一行并将光标移动到开头时,我会这样做DB 13, 10编译器如何知道 13 不是缓冲区大小,而 10 不是字符数?我可能在胡说八道,但对这些问题的任何澄清将不胜感激


如果你只想要一个字符串,那么只需定义它:

myString db 'hello, world'

然后你可以按照你所展示的那样解决它:

lea si, myString

但是,您要么需要知道字符串有多长,要么必须添加终止符,以便输出函数知道在哪里停止。如果您想要以 0 结尾的字符串,例如:

myString db 'hello, world', 0  ; don't forget that terminator

或者,您可以将长度放在字符串之前,这可能是您的长度20, 22 was:

myString db 12, 'hello, world'

1 个字节适用于最多 255 个字符的字符串。如果您需要处理比这更长的字符串,您可能需要标准化两个字节作为字符串长度。

无论您选择哪一个,您的输出函数都需要知道如何处理它。

顺便说一句,如果您想要长度前缀的字符串,则不应手动编码长度。让汇编器为您解决这个问题:

myString db myStringEnd - $
         db 'hello, world'
myStringEnd equ $
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么需要“string DB 20, 22 dup('?')”中的“20, 22”? 的相关文章

随机推荐

  • Linq连接iquery,如何使用defaultifempty

    我写了一个 linq 连接查询 如果其中一个为空 我想获取这些值 Code var Details UnitOfWork FlightDetails Query Join PassengersDetails x gt x Flightno
  • Angular CLI 不会创建新项目

    我正在尝试通过 Angular cli 创建一个项目 名为 ngadmin 但它会在此命令上引发错误 ng new ngadmin 错误是 fs 不支持重新评估本机模块源 如果你是 使用graceful fs模块 请将其更新到更新版本 版本
  • 将文本拆分为段落 NLTK - nltk.tokenize.texttiling 的用法?

    我正在寻找将文档分成段落的方法 我遇到了文本平铺作为一种可能的方法来做到这一点 这是我使用它的尝试 但是 我不明白如何处理输出 我很感激你的帮助 t unidecode doclist 0 decode utf 8 ignore nltk
  • 如何从数据库中随机检索问题?

    我有以下代码
  • 从 HTTP 切换到 HTTPS,失去了所有 Facebook“点赞”

    切换到 https 后 我们所有的文章都失去了 Facebook 的 点赞 计数 因此 我想仅对我们网站的内容区域禁用 https 该区域位于 content php 文章采用 content php 212 My Article 的形式
  • 检查自定义 Twig 函数是否存在,然后调用它

    我测试是否存在自定义 Twig 函数 if methodExist sg datatables render sg datatables render datatable else datatable render datatable en
  • Webview 的 loadData() 在 android 10.0 中不起作用(Q)

    这里我试图将 Html 代码作为字符串加载到 webview 中loadData 此方法没有发生任何事情 但相同的方法在低于 sdk 29 中像魅力一样工作 webview loadData html code text html null
  • Beam/Dataflow 中的批量 PCollection

    我在 GCP Dataflow Apache Beam 中有一个 PCollection 我不需要一一处理 而是需要 按N 组合 就像是grouped N 因此 在有界处理的情况下 它将按批次中的 10 个项目和最后一批中剩余的项目进行分组
  • Java + SSH + Postgres

    我们正在实施一个大学项目 Java 的拼车服务 我们需要解决一个与 如何管理 postgres 服务器 相关的问题 PostgreSQL 数据库配置在名为 golem 130 136 4 sth 的实验室服务器中 只能通过同一子网 130
  • 关于Scala变量可变性的问题

    我明白那个val关键字确定基础变量是不可变类型 以后不能重新分配 现在我在 scala 编程中遇到了一段 第 3 章 scala 中的后续步骤 用类型参数化数组 它指出 val greetStrings Array String new A
  • 等待光标并禁用 java 应用程序

    我想让用户按下按钮来启动后台线程 当线程正在处理时 我希望发生两件事 1 应显示 WAIT CURSOR 2 应用程序不应响应鼠标事件 根据setCursor 文档 当该组件的 contains 方法针对当前光标位置返回 true 时 将显
  • Swift:无法在某些闭包中分解元组(例如,通过枚举减少)?

    当使用map 和enumerate 时 Swift将分解枚举元组 map enumerate 1 2 3 index element in index element 然而 这似乎不能与额外的闭包参数一起使用 例如 使用reduce red
  • 相同的视图控制器加载两次

    我读过关于这个问题的几篇文章 但没有一个能解决我的问题 我正在编写一个应用程序 我必须单击一个按钮 准备 才能转到以下 ViewController 单击按钮时 它还会在两个视图控制器之间传递数据 问题是 当我单击按钮时 以下 ViewCo
  • ActionView 中的 Yield 魔法是如何发挥作用的?

    I was 看着content for 是如何工作的并观察到block call in the capture erb with buffer方法 它显然神奇地写入了缓冲区变量 然后该变量被修剪 但是 我认为这已被弃用 您可以致电现在 这是
  • 为什么RSA加密用C#和Java返回不同的结果?

    I using 时间 2019 03 17 标签 c RSACryptoServiceProvider JAVA KeyFactory getInstance RSA 密码 我将公钥 指数 模数 作为字节数组从java发送到c 没关系 有相
  • 如何在 dot net core 3.0/3.1 上的 razor 页面中添加区域?

    我想在 core 3 1 中添加区域剃刀页面 但微软文档是为了asp点网核心2 2 他们想要创建一个2020 年 1 月新报告 有人知道如何向核心 3 1 添加区域吗 我在谷歌上搜索了很多 但找不到答案 在 AdminLayout 中 a
  • 如何在SVN中存储配置参数?

    与许多项目一样 我们部署到许多环境 QA UA 开发人员主干等 在 SVN 中存储敏感配置参数的最佳方式是什么 或者 您不应该只在服务器上维护一个较小的未版本化文件 其中包含凭据吗 主要是 我们不想向每个开发人员公开生产凭据 我宁愿提供配置
  • Win10 Powershell - 简单的 If/Elseif 取决于条件顺序?

    我正在尝试编写一个部署脚本来检查操作系统主要版本 然后基于该版本运行命令 我可以抓住它就好 System Environment OSVersion Version Major 但是当我尝试在 if elseif 语句中使用它时 我总是得到
  • 高分辨率移动设备 1080px(Xperia Z 等)的媒体查询

    我正在尝试掌握不同设备的媒体查询 我尝试了我的新索尼 Xperia Z 手机 由于分辨率高 可以以全尺寸网站格式显示 如何添加媒体查询来重新调整网格大小和格式 如标准手机比例 在 Xperia 上 字体也太小而无法阅读 需要显示得更大 对于
  • 为什么需要“string DB 20, 22 dup('?')”中的“20, 22”?

    我一直用 for 定义字符串DB 20 22有一段时间不知道为什么 我读到第一个字节是缓冲区大小 第二个字节保存字符串使用的字节数 但我不知道这两个值是否都是强制性的 例如 当我定义一个字符串并想要将寄存器指向它时 我必须使用 2 来跳过这