我尝试更改一串数字,例如&00; 00000000 $',然后将字符串打印到文件中。
例如,当我使用这样的东西时:
nr db '00000000$'
asdf PROC near
mov bx, offset nr
add bx, 7
mov [bx], '0'
dec bx
mov [bx], '4'
dec bx
mov [bx], '0'
dec bx
mov [bx], '3'
dec bx
mov [bx], '0'
dec bx
mov [bx], '2'
dec bx
mov [bx], '0'
dec bx
mov [bx], '1'
ret
asdf ENDP
然后将其打印到文件:
mov bx, FHandle
mov cx, 8
mov ah, 40h
int 21h
我收到的文件是' 2'之后印有7个空格。 我不确定我是否打印错误,或者我是否错误地更改了字符串。
答案 0 :(得分:-1)
使用destination index
(rdi
x86_64,edi
x86)将字符值写入变量。它可以通过多种不同方式完成,但这很简单。以下内容将1's
更改为0's
,并将空格更改为0
。 (仅限于那些,将循环计数器rcx
更改为8
:
section .data
dnln db 0xa,0xa
bfield db '11111111 '
section .bss
section .text
global _start
_start:
mov rdi, bfield ; put address of bfield in rdi
mov cx, 9 ; set loop counter to 9
_fill: ; loop label for fill
mov [rdi], byte '0' ; move '0' into address
inc rdi ; increment address
loop _fill ; loop
mov rax, 1 ; print bfield
mov rdi, 1
mov rsi, bfield
mov rdx, 9
syscall
mov rax, 1 ; print 2 newlines
mov rdi, 1
mov rsi, dnln
mov rdx, 2
syscall
exit:
xor rdi, rdi
mov rax, 0x3c
syscall
<强>建立/链接:强>
nasm -f elf64 -o zero_64.o zero_64.asm
ld -o ./bin/zero_64 zero_64.o
<强>输出:强>
$./bin/zero_64
000000000
注意:这回答了最初发布的问题。虽然写入文件不是原始问题的一部分,但您只需使用__NR_creat
调用(85
x86_64或8
x86)创建一个文件,并返回文件描述符(rax) / EAX)。如果您仍然遇到困难,请发表评论。