如何在汇编语言中换行打印多个字符串

2024-05-05

我试图在汇编中的不同行上打印多个字符串,但使用我的代码,它只打印最后一个字符串。我对汇编语言非常陌生,所以请耐心等待

 section .text             
                           
 global _start             
 _start:                    
  mov edx, len              
  mov edx, len1             
  mov edx, len2             
  mov edx, len3             
  mov ecx, msg              
  mov ecx, str1             
  mov ecx, str2             
  mov ecx, str3             
  mov ebx, 1                
  mov eax, 4                
  int 0x80                  
  mov eax, 1                
  int 0x80                  

   
  section .data             


 msg  db 'Hello, world!',0xa                       
 str1 db 'Learning is fun!',0xa 
 str2 db 'I love beacon!',0xa         
 str3 db 'I love programming',0xa                      
 len1 equ $ - str1           
 len2 equ $ - str2           
 len3 equ $ - str3           
 len  equ $ - msg            

它只打印出我喜欢编程。

它应该打印

 Hello World!
 Learning is fun!
 I love beacon!
 I love programming

mov edx, len              
mov edx, len1             

你能指望什么?

您正在覆盖寄存器edx.

这就像其他编程语言中的以下代码一样:

variableEdx = len;
variableEdx = len1;

第二行将覆盖变量variableEdx第一行的效果就会消失!

如何打印多个字符串

功能eax=4将内存中从某个地址开始到某个设备的某个地址结束的一些数据写入。

如果第二个字符串紧随内存中的第一个字符串,则可以将包含两个字符串的内存发送到设备。

Example:

...
mov edx, str1
mov ecx, 32
...

这将发送 32 个字节的内存内容,从str1到设备。 32 字节开始于str1是字符串str1 and str2.

如果您想将多个内存块发送到设备,您可以使用writev()系统调用,即函数eax=146, 反而。 (看这个链接 https://www.man7.org/linux/man-pages/man2/writev.2.html).

Example:

.text
.globl _start

_start:
    mov edx, 3
    mov ecx, offset list
    mov ebx, 1
    mov eax, 146
    int 0x80
    mov eax, 1
    int 0x80

.data

list:
    .long msg
    .long 7
    .long str1
    .long 8
    .long str3
    .long 19

    ...

不幸的是,我使用的汇编器的语法与你的略有不同;然而,在你的大会上list部分可能看起来像这样:

list dd msg
     dd 7
     dd str1
     ...

writev(函数146)获取一个指向某个“列表”的指针ecx寄存器和列表中的条目数edx登记。

列表中的每个条目由两个 32 位字组成。第一个字是要写入设备的存储器的地址;第二个字是要写入的字节数。

上面的例子写的是“你好,Learing 我喜欢编程":

“msg”的前 7 个字节,然后是“str1”的前 8 个字节,然后是“str3”的所有 19 个字节。

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

如何在汇编语言中换行打印多个字符串 的相关文章

随机推荐

  • 三次贝塞尔曲线逆 GetPoint 方程:float for Vector <=> Vector for float

    给定结果值和四个点是否可以取回 float t 如果是这样 怎么办 public static Vector3 GetPoint Vector3 p0 Vector3 p1 Vector3 p2 Vector3 p3 float t t M
  • 如何在代码中访问 DataGridCell 的数据对象?

    基本上 我已经绑定了数据网格 使其类似于科目时间表 每行代表一个学期的科目 该学期内的每个单元格代表一个科目 我现在尝试添加拖放功能 以便您可以将其他主题拖到网格上 这将更新底层数据结构 我可以使用一些可视化树方法来查找用户将新主题拖动到的
  • 为什么要使用 Python 进行函数式编程?

    在工作中 我们过去常常以非常标准的面向对象方式来编写 Python 程序 最近 有几个人加入了功能性潮流 他们的代码现在包含更多的 lambda map 和reduce 我知道函数式语言有利于并发性 但是函数式 Python 编程真的有助于
  • 缩小并捆绑 NodeJS 项目

    没有找到关于这个主题的太多信息 是否有任何工具 gulp 用于缩小和捆绑nodejs服务器项目 包括其node module依赖项 我遇到了无法运行的情况npm install在生产机器上 我的 可执行 大小限制为最大 20 MB 你应该看
  • 如何使用requirements.txt 在 Heroku python Web 应用程序中安装 Dlib?

    我构建了一个涉及机器学习的 Python Flask Web API 但在 Heroku 上部署它时遇到了很多挫折 问题是 我的应用程序依赖于 Dlib 一个库 我似乎找不到在我的 Heroku 服务器中安装的方法 我正在试图解决这个问题
  • Kafka Java 消费者从未收到任何消息

    我正在尝试设置一个基本的 Java 消费者来接收来自 Kafka 主题的消息 我已经跟踪了样本 https cwiki apache org confluence display KAFKA Consumer Group Example h
  • async-await 如何“节省线程”?

    我知道使用无线程异步有更多线程可用于服务输入 例如 HTTP 请求 但我不明白当异步操作完成并且需要一个线程来运行它们时 这如何不会潜在地导致线程饥饿继续 假设我们只有 3 个线程 Thread 1 Thread 2 Thread 3 并且
  • 如何在 Github 包中添加我的 Android 库的依赖项?

    我正在构建一个 Android 库 比如说 MyLibrary 这将被添加到我公司的其他应用程序中 该库有一些依赖项build gradle像这样的文件 dependencies implementation com alimuzaffar
  • serverless-webpack 找不到模块“./node/NodeTemplatePlugin”

    我正在尝试使用无服务器 webpack 插件 https github com elastic coders serverless webpack 虽然单独运行 webpack 工作得很好 但尝试运行 serverless webpack
  • 是否可以从 VS2010 插件刷新 WCF 服务引用?

    我想在 VS2010 插件中 模拟 右键单击 更新服务引用命令 我有一个对包含 Silverlight 项目的引用 我知道服务引用的名称和服务的 url 我发现了这个 http dedjo blogspot com 2007 03 addi
  • Z3 Java API 定义函数

    我需要您帮助使用 Z3 Java API 定义函数 我尝试解决这样的问题 与 z3 exe 进程一起工作正常 declare fun a Real declare fun b Real declare fun c Bool define f
  • 如何计算第一和第三四分位数?

    我有数据框 time diff avg trips 0 0 450000 1 0 1 0 483333 1 0 2 0 500000 1 0 3 0 516667 1 0 4 0 533333 2 0 我想获得该列的第一个四分位数 第三个四
  • Mysql 按特定字符串排序

    我似乎找不到这个问题的答案 假设我有一个像这样的表 ID Name 1 AAAAAAAAA 2 ABAAAAAAA 3 BBAAAAAAA 4 CDAAAAAAA 5 BBAAAAAAA 有什么办法可以通过以下方式订购name 但是 从说开
  • 由于屏幕方向变化而调整大小后,如何获取元素的新尺寸?

    我正在开发一个移动网络应用程序 在我的页面中我有一个div元素的宽度设置为 100 我需要设置这个的高度div以便高度对于设定的纵横比是正确的 例如 如果屏幕尺寸为 300 像素宽且比例为 3 2 我的脚本应该获取屏幕的宽度div 此时应为
  • 使用 sunspot/solr 搜索多个模型

    我已经能够成功地实现基本的全文搜索 但是当我尝试使用范围 with statements 时 任何涉及多对多关系模型的查询似乎都不适合我 我知道相关行位于数据库中 因为我的 sql 语句确实返回了数据 然而 太阳黑子查询不会返回任何结果 我
  • 从节点服务器上的 AWS S3 获取签名 URL

    Solved 我想得到一个签名网址从我的亚马逊S3服务器 我是新来的AWS 我在哪里设置我的密钥 and 访问 ID 密钥以便S3识别来自我的请求server var express require express var app expr
  • “-webkit-text-fill-color”和“颜色”之间的区别?

    我试图理解之间的区别 webkit text fill color只是简单地color 功能上有什么区别吗 据我所知 它们是完全相同的 有什么事情你可以用其中一个来做 而另一个却不能做吗 来自WebKit 博客 http www webki
  • 如何在 jQuery 中检测水平滚动?

    如何使用 jQuery 检测水平滚动 这将获得所有卷轴 window scroll function alert in 我只想要水平的 这似乎有效 var lastScrollLeft 0 window scroll function va
  • 在另一个模块中扩展 Ruby 模块,包括模块方法

    每当我尝试扩展 ruby 模块时 我都会丢失模块方法 include 和extend 都不会执行此操作 考虑一下片段 module A def self say hi puts hi end end module B include A e
  • 如何在汇编语言中换行打印多个字符串

    我试图在汇编中的不同行上打印多个字符串 但使用我的代码 它只打印最后一个字符串 我对汇编语言非常陌生 所以请耐心等待 section text global start start mov edx len mov edx len1 mov