1
我正在爲裝配中的其中一個類(pep8)編寫一個程序。該程序應該取-32,768到32,767之間的整數,並輸出其二進制等效值。下面的代碼完成了任務,除了向後打印二進制數字。在裝配(pep8)中將Int轉換爲二進制 - 一種優雅的方法
有沒有一種優雅的方式讓我以正確的順序打印二進制數(即我不想將每個二進制數字存儲在本地變量中,然後按相反順序打印)。
BR main
int: .EQUATE 0 ;local variable int
out: .EQUATE 2 ;local variable out
index: .EQUATE 4 ;local variable index
stack: .EQUATE 6 ;local variable for dynamic memory allocation
main: SUBSP stack,i ;allocate memmory
LDA 0,i
STA index,s ;initialize index
DECI int,s ;get user input and store it in num
while: LDA index,s ;while (num <= 16)
CPA 16,i ;
BRGE endWhile ;
ADDA 1,i ;index++
STA index,s ;
LDA int,s ;
ANDA 0x0001,i ;modulus 2 "%2"
STA out,s ;
DECO out,s ;output results
LDA int,s ;
ASRA ;devide num by 2
STA int,s ;
BR while ;
endWhile: ADDSP stack,i ;deallocate memmory
STOP
.END
非常感謝你的回答。用我採取的方法(除以2並存儲餘數)是否有任何方法可以完成相同的輸出? (我看到你建議在網上發佈的解決方案,但它感覺有點像作弊,因爲我的原始方法是完全不同的。)感謝您的幫助 – Zzz
@Azzi我不認爲使用這種方法會造成某種欺騙:這個技巧有「在線」之前就已經存在了很多 - 例如,我在25年前的6502年就讀過高中,但在此之前它已被廣泛使用。如果您想用最少的修改來使用您的方法,請使用ANDA 0x8000,i'來選出最高位,然後將值左旋轉兩次以使最重要的位進入最低位。 – dasblinkenlight
感謝您的幫助:) – Zzz