You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

8051汇编:双字节无符号数乘单字节数相关问题咨询

8051汇编程序问题解答

问题1:双字节数具体是多少?

你猜测的43是错误的,双字节数的组成逻辑是最高有效字节(MSB)×256 + 最低有效字节(LSB)——因为每个字节占8位,代表0-255的数值,高位字节需要左移8位(即乘256)后和低位字节相加。
给定MSB=4,LSB=3,计算得:
4 × 256 + 3 = 1027
这个双字节数是十进制1027,对应十六进制为0403H。

问题2:与16相乘后的结果及乘法过程

乘法过程(结合汇编代码分析)

子程序MUL21实现的是双字节数(R1,R0)和单字节数(R2)的乘法,结果存放在三字节寄存器R6(最高位)、R5(中间位)、R4(最低位),步骤如下:

  1. 计算低位字节×乘数:
    • 将R0(3)和R2(16)放入A、B寄存器执行mul AB,得到3×16=48
    • 乘积的低字节(48)存入R4,高字节(0)存入R5,此时R5=0,R4=48
  2. 计算高位字节×乘数并累加:
    • 将R1(4)和R2(16)放入A、B寄存器执行mul AB,得到4×16=64
    • 乘积的低字节(64)和之前的R5(0)相加,结果64存入R5
    • 乘积的高字节(0)加上进位(此处加法无进位,进位为0),结果0存入R6
  3. 最终三字节结果:R6=0,R5=64,R4=48

最终结果

将三字节转换成十进制:
0 × 65536 + 64 × 256 + 48 = 16384 + 48 = 16432
也可以直接用双字节数1027×16=16432(乘16等价于二进制左移4位,和汇编计算逻辑一致),用24位数值表示为十六进制00 40 30H或十进制16432。


附完整汇编代码

;main.s03
name MAIN
extern _R,MUL21
rseg CODE
mov PSW,#_R
mov SP,#BSTACK-1

mov R0,#3 ;number 1, lsb
mov R1,#4 ; msb
mov R2,#16 ;number 2
lcall MUL21 ;result R6,R5,R4

sjmp $

rseg ISTACK
BSTACK: ds 8

end

;mul21.s03
name MUL21
extern _R
public MUL21
rseg CODE
MUL21: mov A,R0
mov B,R2
mul AB
mov R4,A
mov R5,B ;R5,R4=R0*R2

mov A,R1
mov B,R2
mul AB
add A,R5
mov R5,A
mov A,B
addc A,#0
mov R6,A ;R6,R5+=R1*R2,R4

ret

end

内容的提问来源于stack exchange,提问作者HaxerOne

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 16:25:22