所以我有这个我应该解决的问题,我花了几个小时试图找出最好的方法来做到这一点,谷歌并没有太多帮助。
问题是创建一个子例程,它给出一个单词列表,然后添加另一个列表作为输出。它基本上是一种处理大量数字的方法。
我的代码适用于单词中的进位标志,但对于从一个完整单词到另一个单词的进位标志,它不起作用。第一个 16 位字(下例中的 0005)是一个标志,用于告诉我的子程序有多少字。
例如,给定以下输入,
//si 0005 0000 EEEE DDDD CCCC BBBB
//di 0005 0000 1111 2222 3333 4445
当预期的输出是:
0005 0001 0000 0000 0000 0000
我的代码产生:
0005 0000 FFFF FFFF FFFF 0000
我相信我理解为什么大部分情况会发生这种情况,但不确定解决此问题的最佳方法。我需要一种在不同数据块之间传递 1 的低成本方法。
;---------------------------------------
; ADD Subroutine
;---------------------------------------
.data
bxx dw 0000h ;
cxx dw 0000h ;
.code
;---------------------------------------
addx: ;
mov bxx, bx ;save incoming register
mov cxx, cx ;save incoming register
mov bx, si ;move n to bl - acts as a cursor
loopAdd: ;loop point
mov cx, [si+bx] ;move word at point si+bx into register cx
ADC [di+bx], cx ;add with carry
sub bx, 0002h; ;decrement cursor by a full word
cmp bx, 0000h ;bx == 0?
jg loopAdd ;no? jump to loop point
end: ;
mov bx, bxx ;return register to original state
mov cx, cxx ;return register to original state
ret ;return
;---------------------------------------