Прежде всего, добро пожаловать в StackOverflow. Отличное место, на самом деле.
Теперь, для начала, позвольте мне помочь; много; много.
У вас есть хорошие комментарии, которые помогут вам и мне и всем остальным, но они настолько уродливы, что чтение их болезненно.
Вот как это исправить: пробел, много его, пустые строки и группировка инструкций в небольшие группы, связанные друг с другом.
Подробнее, после условного перехода, вставьте одну пустую строку после абсолютного прыжка, вставьте две пустые строки. (Старые трюки, отлично работают для удобочитаемости)
Во-вторых, выстройте комментарии так, чтобы они были аккуратно расположены. Это выглядит в тысячу раз лучше.
Вот ваши вещи, с 90-секундным текстом, организованным мной. Поверьте, профессионалы будут уважать вас в тысячу раз лучше с этим видом исходного кода ...
pushl %ebp // What i think is happening here is that we are creating more space for the function.
movl %esp,%ebp // Here i think we are moving the stack pointer to the old base pointer.
movl 8(%ebp),%edx // Here we are taking parameter int a and storing it in %edx
movl 12(%ebp),%eax // Here we are taking parameter int b and storing it in %eax
cmpl %eax,%edx // Here i think we are comparing int a and b (b > a) ?
// No, Think like this: "What is the value of edx with respect to the value of eax ?"
jge .L3 // edx is greater, so return the value in eax as it is
movl %edx,%eax // If the term is not met here it will return b
// (pssst, I think you're wrong; think it through again)
.L3:
movl %ebp,%esp // Starting to finish the function
popl %ebp // Putting the base pointer in the right place
ret // return
Теперь вернемся к вашей проблеме. То, что он получает, это «смысл» инструкции сравнения и соответствующей инструкции JGE
.
Вот запутывать-O-Matic вещи вы должны понимать, чтобы выжить такого рода «академических переживаний»
Это бизнес, в cmpl %eax,%edx
инструкции, является одной из форм «сравнить» инструкции
Попробуйте сформировать идею что-то вроде этого, когда вы видите, что синтаксис, «... Какое значение операнда относительно исходного операнда ...?»
РИСКОВАННАЯ: Я абсолютно n o хорошо с синтаксисом AT & T, поэтому кто-то может исправить меня по этому поводу.
Во всяком случае, в этом конкретном случае, вы можете фраза идея в уме, как это ...
»... Я вижу cmpl %eax,%edx
, так что я думаю: Что касается eax
, значение в edx
является ..."
Вы завершите эту фразу в уме с„чувством“следующей инструкцией, которая является условным переходом.
Парадигматический процесс в мозге человека работает, чтобы сформировать предложение, как это ...
«... Что касается eax
, значение в edx
больше или равны, поэтому я прыгаю ...»
так что, если вы правильно о местонахождении a
и b
, то вы c сделать парадигматический скремблер мозга и получить что-то вроде этого ...
«... Что касается значения в b
, что значение в a
больше или равно, так что я буду прыгать ...»
Чтобы получить представление об этом, обратите внимание, что JGE
является «противоположный смысл», если вы будете, JL
(то есть, «Переход, если меньше, чем»)
Хорошо, теперь это так происходит, что return
в C is , связанный сret
инструкция по сборке languag е, но это не одно и то же.
Когда Программисты говорят "... Эта функция возвращает Int ...", что они означают ...
- ассемблер подпрограмма поместит значение в
Eax
- The подпрограмма будет исправить стек и положить его обратно в аккуратном порядке
- подпрограмма будет выполнять его
Ret
инструкции
Еще один предмет обфускации теперь брошен вам в лицо.
Эти следующие условные переходы применимы к Подпись арифметические операции сравнения ...
Вот оно! Ловушка ждет, чтобы ввергнуть тебя во все это!
Вы хотите выполнить сопоставленные или неподписанные сравнения ???
Кстати, я никогда не видел, чтобы кто-нибудь делал что-то подобное первой функции, где число без знака сравнивается с подписанным числом. Это даже законно?
Так или иначе, мы помещаем все эти факты вместе, и мы получаем: Этот ассемблере рутинных возвращает значение в a
если оно меньше, чем значение в b
в противном случае он возвращает значение в b
.
Эти значения оцениваются как знаковые целые числа.
(я думаю, что я получил это право,.. Кто-то проверить мою логику я действительно не нравится синтаксис этого монтажный на всех)
Так или иначе, я уверен, что разумно вы не хотите, чтобы спросить людей, в Интернете, чтобы предоставить вам конкретный ответ на ваш конкретный вопрос о домашнем задании, поэтому я оставлю это вам, чтобы понять это из этого объяснения.
Надеюсь, я достаточно подробно объяснил логику и «смысл» сравнений и подписанный и неподписанный бизнес, чтобы вы могли получить свой мозг вокруг этого.
О, и снова оговорку, я всегда использую синтаксис Intel (например, Masm, Tasm, Nasm, что угодно), поэтому, если у меня есть что-то назад, не стесняйтесь исправить его для меня.
Мы не будем делать домашнее задание для вас, тем более, что вы совершенно не прилагаете никаких усилий. –
@Puciek: На самом деле у ОП есть комментарии, которые показывают предполагаемые интерпретации генерируемых команд. –
Это шутка? – drleifz