80x86汇编中能否用ADD AX, BL/SUB AX, BL?寄存器操作数需同位数吗?
关于80x86汇编中ADD/SUB指令寄存器操作数的问题
ADD AX, BL或SUB AX, BL属于非法指令:AX是16位寄存器,BL是8位寄存器,二者位数不匹配,x86指令集不支持这种跨位数的寄存器操作数组合,汇编器会直接报错。- 寄存器操作数的位数必须完全一致:当ADD/SUB的两个操作数均为寄存器时,要求二者的位数严格相同,比如:
- 8位寄存器间的合法指令:
ADD AL, BL、SUB BH, CL - 16位寄存器间的合法指令:
ADD AX, BX、SUB DX, CX - 32位、64位寄存器的算术操作同理,必须同位数配对
- 8位寄存器间的合法指令:
x86指令集的设计逻辑里,算术运算指令要求操作数宽度统一,避免硬件执行时额外的位数扩展/截断处理,以此保证指令执行的效率与正确性。你查阅指令集手册得到的结论是正确的,这类跨宽度的寄存器操作组合在80x86汇编中不被允许。
内容的提问来源于stack exchange,提问作者Poca
相关产品推荐
相关产品推荐

