![]() |
|
|||||||
| 論壇說明 | 標記討論區已讀 |
|
歡迎您來到『史萊姆論壇』 ^___^ 您目前正以訪客的身份瀏覽本論壇,訪客所擁有的權限將受到限制,您可以瀏覽本論壇大部份的版區與文章,但您將無法參與任何討論或是使用私人訊息與其他會員交流。若您希望擁有完整的使用權限,請註冊成為我們的一份子,註冊的程序十分簡單、快速,而且最重要的是--註冊是完全免費的! 請點擊這裡:『註冊成為我們的一份子!』 |
![]() |
|
|
主題工具 | 顯示模式 |
|
|
|
|
#1 (permalink) |
|
超級版主
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
老兄的作業期限怎麼都是不到一天...^^||
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
定為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 |
|
|
送花文章: 2069,
|
|
|
#4 (permalink) |
|
註冊會員
|
這是朋友傳給我的作業答案~
但是我還是不懂~為什麼要用到EAX EBX ECX EDX 這麼多的指令 語法:
;*****This is Assembly Exam 01***** INCLUDE Irvine32.inc .data x1 QWORD 0A02B000190008400h x2 QWORD 800187008000A904h sum BYTE 9 DUP(?) .code main PROC mov esi,offset sum mov EAX,0 mov EBX,0 mov EDX,0 mov ECX,9 mov EAX,DWORD PTR [x1] add EAX,DWORD PTR [x2] adc DX,0 CLC mov EBX,DWORD PTR [x1+4] add EBX,DWORD PTR [x2+4] add EBX,EDX adc DH,0 mov [esi],EAX mov [esi+4],EBX mov [esi+8],DL mov EDX,0 mov edi,0 L1: movzx EDX,[sum+edi] push EDX inc edi loop L1 mov ECX,9 mov edi,0 L2: pop EDX mov [sum+edi],DL inc edi loop L2 mov esi,offset sum mov ECX,9 call DumpMem call DumpRegs EXIT main ENDP END main |
|
|
送花文章: 23,
|