MOV AL,37H
MOV BL,35H
ADD AL,BL ; 執行以上3步後,AL = 6CH
DAA的功能:將AL的內容調整為兩位組合型的二進位制數。DAA的用法: 如果AL的低4位大於9或AF=1,則AL的內容加06H,並將AF置1;然後如果AL的高4位大於9或CF=1,則AL的內容加60H,且將CF置1。如果兩個都不滿足,則將AF,CF清零。
首先AL = 6CH = 0110 1100B因為AL的低四位1100B大於9,所以AL = AL+06H = 72H,且AF = 1;
這個DAA指令怎麼使16進位制的加法最終結果卻與10進位制加法相同,即:37D+35D==72D。 這裡不明白樓主想表達什麼?不好意思了
另外,有個說法:組合語言編寫時,如果後面不加字母表示編譯器預設它是十進位制,所以這個D加與不加沒影響,都是十進位制 是的,但是如果程式編譯執行後,你編寫的十進位制在記憶體中將會被自動轉換成十六進位制哦
但是我發現在E指令之中並非如此,如果什麼都不加,系統實際是按16進位制記錄的。
首先,樓主的觀察力很強,贊一個. 因為DEBUG XXX.EXE後,程式就載入了記憶體中,而資料在記憶體中都是以十六進位制數表示的哦; 所以,如果你編寫的程式有十進位制數的話,程式載入記憶體後,會自動轉換成十六進位制數哦
PS:若有不明白的地方,可以追問
MOV AL,37H
MOV BL,35H
ADD AL,BL ; 執行以上3步後,AL = 6CH
DAA的功能:將AL的內容調整為兩位組合型的二進位制數。DAA的用法: 如果AL的低4位大於9或AF=1,則AL的內容加06H,並將AF置1;然後如果AL的高4位大於9或CF=1,則AL的內容加60H,且將CF置1。如果兩個都不滿足,則將AF,CF清零。
首先AL = 6CH = 0110 1100B因為AL的低四位1100B大於9,所以AL = AL+06H = 72H,且AF = 1;
這個DAA指令怎麼使16進位制的加法最終結果卻與10進位制加法相同,即:37D+35D==72D。 這裡不明白樓主想表達什麼?不好意思了
另外,有個說法:組合語言編寫時,如果後面不加字母表示編譯器預設它是十進位制,所以這個D加與不加沒影響,都是十進位制 是的,但是如果程式編譯執行後,你編寫的十進位制在記憶體中將會被自動轉換成十六進位制哦
但是我發現在E指令之中並非如此,如果什麼都不加,系統實際是按16進位制記錄的。
首先,樓主的觀察力很強,贊一個. 因為DEBUG XXX.EXE後,程式就載入了記憶體中,而資料在記憶體中都是以十六進位制數表示的哦; 所以,如果你編寫的程式有十進位制數的話,程式載入記憶體後,會自動轉換成十六進位制數哦
PS:若有不明白的地方,可以追問