[英]Irvine Assembly (MASM ) - Sorting Through an Array / Table
目前,我正在實現一個程序,該程序接受等級值(例如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的字母等級”。 該程序也暫時停止工作。
我相信它與指針和數據大小有關。 我的理想目標是將字母等級的值存儲在變量中,但是鑒於使用指針所需的數據大小,我似乎找不到任何方法。 有關如何執行此操作的任何想法?
您正在調用WriteString
但是表中的值是字符而不是字符串。 在這種情況下的區別在於它們不是零終止的。 如果有的話,可以使用WriteChar
,或者在表中放入零,但是不要忘了調整NumCols
。
另請注意, CMPSB
增加兩個指針,這意味着您的比較將是錯誤的。 您可能應該只使用非字符串CMP
尤其是因為user_ip
已經在寄存器AL
。
PS:最后有人使用表:)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.