首页 > 解决方案 > 这条线如何将无符号短整数与数组相乘?

问题描述

8086tiny 源代码的111 行有:

out_regs[i_w + 1] = (op_result = CAST(op_data_type)mem[rm_addr] * (op_data_type)*out_regs) >> 16, \

该行来自宏:

// [I]MUL/[I]DIV/DAA/DAS/ADC/SBB helpers
#define MUL_MACRO(op_data_type,out_regs) (set_opcode(0x10), \
                                      out_regs[i_w + 1] = (op_result = CAST(op_data_type)mem[rm_addr] * (op_data_type)*out_regs) >> 16, \
                                      regs16[REG_AX] = op_result, \
                                      set_OF(set_CF(op_result - (op_data_type)op_result)))

CAST宏是:

// Reinterpretation cast
#define CAST(a) *(a*)&

第 386 行

i_w ? MUL_MACRO(unsigned short, regs16) : MUL_MACRO(unsigned char, regs8)

这是如何初始化mem的:regs16regs8

#define RAM_SIZE 0x10FFF0
unsigned char mem[RAM_SIZE], *regs8;
unsigned short *regs16;

所以我的问题是:如何CAST(op_data_type)mem[rm_addr]乘以(op_data_type)*out_regswhile mem[rm_addr]is a unsigned short(or unsigned char) and out_regsis a array?谢谢你的帮助!

标签: arraysc

解决方案


推荐阅读