2014-11-27 1 views
1
mov edx,offset Prompt1  
call WriteString 

mov ecx,32  
mov edx,offset String1  
call ReadString 

Теперь, как мне получить доступ к String1? Как переместить его в регистр, чтобы я мог выполнять операции переключения на нем?Как использовать ReadString в Assembly?

Например,

mov eax, edx 
shr eax, 1 

Проблема, которую я имею, что я не могу понять, как получить доступ к String1. Кажется, он не входит в регистр eax, но если я позвоню WriteString, он появится, поэтому я считаю, что он находится в EDX.

ответ

1

Данные считываются в память, начиная с адреса String1. После последнего символа ввода есть нулевой байт (0).

Итак, если после вашего call ReadString вы пишете mov edx,offset String1, тогда EDX указывает на первый символ строки.

Затем вы можете обработать строку. Например, чтобы добавить 1 к каждому символу:

call ReadString 
    mov edx,offset String1 
theLoop: 
    mov al,[edx] 
    cmp al,0 
    jz done ; the character is 0, so done 
    inc al 
    mov [edx],al 
    inc edx ; next character 
    jmp theLoop 
done: 

Так, если вход был «0123abc», что бы изменить строку «1234bdc».

(для nitpickers: Да, я знаю, что это может быть оптимизировано. В частности, cmp al,0. Но для начинающих лучше подумать о сравнении ... мы можем работать над оптимизацией после того, как у них есть четкое понимание работы на уровень процессора.)

 Смежные вопросы

  • Нет связанных вопросов^_^