簡體   English   中英

爾灣大會(MASM)-通過數組/表排序

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM