2017-11-23 20 views
0
DTSEG SEGMENT 
DATAW DW 97F4H 
COUNT DB 0 
CNT_ASC DB 2 DUP(0), '$' 
DTSEG ENDS 

CDSEG SEGMENT 
START: 
ASSUME CS:CDSEG, DS:DTSEG 
MOV AX, DTSEG 
MOV DS, AX 
SUB AL, AL 
MOV DL, 16 
MOV BX, DATAW 
AGAIN: ROL BX, 1 
JNC NEXT 
ADD AL, 1 
DAA 
NEXT: DEC DL 
JNZ AGAIN 
MOV COUNT, AL 
CALL BCD2ASC 
CALL DISPLAY 
MOV AH, 4CH 
INT 21H 
END START 

BCD2ASC PROC 
MOV AL, COUNT 
MOV AH, AL 
AND AX, 0F00FH 
MOV CL, 4 
SHR AH, CL 
OR AX, 3030H 
XCHG AH, AL 
MOV CNT_ASC, AX 
RET 
BCD2ASC ENDP 

DISPLAY PROC 
MOV AH, 09 
MOV DX, OFFSET CNT_ASC 
INT 21H 
RET 
DISPLAY ENDP 

이 코드는 '정수 단어에 포함 된 1의 수입니다.' '97F4H'는 정수 단어이고 COUNT는 1의 수라고 생각합니다. 마지막 줄에 오류가 있습니다. 이 코드를 수정하는 방법을 모르겠습니다. 'CDSEG ENDP'를 어디에 넣어야할지 모르겠습니다. 이 프로그램을 처음 사용합니다. 도와주세요 ~MASM32 - 치명적인 오류 A1010 : 일치하지 않는 블록 중첩 : CDSEG

+0

DISPLAY ENDP 다음에 'CDSEG ENDS'를 추가하지만 오류가 있습니다 (파일 끝에 END 지시문이 필요함). MOV AX, DTSEG (기호 유형 충돌)에 또 다른 오류가 있습니다. 어떻게 해결할 수 있습니까? –

+0

'END START'는 중간이 아닌 파일의 끝에 위치합니다. –

답변

0

CDSEG SEGMENT 이후의 모든 내용은 지침이므로 파일의 마지막 줄 뒤에 CDSEG ENDP을 넣으십시오. 코드 세그먼트의 일부가되기를 원합니다.

+0

@MichaelPetch : 답으로 게시하고 이것을 삭제하겠습니다. 나는 OP의 답장에 답장으로 대답 대신 게시했다. * 나는 'CDSEG ENDP'. *를 넣을 곳을 모른다. * 그러나 그들이 틀린 것을 시도하고 있었다면 여전히이 질문을하고있을 것이다. 지령. –