提问人:yoyo 提问时间:11/27/2018 最后编辑:Peter Cordesyoyo 更新时间:10/12/2023 访问量:390
在“汇编”中打印一个单词 10 次
Print a word 10 times in Assembly
问:
我需要在汇编中打印一个单词 10 次,但我在以前版本的问题中的代码只打印 1 次。
另外,如何删除空字节?
这是一个固定版本,如果内置到静态可执行文件中,则打印 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
答:
1赞
Zahraa Alqassab
10/11/2023
#1
我不知道我的答案是否会很有帮助,但我确实创建了一个运行 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
评论
ecx
不能两者兼而有之。10
msg
cl
是 的低 8 位。使用 或 .ecx
esi
edi
_start
-ENOSYS