繁体   English   中英

如何在汇编语言的新行上打印多个字符串

[英]how to print multiple strings on new line in the Assembly Language

我正在尝试在 Assembly 的不同行上打印多个字符串,但使用我的代码,它只会打印最后一个字符串。 我对汇编语言很陌生,所以请多多包涵

 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 ,第一行的效果就没有了!

如何打印多个字符串

Function eax=4将一些数据写入 memory 中,从某个地址开始,到某个设备的某个地址结束。

如果第二个字符串紧跟在 memory 中的第一个字符串之后,您可以将包含两个字符串的 memory 发送到设备。

例子:

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

这将从str1开始的 memory 内容的 32 个字节发送到设备。 str1开始的 32 个字节是字符串str1str2

如果要将 memory 的多个块发送到设备,可以使用writev()系统调用,即 function eax=146 (请参阅此链接)。

例子:

.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 位字组成。 第一个字是要写入设备的memory的地址; 第二个字是要写入的字节数。

上面的例子写着“你好,学习我喜欢编程”:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM