Сплит строки на сборке x86 16 бит
Я пытаюсь написать программу, которая читает 3 строки с клавиатуры, а затем отображает 2 строки в нижнем регистре и последнюю в верхнем регистре. Вот что у меня есть до сих пор: я могу прочитать строку, но затем она преобразует все в верхний регистр. Есть ли способ конвертировать только последнюю строку? заранее спасибо
.MODEL SMALL
.DATA
MSG DB 0DH,0AH, 'ENTER A STRING: $'
MSG2 DB 0DH,0AH, ' YOUR STRING IS :-----> : $'
STR1 DB 255 DUP(?)
.CODE
BEGIN:
MOV AX,@DATA
MOV DS,AX
LEA DX,MSG
MOV AH,09H
INT 21H
LEA SI,STR1
MOV AH,01H
READ:
INT 21H
;MOV BL,AL
CMP AL,0DH
JE DISPLAY
SUB AL,20H
MOV [SI],AL
INC SI
;CMP BL,0DH
JMP READ
DISPLAY:
MOV AL,'$' ;caracter '$'
MOV [SI],AL ;
LEA DX,MSG2
MOV AH,09H
INT 21H
LEA DX,STR1
MOV AH,09H
INT 21H
; MOV AH,4CH
; INT 21H
.EXIT
END BEGIN
Я использую TASM.
1 ответ
Решение
Спасибо всем за ваши комментарии. Я смог решить это так:
.MODEL SMALL
.STACK 100h
.DATA
Mensagem1 DB "Meu Prompt>>",'$',13,10
first DB 80 DUP (?)
.CODE
MOV AX, @DATA
MOV DS, AX
LEA DX, Mensagem1
MOV AH, 9
INT 21H
LEA SI, first
READ:
MOV AH, 01H
INT 21H
CMP AL, 13
JE DONE
OR AL, 20H
MOV [SI], AL
INC SI
CMP AL, 20H
JE READ2
JMP READ
READ2:
INT 21H
CMP AL, 13
JE DONE
OR AL, 20H
MOV [SI], AL
INC SI
CMP AL, 20H
JE READ3
JMP READ2
READ3:
INT 21H
CMP AL, 13
JE DONE
XOR AL, 20H
MOV [SI], AL
INC SI
JMP READ3
DONE:
MOV AL, '$'
MOV [SI], AL
LEA DX, Mensagem1
MOV AH, 9
INT 21H
LEA DX, first
MOV AH, 9
INT 21H
MOV AH,4CH
INT 21H
END