2016-05-22 7 views
1

Пожалуйста, простите меня за глупый вопрос синтаксиса, но у меня есть две переменные (квадраты и horizCharsPerSquare), и я пытаюсь установить ecx равным квадратам/horizCharsPerSquare. Я пробовал:Как вы делите регистр в сборке?

mov ecx, squares/horizCharsPerSquare 

и

mov ecx squares 
    div horizCharsPerSquare 

и

mov ecx, squares 
    shr ecx, horizCharsPerSquare ;//(I know there are other issues with this, I was just giving it a shot 

И независимо от того, что я получаю сообщение об ошибке? Я получаю ошибки сборки, которые «постоянно ожидаются» для всего. Любые предложения о том, как я должен это делать?

+0

https://www.youtube.com/watch?v=ieuUHIWaIqM&index=19&list=PL0C5C980A28FEE68D 7:15 – ABuckau

+2

'mov ecx, squares/horizCharsPerSquare' будет работать, если бы это были как константы времени сборки. Правильный выбор правильного выбора, если 'horizCharsPerSquare' является степенью 2.' mov ecx squares' будет собираться, но это [не как 'div' работает] (http://www.felixcloutier.com/x86/DIV .html). См. Также [x86 tag wiki] (http://stackoverflow.com/tags/x86/info). –

ответ

2

Так как квадратов и horizCharsPerSquare являются переменными, вы обычно бы переместить их в регистры перед выполнением арифметических операций над ними. Здесь только первая переменная должна быть перемещена в регистр, поскольку div команда не позволяет для операнда памяти:

mov eax, squares 
xor edx, edx 
div horizCharsPerSquare ;Divide EDX:EAX by the dword variable 
mov ecx, eax    ;Put quotient in ECX 
+0

Спасибо! Я не знаю, почему у меня так много проблем с этим –