我目前正在实施一个程序,该程序接受等级值的输入(例如75),然后输出与其对应的字母等级。我通过数组/表实现了以下请求的比例:
.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
我正在使用以下代码对此数组/表进行排序并输出字母等级。
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
输入75,我被告知:“75等级产生EC的字母等级; D”。该计划也暂时停止工作。
我确信它与指针和数据大小有关。我理想的目标是将字母等级的值存储在变量中,但考虑到使用指针所需的数据大小,我似乎无法找到方法。有关如何做到这一点的任何想法?
答案 0 :(得分:1)
您正在调用WriteString
,但表中的值是字符而不是字符串。这种情况的不同之处在于它们不是零终止。如果你有,可以使用WriteChar
,或者在表格中加零,但不要忘记调整NumCols
。
另请注意,CMPSB
会增加两个指针,这意味着您的比较将是错误的。您应该只使用非字符串CMP
,因为user_ip
已经在注册AL
中。
PS:最后有人使用表格:))