Здравствуйте, я новичок в сборке, и я изо всех сил пытаюсь работать с двухчастной программой. Я использую Visual Studio для этой сборки x86.x86 Assembly Newbie: Основная проблема с добавлением и хранением номеров
часть I) Моя первая цель - подсчитать до 13, добавив каждое значение по пути туда. Ex, 0 + 1 + 2 + 3 ... + 13 = 91. Я хочу сохранить это общее количество в целом.
часть 2) Во-вторых, я хочу подсчитать по степеням 2 от 2^0 до 2^6. Пример: 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. –
@MikeKwan Я не совсем уверен, что это значит, если мы проигнорируем этот момент, как мы храним shiftme каждый раз, когда он снова и снова перескакивает на ярлык. Также этот код имеет смысл для решения проблем, которые я опубликовал? – KRB
'add totall, temp' и' cmp temp, num1' неверны, потому что 'add' и' cmp' не могут иметь оба операнда в памяти. Действительные комбинации: регистр + память или память + регистр, регистр + немедленная константа, память + немедленная константа. Вы должны использовать регистр здесь. –