← 返回笔记列表

3.2移位操作与流控制

2026-03-22
计组汇编
引入~逻辑操作:也叫位操作,一般处理AND与,OR或,NOT非,EOR异或 一:移位操作 [[IMG:https://p.cldisk.com/star4/814e06bd719622e04681d4880f9f30c0/origin.jpg?rw=1296&rh=399&_fileSize=141178]] 与操作:也就是如果和1相与则保留原位,如果和0,相与那就是0,可以进行保留操作,要保留的和1进行与操作,通常如图所示:与00001111可以保留后四位(即原位和0) 或操作:也就是如果和1相或则全为1,如果和0相或则保留原位,可以进行合并操作,即把不保留的位全换成0,要保留的位留下,与0相进行或操作,通常如图所示:或00001111,保留高四位(即原位和1) 非操作:即取反操作 异或操作:两个相同取0,不同取1(通常和1异或即取反,和0异或操作得到本身) 应用: [[IMG:https://p.cldisk.com/star4/bf0c6d2fa6987afa7dbeaef07facf6fd/origin.jpg?rw=1458&rh=639&_fileSize=148236]] 展示一个例子~ [[IMG:https://p.cldisk.com/star4/9db07e9d57520c6a85f3667b7f38472f/origin.jpg?rw=1476&rh=407&_fileSize=191863]] 这个就是我们先把r0与10101111即保留除了第二位b和第四位d的其他位,把这两位清为0,之后我们再和10001100进行或操作,保留bcd位和gh位,其余替换为1,因为bd这两位已经是0,aef替换为1,所以是10c011gh,再将h位取反,如果h为0那就是1,如果h是1,那就是0,所以是取反 二.特殊指令 [[IMG:https://p.cldisk.com/star4/a5760055d21e874c4b25f631a1495acc/origin.jpg?rw=1427&rh=678&_fileSize=153831]] BIC是位清0指令:用BIC配合立即数,可以高效地清零任意指定的位段,同时保留其余位 我们看最后的例子~,0xFF也就是八位二进制1111 1111拓展到32位也就是0000……000后八位是1,进行取反之后前24位是1,后8位是0,之后再进行与操作,所以与1的地方保留,0的地方请0,实现复制加清0操作 补充: 1.BFC位域清0指令 BFC Rd,#,# 即是将Rd指定位域从第Isb开始的width宽度清0,Isb是位域中的最低有效位也就是我们默认32位二进制的低位开始数数,width为宽度,即Isb和他的左边 BFC,R0,#4,#10 就是从R0的第四位到第13位清0,也就是对应第五个位置到第14个位置清0 2.BFI位域插入指令 BFI.W Rd,Rn,#,# (W是write)将Rn插入指定位域,也依旧是从Rd的第Isb开始,之后加上宽度的位置,需要替换,但是我们的宽度位数是从Rn的第0位开始计算的,不是Isb对应位置 Rn = 0x3456789A(我们只关心它的低几位) - 执行 BFI Rd, Rn, #8, #16 那么: - 从 Rn 的低 16 位(即 0x789A)取出. - 将它们插入到 Rd 的 bit 8 到 bit 23 的位置. - Rd 的其他位(bit 0~7 和 bit 24~31)保持不变.