блок для сравнения двух чисел

Массивы C# являются фиксированной длиной и всегда индексируемый. Пойдите с решением Motti:

int [] terms = new int[400];
for(int runs = 0; runs < 400; runs++)
{
    terms[runs] = value;
}

Примечание, что этот массив является плотным массивом, непрерывным блоком 400 байтов, где можно отбросить вещи. Если Вы хотите динамично размерный массив, используйте List< интервал>.

List<int> terms = new List<int>();
for(int runs = 0; runs < 400; runs ++)
{
    terms.Add(runs);
}

Никакой интервал [], ни List< интервал> является ассоциативным массивом - который был бы Dictionary<> в C#. И массивы и списки являются плотными.

15
задан LihO 7 September 2013 в 06:47
поделиться

5 ответов

Это варьируется от ассемблера к ассемблеру. Большинство машин предлагают регистры с символическими именами. как R1 или EAX (Intel x86), и есть инструкция имена вроде "CMP" для сравнения. И для сравнения инструкция, вам нужен другой операнд, иногда регистр, иногда буквальный. Часто монтажники разрешить комментарии справа от инструкции.

Строка инструкции выглядит так:

<opcode>   <register> <operand>   ; comment

Ваш ассемблер может несколько отличаться.

Для ассемблера Microsoft X86 вы можете написать:

CMP EAX, 23; сравнить регистр EAX с константой 23

или

CMP EAX, XYZ; сравнить регистр EAX с содержимым ячейки памяти с именем XYZ

Часто можно записывать сложные "выражения" в поле операнда которые позволяют инструкции, если она имеет возможность, адресовать память разными способами. Но я думаю, это ответ на ваш вопрос.

7
ответ дан 1 December 2019 в 03:05
поделиться

Сначала вызывается инструкция CMP (сравнение), затем одна из следующих:

jle - переход к строке, если меньше или равно
jge - переход к строке, если он больше или равен

Младший ассемблер работает с байтами, а не битами (в любом случае напрямую). Если вы хотите узнать о битовой логике, вам нужно взглянуть на схему проектирования.

6
ответ дан 1 December 2019 в 03:05
поделиться

Основной метод (в большинстве современных систем) состоит в том, чтобы вычесть два числа и затем проверить знаковый бит результата, т. Е. Увидеть, больше ли результат / равен / меньше чем нуль. В ассемблерном коде вместо получения результата напрямую (в регистр) вы обычно просто переходите в зависимости от состояния:

; Compare r1 and r2
    CMP $r1, $r2
    JLT lessthan
greater_or_equal:
    ; print "r1 >= r2" somehow
    JMP l1
lessthan:
    ; print "r1 < r2" somehow
l1:
6
ответ дан 1 December 2019 в 03:05
поделиться

Это полностью зависит от процессора, о котором вы говорите, но он обычно имеет форму:

cmp r1, r2
ble label7

Другими словами, инструкция сравнения для установки соответствующих флагов, за которой следует условный переход в зависимости от этих флагов.

Обычно это минимально, насколько вам нужно для программирования. Для этого вам нужно знать машинный язык только в том случае, если вы пишете ассемблеры, и вам нужно знать микрокод и / или схемы только при создании процессоров.

4
ответ дан 1 December 2019 в 03:05
поделиться

Как уже упоминалось, обычно сравнение выполняется посредством вычитания.
Например, Процесс сборки / управления X86 .

На аппаратном уровне есть специальные цифровые схемы для выполнения вычислений, такие как сумматоры .

1
ответ дан 1 December 2019 в 03:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: