Разбиение строки на подстроки - Assembler

Узнай цену своей работы

Формулировка задачи:

Собственно пользователь вводит строку с консоли, программа по нахождению "пробела" перенесёт след. за ним слово на новую строку.
STACKSG SEGMENT PARA STACK 'stack'
 
DB 64 DUP(?)
 
STACKSG ENDS
 
DATASG SEGMENT PARA 'DATA'
OctMsg db 'Rez = $'
CRLF db 0Dh,0Ah,'$'
BinBuf db 25,?  ; буфер для ввода до 16 символов
Bin db 25 dup (?)  
DATASG ENDS
 
CODESG SEGMENT PARA 'CODE'
ASSUME CS:CODESG,DS:DATASG,SS:STACKSG
ENTRY PROC FAR
PUSH DS
POP ES; инициализация ES
SUB AX,AX
PUSH AX
MOV AX,DATASG
MOV DS,AX
 
  mov ah,0Ah
  mov dx,offset BinBuf
  int 21h ; ввод данных с клавиатуры
  
  mov ah,9
  mov dx,offset CRLF
  int 21h  ; переходим на новую строку
 
  mov cl,[BinBuf+1]
  xor ch,ch  ; cx = длина строки
  
  mov di,offset Bin       ; ES:DI -> str 
  cld                  ; прямой порядок чтения данных
  mov al,' '          ;занесли пробел
  
M1:
  repne scasb    ;повторяем пока не равны 
  ;jne M2          ;Переход, если не нашли
  ;
  ;
  ;

RET
ENTRY ENDP
CODESG ENDS
END ENTRY
Собственно с дальнейшими действиями проблема. Как переносить на новую строку (в цикле M1 пересылать offset CRLF)? И как стоит выводить это в консоль потом?

Решение задачи: «Разбиение строки на подстроки»

textual
Листинг программы
.model small
.386
 
.data
clrf db 0Dh,0Ah,'$'
msg db 50,0,50 dup(?)
 
.stack
db 255 dup(?)
 
.code
start:
mov ax,@data
mov ds,ax
mov es,ax
 
mov ah,0Ah
lea dx,msg
int 21h
 
mov ah,09h
lea dx,clrf
int 21h
 
lea di,msg+2
xor ch,ch
mov cl,byte ptr msg+1
mov al,' '
search:
scasb
jne skip
 
push ax
 
mov ah,09h
lea dx,clrf
int 21h
 
pop ax
 
jmp next
 
skip:
push ax
 
mov ah,02h
mov dl,byte ptr [di-1]
int 21h
 
pop ax
 
next:
loop search
 
mov ah,4Ch
mov al,00h
int 21h
end start

Оцени полезность:

10   голосов , оценка 4.3 из 5