我想把一个半字节从累加器移到P1的高位半字节。
现在,我一点一点地设置半字节
MOV C, ACC.3
MOV P1.7, C
MOV C, ACC.2
MOV P1.6, C
MOV C, ACC.1
MOV P1.5, C
MOV C, ACC.0
MOV P1.4, C
这对我来说似乎很糟糕:它需要12个指令周期且代码很长。我希望SWAP
和XCHD
能够解决问题,但间接寻址在SFR内存区似乎不起作用。
是否有更快或更短(不一定是两种)的编码方式?我想不要接触P1的下半部分。
答案 0 :(得分:1)
我不熟悉那个CPU,但你可以用1 AND
,1 SHL
和1 OR
对字节进行操作。
在英特尔8086+上,al
代表8位 - ACC
而bl
代表8位 - P1
,它会是这样的:
and bl, 0x0f # clear high nybble
ror al, 8 # or shl 8 if accumulator can be discarded
or bl, al
答案 1 :(得分:1)
如果您使用P1的低4位作为输入,您希望将它们设置为<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:background="@color/colorPrimaryDark"
android:layout_height="match_parent">
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal" android:layout_width="match_parent"
android:background="@android:color/transparent"
android:weightSum="3"
android:gravity="center_vertical"
android:layout_height="?attr/actionBarSize">
<ImageView
android:layout_weight="1"
android:layout_width="0dp"
android:layout_gravity="left"
android:layout_height="match_parent"
android:src="@drawable/ic_list"
android:id="@+id/tab1"
android:padding="12dp" />
<ImageView
android:layout_weight="1"
android:layout_width="0dp"
android:layout_gravity="left"
android:layout_height="match_parent"
android:src="@drawable/ic_connect"
android:id="@+id/tab2"
android:padding="12dp" />
<ImageView
android:layout_weight="1"
android:layout_width="0dp"
android:layout_gravity="left"
android:layout_height="match_parent"
android:src="@drawable/ic_chat"
android:id="@+id/tab3"
android:padding="12dp" />
</LinearLayout>
<FrameLayout
android:id="@+id/pager"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</RelativeLayout>
,并且很容易将其组合到您的代码中。
1
如果您将它们用作输出,则可以使用read-modify-write,例如:
swap A
orl A, #15
mov P1, A
注意,这将暂时将引脚3-7归零。如果这是不可接受的,则必须在寄存器中计算新值。