簡體   English   中英

ASM 8086中的ADC指令

[英]ADC instruction in ASM 8086

當我使用ADC作為例子時:

AL = 01 and BL = 02, and CF = 1

當我做這個:

ADC AL,BL 

AL3還是4 (加CF或不加?)

關於8086 ADC指令的幾點內容:

Syntax: adc dest, src
dest: memory or register
src:  memory, register, or immediate
Action: dest = dest + src + CF

顯然,該動作表示進位標志( CF )將包含在添加中,因此結果將是4而不是3

它與添加基數10沒有什么不同。

99
+11

9+1 is zero carry the 1
9+1+carry is 1 carry the 1

上面的十進制數學結果是10,進位為1,如果你想以這種方式考慮,則為110。

對於使用一位加法器的二進制啟動,這是一個真值表:

000 0 0
001 0 1
010 0 1
011 1 0
100 0 1
101 1 0
110 1 0
111 1 1

三列的左列是輸入組合,兩個操作數和進位,第二列是執行,第三列是結果

所以1 + 1沒有進位,左列是110,結果是0進1。

當你加上十進制的一列,操作數a,操作數b,進位時,上面的十進制數學沒有任何不同。 結果是答案模10,進位是結果/ 10。 將進位復制到下一列的頂部並重復進行。 用99 + 11或999 + 111等證明

對於更簡單的兩位無負載,結果是輸入的xor,並且執行是兩個輸入中的和。 你可以使用兩個add來實現add with carry而不帶鏈接加法器或直接執行。 當存在奇數個on或奇數奇偶校驗時設置結果,這是兩個x = r = a x或b xor進位。執行我正在努力,此刻也許有人可以提供幫助。

因此帶有進位設置的8位0xFF + 0xFF將給出

1
 11111111
+11111111

這顯示0xff + 0xff,在您開始之前有一個“攜帶一個”。

從右邊一次看一列,就像十進制數學一樣

1+1+1 = 1 carry the 1
next column
1+1+1 = 1 carry the 1
...

這種情況會持續下去,最后設置為0xFF並設置進位位

因此,如果你只有一個8位的附加值,你可以加兩個數字,就像你有內存一樣寬。

讓我們看看16位加:

0x1234
+0xABCD

您可以使用16位加,0xBE01進行數學運算。

或者使用8位加法器:

clear the carry bit
add with carry 0x34+0xCD result 0x01 carry set
add with carry 0x12+0xAB result 0xBE carry clear

所以答案是0xBE01

或者使用4位加法器,如果你只有4位alu

clear the carry bit
add with carry 0x4+0xD = 0x1 carry bit set
add with carry 0x3+0xC = 0x0 carry bit set
add with carry 0x2+0xB = 0xE carry bit clear
add with carry 0x1+0xA = 0xB carry bit clear

再次結果0xBE01進位清零

我們可以用單個位或3位加法器來做這個,只要它是二進制的,它就是微不足道的。

所有有用的處理器必須有一些方法來添加進位,以便您可以擴展alu。 有時候會有單獨的添加和adc,有些adc是額外的步驟,或者最痛苦的是沒有攜帶的添加,如果帶有明確的添加立即,則使用分支。

這也是移位或旋轉通過進位位旋轉的原因,因此您可以進行比寄存器/存儲器位置寬度更寬的位移。

與十進制相比,二進制乘法很簡單,但是我會饒你那個並讓你考慮一下。

是的,你可以並且應該編寫一個程序來試試這個。 而且仍然可以,我可能會故意引導你走上錯誤信息的道路。

AL將為4 ADC手段add with carry ,所以當然進總結。 CF被重新設置為0,因為沒有進行另外的問題。

它將為4.如果進位標志(CF)為1,ADC(帶進位加)會增加1。請參見此處的操作碼的完整描述。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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