有如下C代码:
unsigned int res = 0x368B;//int型为16位变量
res |= ADRESH << 8; //ADRESH为一个8位寄存器
PIC编译器编译为如下汇编代码(该单片机没有或运算),请问这里或运算为什么和同或运算等价呢?先谢过!
33: unsigned int res = 0x368B;
0013 308B MOVLW 0x8B
0014 00F6 MOVWF res
0015 3036 MOVLW 0x36
0016 00F7 MOVWF 0x77
34: res |= ADRESH << 8;
0017 1283 BCF STATUS, 0x5 ;bank选择,可忽略
0018 1303 BCF STATUS, 0x6 ;bank选择,可忽略
0019 081E MOVF ADRESH, W ;把ADRESH放入W寄存器(W寄存器为一个8位通用寄存器)
001A 00F4 MOVWF 0x74 ;W->(0x74)
001B 01F5 CLRF 0x75 ;(0x75) = 0
001C 0874 MOVF 0x74, W ;(0x74)->W
001D 00F5 MOVWF 0x75 ;W->(0x75)
001E 01F4 CLRF 0x74 ;(0x74) = 0
001F 0874 MOVF 0x74, W ;(0x74)->W
0020 04F6 IORWF res, F ;(res)同或W并存放到(res),为什么是同或?
0021 0875 MOVF 0x75, W ;(0x75)->W
0022 04F7 IORWF 0x77, F ;(0x77)同或W并存放到(0x77)??????
unsigned int res = 0x368B;//int型为16位变量
res |= ADRESH << 8; //ADRESH为一个8位寄存器
PIC编译器编译为如下汇编代码(该单片机没有或运算),请问这里或运算为什么和同或运算等价呢?先谢过!
33: unsigned int res = 0x368B;
0013 308B MOVLW 0x8B
0014 00F6 MOVWF res
0015 3036 MOVLW 0x36
0016 00F7 MOVWF 0x77
34: res |= ADRESH << 8;
0017 1283 BCF STATUS, 0x5 ;bank选择,可忽略
0018 1303 BCF STATUS, 0x6 ;bank选择,可忽略
0019 081E MOVF ADRESH, W ;把ADRESH放入W寄存器(W寄存器为一个8位通用寄存器)
001A 00F4 MOVWF 0x74 ;W->(0x74)
001B 01F5 CLRF 0x75 ;(0x75) = 0
001C 0874 MOVF 0x74, W ;(0x74)->W
001D 00F5 MOVWF 0x75 ;W->(0x75)
001E 01F4 CLRF 0x74 ;(0x74) = 0
001F 0874 MOVF 0x74, W ;(0x74)->W
0020 04F6 IORWF res, F ;(res)同或W并存放到(res),为什么是同或?
0021 0875 MOVF 0x75, W ;(0x75)->W
0022 04F7 IORWF 0x77, F ;(0x77)同或W并存放到(0x77)??????