assembly 在汇编中打印一个单词10次

hwazgwia  于 2023-10-19  发布在  其他
关注(0)|答案(1)|浏览(134)

我需要在汇编中打印一个单词10次,但在以前版本的问题中,我的代码只打印了1次。
如何删除null bytes?
这是一个固定的版本,如果内置在静态可执行文件中,则可以打印10次,因此EAX的高字节在此代码运行之前为零。

section .text
global _start       ;must be declared for using gcc
_start:                     ;tell linker entry point
mov si,10
l1:
mov dl, len    ;message length
mov ecx, msg    ;message to write
mov bl, 1       ;file descriptor (stdout)
mov al, 4       ;system call number (sys_write)
int 0x80        ;call kernel
dec si
JNZ l1         
mov al, 1       ;system call number (sys_exit)
int 0x80        ;call kernel

section .data

msg db  'test',0xa  ; string
len equ $ - msg         ;length of   string
dfty9e19

dfty9e191#

我不知道我的回答是否会很有帮助,但我确实创建了一个运行10次的循环,这与你的有点不同。这是Linux的64位代码,不像使用32位系统调用的问题。

global _start

section .text

_start:
    mov rbx, 10

loop:
    mov rax, 1
    mov rdi, 1
    mov rsi, msg
    mov rdx, msglen
    syscall
    dec rbx
    jnz loop
    
    mov rax, 60
    mov rdi, 0
    syscall

section .rodata
msg: db "Hello", 10
msglen: equ $ - msg

相关问题