2025-11-08 06:29:25
单片机里的正负数就像存钱罐里的和,正数用普通数字存,负数用补码存。负转移就是往回跳,正转移就是往前跳。比如JZ -5就是往回跳5步,JZ +3就是往前跳3步。跳步的地址用PC(程序计数器)算的,负数跳的时候PC要减偏移量,正数跳的时候PC要加偏移量。
为啥负数跳是减呢?因为单片机用补码存负数,比如8位里-5存成1011,实际是128-5=123。跳转指令算地址时,负数偏移量要和PC相加,但因为补码是反的,所以得用减法。比如PC=100,跳-5,实际算100+(-5)=95,但存的是补码1011,单片机自动转成100-5=95。数据手册里说,比如AT89C51的PC最大能到65535,跳-128就是65535-128=65407,跳+127就是65535+127=65662。负数跳转用减法,正数跳转用加法,这样算出来的地址才对得上补码存的数值。
本题链接: