2016-10-30 2 views
0

키보드에서 3 개의 문자열을 읽고 2 개의 문자열을 소문자로 표시하고 마지막 하나를 대문자로 표시하는 프로그램을 작성하려고합니다. 여기까지 지금까지 얻은 것이 있습니다. 문자열을 읽을 수는 있지만 모든 것을 대문자로 변환합니다. 어쨌든 마지막 문자열 만 변환 할 수 있습니까? 미리 감사드립니다.어셈블리 문자열을 분할하십시오. x86 16 비트

.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

* 마지막 문자열 만 변환 하시겠습니까? * 물론 있습니다. 한 가지 방법은 처음 두 문자열의 끝에서 위치를 추적하는 것이므로 입력을 읽은 후에 마지막 문자열을 반복 할 수 있습니다. –

+2

미안하지만, 당신은 내 풍자를 힘들게합니다 ... "아니오, 컴퓨터의 모든 문자열은 이제 대문자 여야합니다." 당신은 기본적으로 자신의 질문에 대답했습니다. 처음 두 문자열을 변환하지 마십시오. 그러면 세 번째 문자열 만 변환됩니다. 그것을 계산으로 생각하고 몇 가지 수식, 카운터, 숫자 조작으로 문제를 해결하십시오 ... 심지어 문자열은 ASCII 인코딩의 연속 바이트 값 (0-255)의 스트림입니다. 그래서 특정 문자열에서만 뭔가를하고 싶다면 먼저 문자열 시작/정지 (공간 당?)를 결정하는 방법을 먼저 정의하십시오. 그것들을 센다. 세 번째로 대문자 실행 – Ped7g

+2

그리고'sub al, 20h'는 "대문자"와 조금 다르다.''A ''와 같이 대문자로 어떻게 할 것인가? ''AND''가 어떻게 작동 하는지를 확인한 다음 ASCII 테이블을 봅니다 ...이 작업을 위해 특별히 설계되었으므로''a ''가''OR '0x20' 인 이유이고' 'Z'+ 1'. – Ped7g

답변

0

의견을 보내 주셔서 감사합니다. 이 방법으로 해결할 수있었습니다.

.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 
+0

'XOR AL, 20H'는 항상 대문자로 만드는 것과는 다른 케이스를 뒤집습니다. 또한 알파벳이 아닌 문자 (예 :''- ''또는 ''7 '')를 변경하지 않으려면 몇 가지 조건이 필요합니다. http://stackoverflow.com/questions/35932273/how-to-access-a-char-array-and-change-lower-case-letters-to-case-case-and-vice에 대한 몇 가지 상세한 답변이 있습니다. –