Так что одна из задач, стоявших передо мной на экзамене, — сделать эту группу кода более эффективной, по крайней мере, с командой на 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. Если это то, что она имела в виду, я так смущен и наклонен, потому что я, возможно, не смогу добраться до предмета, который я хочу изучить в следующем году в нашем классе.): ): ): ): ): я должен был быть в состоянии увидеть это довольно легко, так что это действительно плохо для меня ...
cmp [si], 0dh; je LessThan4
. Как это согласуется с вопросом? Если вы просто хотите объединить кусочки, попробуйтеmov ax, [word ptr si]; rol ax, 4
. Это оставляет результат в al. - person fuz   schedule 21.06.2019and dl,240
.) - person Raymond Chen   schedule 21.06.2019