Разбиение строки на подстроки - Assembler
Формулировка задачи:
Собственно пользователь вводит строку с консоли, программа по нахождению "пробела" перенесёт след. за ним слово на новую строку.
Собственно с дальнейшими действиями проблема. Как переносить на новую строку (в цикле M1 пересылать offset CRLF)?
И как стоит выводить это в консоль потом?
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
Решение задачи: «Разбиение строки на подстроки»
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