你好,我是程序集新手,我努力讓兩部分程序工作。我爲這個x86程序集使用Visual Studio。x86程序集新手:基本添加和存儲數字問題
第一部分) 我的第一個目標是數到13,在每條路上增加每個值。 Ex,0 + 1 + 2 + 3 ... + 13 = 91。我想在總計中存儲該總數。
第2部分) 其次,我想從2^0到2^6的2次冪數。 Ex,0,1,2,4,8,32,64。 我認爲*我正在那樣做,但我並沒有隨着我去存儲每個價值。我想將它們存儲在連續的內存位置。
我有這個迄今爲止,
.586
.MODEL FLAT
.STACK 4096
.DATA
num1 BYTE 13 ;Initialize number to count to
totall BYTE 0 ;Total of all counted numbers
temp BYTE 0 ;Temp for loop adding
shiftme BYTE 1 ;Start of counting 2^0 so I can reach 2^6
.CODE
main PROC
;code here
increment: ;Increment label
inc temp ;Increment temp by 1
mov eax, temp
add totall, eax ;Add temp+totall and store in totall
cmp eax, num1 ;Compare for jump
jne increment ;Jump if not equal
;this part should store each value 1,2,4,8,32.. in consecutive memory locat
shiftallthethings: ;Shift label
shl shiftme, 1 ;Shifting bits to the left one
cmp shiftme, 64 ;Comparing for the jump
jne shiftallthethings ;Jump if not equal to
ret
main ENDP
END
的問題,幫助我理解。
- 如何將值存儲在連續的內存位置?
- 我是否正確使用跳轉和標籤說明?
- 我是否需要使用像eax這樣的特定寄存器來執行這些問題?爲什麼?
任何幫助非常感謝,謝謝。
連續內存位置的存儲值是什麼意思?你能給我們解決一個具體的問題嗎?也被重新標記爲MASM32。 – 2012-03-26 19:19:35
@MikeKwan我不完全確定這是什麼意思,如果我們忽略了這一點,我們每次在跳到標籤時都要存儲shiftme。此代碼是否有意義解決我發佈的問題? – KRB 2012-03-26 19:44:38
'add totall,temp'和'cmp temp,num1'是錯誤的,因爲'add'和'cmp'不能在內存中同時存在兩個操作數。有效組合:寄存器+存儲器或存儲器+寄存器,寄存器+立即數常量,存儲器+立即數常量。你需要在這裏使用一個寄存器。 – 2012-03-26 19:56:26