rstJkee
@rstJkee

NASM посимвольное добавление в строку?

В стеке находится посимвольно разложенная строка (a, b, c, d, e - не важно где верх, где низ, абстрагируемся). Как можно посимвольно вынимая из стека символы добавлять в общую строку? Чтобы по итогу получилась строка abcde или edcba

Компилятор NASM

Изначальный код
%include "io.inc"

section .data
    string db '12345', 0
    len dw $-string
    str2 db ''
    counter dw 2
    
section .text
    global CMAIN
CMAIN:
    mov ebp, esp; for correct debugging
    mov cx, 1
    mov esi, string
    cld
    ;PRINT_STRING string
    ;mov ah, [string+1]
    ;mov byte[str2], ah
    ;PRINT_DEC 2, len
    PRINT_STRING 'Push to stack'
    NEWLINE
    jmp start
start:
    lodsb
    mov byte[str2], al
    PRINT_STRING str2
    push word[str2]
    cmp cx, word[len]
    je middle
    inc cx
    jmp start
middle:
    NEWLINE
    xor cx, cx 
    mov cx, 0
    sub word[len], 1
    jmp add_to_str
add_to_str: 
    pop ax
    ;mov eax, str2
    ;mov [str2 + cx], ax
    mov word[str2], ax
    PRINT_STRING str2
    cmp cx, word[len]
    je end
    inc cx
    jmp add_to_str
end:
    NEWLINE
    PRINT_STRING 'END'
    ret


В метке add_to_str должна происходить эта магия
  • Вопрос задан
  • 206 просмотров
Пригласить эксперта
Ответы на вопрос 1
@User700
Наподобие такого. В цикле до доставания нулевого символа (например)
str_len dd 0  ; текущая длина
...
str .rb 1024
...
mov edi, str
add edi, [str_len]
rep:
pop eax
test al, al
jz ext
mov [edi], al
inc edi
jmp rep
ext:
sub edi, str
mov [str_len], edi

Но зачем это нужно? (Если это не конечная задача)
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы