汇编:更改字符串中的字符

时间:2014-11-26 04:15:50

标签: string assembly char

我尝试更改一串数字,例如&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个空格。 我不确定我是否打印错误,或者我是否错误地更改了字符串。

1 个答案:

答案 0 :(得分:-1)

使用destination indexrdi 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)。如果您仍然遇到困难,请发表评论。