查看單個文章
舊 2005-12-09, 09:47 AM   #2 (permalink)
mini
管理版主
 
mini 的頭像
榮譽勳章
UID - 4144
在線等級: 級別:97 | 在線時長:9851小時 | 升級還需:145小時級別:97 | 在線時長:9851小時 | 升級還需:145小時級別:97 | 在線時長:9851小時 | 升級還需:145小時級別:97 | 在線時長:9851小時 | 升級還需:145小時級別:97 | 在線時長:9851小時 | 升級還需:145小時級別:97 | 在線時長:9851小時 | 升級還需:145小時級別:97 | 在線時長:9851小時 | 升級還需:145小時
註冊日期: 2002-12-07
文章: 13341
精華: 0
現金: 26444 金幣
資產: 3024304 金幣
預設

老兄的作業期限怎麼都是不到一天...^^||
1.寫一個(擴充式)兩個整數型加法 組合語言 (因為題目是一個 兩個超長整數)
2.您可以假設兩個整數是無符號類形的 (也就是正整數)
3.使用DumpMem 技巧顯示其合(請參考文字書 141頁 -146頁)
*DumpMem : 將一段範圍內的記憶體內容以16進位的格式寫入到標準輸出上
4.附註:這個整數資料在記憶體中是以 little-endian (低位組在前)之順序存放
5.可能使用的指令:
(1.)ADC : 用進位旗標做加法,例如:
ADC dest source ; dest = dest + source + CF
(2.)CLC : 清除進位旗標, 意義為 Set CF = 0
(3.)STC : 設定進位旗標, 意義為 Set CF = 1

簡單加法如下
語法:
DATA    SEGMENT               ;定義了一個資料區段(DATA SEGMENT),來做
        X1       DW      ?         ;為變數X1、X2 的儲存區。
        X2       DW      ?
DATA    ENDS

CODE    SEGMENT
        ASSUME CS:CODE,DS:DATA

BEGIN   PROC    FAR
        MOV     AX,X1
        ADD     AX,X2
BEGIN   ENDP

CODE    ENDS
        END     BEGIN
ADC是將來源和目的運算元相加外再加上進位旗標(CF)的值,亦即,如進位旗標被設
定為1時,兩數相加結果再加1,如進位旗標被清除為0時就不再加1。

二個雙字組數的高階字組放在BX和DX,低階字組放在AX和CX,兩數相加時只要:
語法:
ADD AX,CX '--|_      BX:AX
ADC BX,DX '--|    +) DX:CX
                '           --------
                '           BX:AX
請以此為基礎設計之
(也就是BX+AX 有進位的話 BX+DX就會再加一)

參考:
http://webbbs.muarock.net/cgi-bin/bb...2E15/AA271209C
mini 目前離線  
送花文章: 2013, 收花文章: 8001 篇, 收花: 26805 次
回覆時引用此帖