Итак, одна из проблем, с которыми я столкнулся на экзамене, состоит в том, чтобы сделать эту группу кода более эффективной с помощью как минимум на 1 строку меньше команды.
И я не знал, как это сделать. Цель этого кода - получить 4 правых бита первого числа, левые биты второго числа из массива (адрес которого находится в si), а затем объедините эти 8 битов и поместите результат в 8-битный регистр.
0dh - это ASCII для ввода, мне нужно убедиться, что ввод не является одним из символов, которые вводил пользователь, если его значение 0 должно заменить его (массив - это массив символов)
Это код:
Я подумал, может, она просто хотела получить строку, которая не влияет на возвращаемое значение, за пределы функции, но она сказала мне, что это не то, что она имела в виду, так что это неправильно.
cmp [byte ptr si],0Dh
je LessThan4
mov al,[si]
shl al,4;(a)-first nibble
inc si
cmp [byte ptr si],0Dh
je LessThan4
mov dl,[si]
and dl,240;11110000b
shr dl,4;(b)-second nibble
or al,dl;al=ab merging the nibbles
inc si
jmp Normal
LessThan4:
mov[byte ptr si],0
Normal:
ret
Исключительным результатом является использование 1 команды, которая заменит 2 команды в текущем коде.
Изменить: Честно говоря, я не знаю, почему я использовал эту строку: mov [byte ptr si], 0
Мне это не нужно, мне нужно поставить 0 вместо ввода, если есть ввод. Но это происходит в одиночку, потому что функция завершается, если в массиве есть ввод, и 0 - это то, что заменяет второй полубайт или оба полубайта, но мне нужно было убедиться, что al равно 0.
Если это то, что она имела в виду, я так смущен и склонен, потому что я не смогу найти предмет, который хочу изучать в следующем году в нашем классе.):):):):):
Я должен был видеть это довольно легко, так что это очень плохо для меня ...