組合語言的問題?
請問這是什麼意思...我剛學...連編譯器都看不懂怎麼用...
星期五12/9 要交作業了...拜託幫個忙吧.. :decfghi6: .data x1 QWORD 0A02B000190008400h x2 QWORD 0800187008000A904h sum BYTE 9 DUP(?) 1. Write an assembly program to do an extended addition of two integers 2. You may assume that the two integers are unsigned 3. Use the DumpMem (described in textbook pages 141-146) in Irvine32.inc to display the sum. 4. Note that the integers are stored in little-endian order in the memory. 5. The instructions that may be used : (1.)ADC : Add with carry flag, for example: ADC dest source ; dest = dest + source + CF (2.)CLC : Clear Carry Flag, means Set CF = 0 (3.)STC : Set Carry Flag, means Set CF = 1 |
老兄的作業期限怎麼都是不到一天...^^||
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),來做 定為1時,兩數相加結果再加1,如進位旗標被清除為0時就不再加1。 二個雙字組數的高階字組放在BX和DX,低階字組放在AX和CX,兩數相加時只要: 語法:
ADD AX,CX '--|_ BX:AX (也就是BX+AX 有進位的話 BX+DX就會再加一) 參考: http://webbbs.muarock.net/cgi-bin/bb...2E15/AA271209C |
感恩你的大恩大德...QQ"
因為每次我都忘記有作業~ :decfghi6: 總之~非常謝謝~你的幫忙~ :bj375mg: |
引用:
|
這是朋友傳給我的作業答案~
但是我還是不懂~為什麼要用到EAX EBX ECX EDX 這麼多的指令 語法:
;*****This is Assembly Exam 01***** |
那些是暫存器名稱
mov EAX,DWORD PTR [x1] mov 是複製指令 EAX 是32位元 累加暫存器 全名,可容納一個DWORD資料 語法:
31~16 15~08 07~00 bit [x1] 表示 x1的記憶體位址 所以 DWORD PTR [x1] 表示指向x1 因為只能存放DWORD長度的資料 所以DWORD PTR [x1] 等於 90008400h 所以: mov EAX,DWORD PTR [x1] 表示把 90008400h 放到 EAX 裡 (DWORD PTR [x1+4] 表示指向x1 再加4byte的位址,等於 A02B0001h) 至於 Q: 為什麼要用到EAX EBX ECX EDX 這麼多的暫存器? A: 因為需要嘛~ ^^|| 比如 loop 迴圈指令會用到 計數暫存器 ECX 執行到 loop 時 ECX=ECX-1 直到 ECX=0 即執行 loop 的下一條指令 (跳脫loop迴圈) 比如 語法:
;計算1加到100 (1+2+3+...+100) 比如 要將 bl 內容複製到 EAX 裡 bl 只有一個byte長度 EAX 有4個byte長度 此時就用 movzx EAX,bl 這裡有一些教學 http://140.111.104.1/kocp/mpu/m4/m4index.htm |
這是我自己寫的...但是他一直說有錯...我也不會改阿~Q~ :decfghi6:
拜託~幫個忙吧~小弟萬分感謝~ 語法:
include Irvine32.inc |
臨時複習了一上午
語法:
include Irvine32.inc 不過邏輯應該沒錯 解說: |
感恩~大俠屢次仗義相助...
小弟銘感五內... 但是下面的圖片太小 看不清楚~可否放大~ 非常感謝~ |
http://www.uploadtemple.com/view.php/1134721265.jpg
剛剛發現有一點錯 你可試試找出來 mov BYTE PTR [sum+eDI],AL ;結果放到 sum 改成 add BYTE PTR [sum+eDI],AL ;結果放到 sum 因為這樣才不會把 adc BYTE PTR [sum+eDI],0 預先做的進位破壞掉 還有 sum BYTE 9 DUP(?) 改成 sum BYTE 9 DUP(0) 為了不使進位的情形發生 |
所有時間均為台北時間。現在的時間是 11:57 AM。 |
Powered by vBulletin® 版本 3.6.8
版權所有 ©2000 - 2024, Jelsoft Enterprises Ltd.
『服務條款』
* 有問題不知道該怎麼解決嗎?請聯絡本站的系統管理員 *