2015-01-19 2 views
-5

Вот как выглядит мой код. Вы видите какие-то проблемы с этим?Синтаксис сборки Ошибка: в инструкции

compare macro nr1,nr2 ; title of macro 
local et1,et2 ; etiquetes 
mov eax,nr1 
mov ebx nr2 
push eax 
push ebx 

; here I compare the 2 number nr1, nr2 to see whether is bigger 

cmp eax,ebx  ; comparing the 2 numbers 
ja et1 
jb et2 
et1: 
sub eax,ebx  ; if the first one is bigger, we substract from it 

; here we subtract from the bigger one 

push eax 
push offset format3 
call printf 
add esp,8 

et2: 

sub ebx,eax   ; if the second one is bigger we substract like this 
push ebx 
push offset format3 
call printf 
add esp,8 
add esp, 8 
endm 
+2

Есть ли у вас какие-либо сообщения об ошибках? Если да, то на какой линии? – Thilo

+1

В этой строке 'mov ebx nr2', кажется, отсутствует запятая. – Jester

+5

Ваш ассемблер, безусловно, видит проблемы с ним и говорит вам. Почему бы не обратить на это внимание? Это, конечно, быстрее, чем задавать вопрос о переполнении стека! –

ответ

0
mov ebx nr2 

Очевидно, что эта линия нужна запятая. Фактически запятая могла быть включена в законную очередь в вызывающую последовательность этого макроса! Вот почему ассемблер показывал ошибку на другой строке.

Но также:
Вы не должны прыгать через блок на ET2 когда et1 блок был выполнен?
В чем смысл нажатия EAX и EBX, если они не выскользнули впоследствии? (Стек сбалансирован, хотя)

+0

Да, я тоже буду работать над этим. Я выложу весь свой код. потому что у меня сложная проблема. Мне нужно прочитать 2 файла и напечатать количество слов в нем. он работает для каждого файла, но когда я помещаю оба файла, он не работает – user3656576

Смежные вопросы