В заданой строке с нулевым завершителем поменять символы каждой пары местами - Assembler
Формулировка задачи:
Помогите исправить код или составить алгоритм.
Этот выдает ошибки.
.386 .model flat,stdcall .data string db "0123456789abcdefghjrowommfwmf",0 .code start: lea esi,string mov ecx,0ffffffffh lop: lodsw ;получаем два символа строки (два байта) приэтом esi увеличивается на 2 cmp ax,0 ; проверяем конец строки.. . если ноль закругляемся.. . je FINISH ror ax,8 ;меняем местами mov ds:[esi-2],ax : записываем обратно loop lop ; повтор FINISH: ret end start
Решение задачи: «В заданой строке с нулевым завершителем поменять символы каждой пары местами»
textual
Листинг программы
;MASM STR_SZ = 256 .586 .model flat, stdcall option casemap :none ; case sensitive include \masm32\include\windows.inc include \masm32\include\masm32.inc include \masm32\include\msvcrt.inc include \masm32\macros\macros.asm includelib \masm32\lib\masm32.lib includelib \masm32\lib\msvcrt.lib .data req db 'Enter string[256]:',0 res db 'Res: %s',0 tps db '%s',0 .data? pstr dd ? psub dd ? .code start: invoke crt_malloc, STR_SZ ; память под строку mov [pstr], eax mov esi, eax ; сразу "ложим" в ESI invoke crt_malloc, STR_SZ ; память под буффер mov [psub], eax mov edi, eax ; сразу "ложим" в EDI invoke crt_printf, ADDR tps, ADDR req ; запрос invoke crt_gets, [pstr] ; ввод строки invoke crt_strlen, [pstr] ; вычисляем длину xor ebp, ebp ; обнуляем флаг sar eax,1 ; длина строки/пополам adc ebp,0 ; если длина нечётная, то EBP=1 mov ecx,eax ; счётчик @@: lodsw ; грузим 2 байта xchg al,ah ; меняем местами stosw ; сохраняем loop @B ; ECX раз or ebp,ebp ;; если длина нечётная, то... jz @F ; чётная, пропускаем lodsb ;; ... дописываем последний байт stosb ;; @@: xor al,al ; завершающий... stosb ;... нолик invoke crt_printf, ADDR res, [psub] ; выводим результат invoke crt__getch ; press <ANY KEY> invoke crt_free,[pstr] ;; освобождаем invoke crt_free,[psub] ;; память invoke crt_exit,0 ; финита ля трагедиа end start
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д