Assembly 汇编:如何使用16位寄存器添加两个64位数字?

Assembly 汇编:如何使用16位寄存器添加两个64位数字?,assembly,nasm,Assembly,Nasm,我搜索了大约一天,但找不到任何关于在assembly-Nasm中添加64位数字的内容 我该怎么做 我的寄存器只有16位,我有两个64位的数字。我正在使用的应用程序是Nasm。(用于学校项目)您必须将64位数字拆分为16位寄存器,然后从最低有效字开始分别添加部分。请注意,对于较高的字,您必须使用adc(带进位添加),因为如果先前的结果不适合16位,则必须将1添加到结果字中。如果对第一个单词使用普通add,则在添加之前不必清除进位标志 a: dq 0 ; first operand

我搜索了大约一天,但找不到任何关于在assembly-Nasm中添加64位数字的内容

我该怎么做


我的寄存器只有16位,我有两个64位的数字。我正在使用的应用程序是Nasm。(用于学校项目)

您必须将64位数字拆分为16位寄存器,然后从最低有效字开始分别添加部分。请注意,对于较高的字,您必须使用
adc
(带进位添加),因为如果先前的结果不适合16位,则必须将1添加到结果字中。如果对第一个单词使用普通
add
,则在添加之前不必清除进位标志

a: dq 0         ; first operand
b: dq 0         ; second operand and result

; ...

mov ax, [a]     ; bits 0..15
mov bx, [a + 2] ; bits 16..31
mov cx, [a + 4] ; bits 32..47
mov dx, [a + 6] ; bits 48..63

add [b], ax
adc [b + 2], bx
adc [b + 4], cx
adc [b + 6], dx
我认为ADC(带进位的add)指令将对您有用。启动前不要忘记CLC(清除进位标志)。