2014-04-21 2 views
0

현재 학년 값 (예 : 75)을 입력 한 다음 그에 해당하는 문자 등급을 출력하는 프로그램을 구현하는 중입니다. 나는 배열/테이블을 통해 다음과 같은 요청 스케일을 구현했습니다 :어바인 어셈블리 (MASM) - 배열/테이블을 통한 정렬

.data 
table BYTE 89d, 'A' 
    BYTE 79d, 'B' 
    BYTE 69d, 'C' 
    BYTE 59d, 'D' 
    BYTE 0d, 'F' 
NumCols = 2 
NumRows = 5 
user_ip BYTE ? 
message1 BYTE "Enter a grade value: ", 0h 
message2 BYTE "The Grade of ", 0h 
message3 BYTE " Yields A Letter Grade of ", 0h 

내가이 배열/테이블과 출력 문자 등급을 정렬하려면 다음 코드를 사용하고 있습니다. (75)의 입력에

mov edx, OFFSET message1 
call WriteString 
call readDec 
mov user_ip, al 

mov esi, OFFSET user_ip 
mov edi, OFFSET table 
mov ecx, NumRows 

L1: 
    CMPSB 
    jae L2 
    add edi, NumCols 
Loop L1 

L2: 
    mov edx, OFFSET message2 
    call WriteString 
    mov al, user_ip 
    call WriteDec 
    mov edx, OFFSET message3 
    call WriteString 
    mov edx, edi 
    call WriteString 
    call Crlf 

가 I가 제시되고있어 "(75)의 등급은 EC 편지 급냅니다; D를". 프로그램 또한 일시적으로 작동을 멈 춥니 다.

저는 포인터와 데이터 크기와 관련이 있다고 확신합니다. 내 이상적인 목표는 변수에 문자 등급의 값을 저장하는 것이지만 포인터를 사용하는 데 필요한 데이터 크기가 주어지면이를 수행하는 방법을 찾지 못하는 것 같습니다. 이 작업을 수행하는 방법에 대한 아이디어가 있습니까?

답변

1

WriteString로 전화를 걸었습니다. 그러나 테이블의 값은 문자열이 아닌 문자입니다. 이 경우의 차이점은 0으로 종료되지 않는다는 것입니다. 사용하시는 경우 WriteChar을 사용 하시거나 테이블에 0을 넣으시고 NumCols도 잊지 마십시오. 또한 두 포인터를 증가 시키므로 비교가 잘못 될 수 있습니다. 문자열이 아닌 문자열을 사용하는 것이 좋습니다.은 아직 등록되어 있습니다. AL입니다.

PS : 테이블 :

+0

우수한을 사용하여 마지막으로 누군가! 완벽하게 일했습니다. 감사! 테이블을 사용해 주셔서 감사합니다. –