Переставить слова, поменяв местами первое слово с последним, второе с предпоследним - Assembler
Формулировка задачи:
Прошу помощи с задачей. Эмулятор i8086
Задана строка из буквенных символов, разделенных на слова одним или несколькими пробелами. Удалить лишние пробелы в строке и переставить слова, поменяв местами первое слово с последним, второе с предпоследним и т.д.
Вот код. Он вроде бы рабочий, но упростить бы хотелось
data segment in_str db 80,?,82 dup (?) out_str db 80 dup (?) enter db 0dh, 0ah, '$' data ends code segment assume cs: code, ds: data start: mov ax, data mov ds, ax mov ah, 0ah int 21h lea bx, in_str+2 xor cx, cx mov cl, in_str+1 dec cx add bx, cx ; чтение с конца строки xor ax, ax inc cx beg: mov dh, cl ; запомним cl через dh mov al, [bx] cmp al, ' ' ; сравнение al с пробелом jne m ; если не равно то на m s: mov cl, dl ; присвоить счетчик dl в cl beg1: pop ax mov out_str[si], al inc si loop beg1 mov out_str[si], ' ' ; прибавление пробела после перестановки inc si mov dl, 0 ; обнуление счетчика cmp dl, 0 je n m: inc dl ; счетчик числа элементов до пробела push ax cmp dh, 1 ; если конец строки то на s je s n: dec bx mov cl, dh ; то что запомнили в dh обратно в cl loop beg xor dx, dx lea dx, enter mov ah, 09h int 21h lea dx, out_str mov ah, 09h int 21h mov ah, 0ah int 21h quit: mov ax, 4c00h int 21h code ends end start
Решение задачи: «Переставить слова, поменяв местами первое слово с последним, второе с предпоследним»
textual
Листинг программы
mov dl, 0 ; обнуление счетчика jmp n
Объяснение кода листинга программы
- Устанавливается значение переменной
dl
в 0 с помощью инструкцииmov dl, 0
. В данном случае, регистр dl используется как счетчик. - Программа осуществляет переход на метку
n
с помощью инструкции безусловного переходаjmp n
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д