[英]Compare two Address Registers in Motorolla 68k
我有一個簡單的程序,我試圖理解如何比較兩個地址寄存器,如果A1小於或等於A2則分支
因此:
ORG $8000
START: ; first instruction of program
CMP A2,A1
BLE LOOP ;if A1 is less then or equal to A2, BRANCH
LOOP:
* Put variables and constants here
END START ; last line of source
這是正確的做法嗎? 如果我在這里使用宏CMPA
會有什么不同呢?
您必須使用cmpa
與68K上的地址cmpa
進行比較。 你沒有選擇。
此外,最好包括大小后綴.L以確保比較完整的32位而不是低16位的符號擴展版本。
CMPA.L A2,A1
BLE.S LOOP
我肯定會使用cmp.L
,因為當沒有設置大小時,許多68k匯編器默認為.w,然后你最終會使用CPU符號擴展低16位的地址內容,然后將它們作為32位數量進行比較(68k僅適用於地址算術)。
相反,當cmp 的目的地是地址寄存器時,大多數匯編程序(至少我已知)將自動選擇cmp a 。
此外,我認為沒有理由與ble
簽署地址比較。 這里的無符號比較更合適,例如:
lea Start,a0
lea Start+size,a1
loop:clr.l (a0)+
cmp.l a0,a1
bhi.s loop
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.