Итак, у меня есть эта проблема, которую я должен решить, и я потратил часы, пытаясь найти лучший способ сделать это, Google не очень помог.Masm assembly 8086 нести флаг между добавлением слова данных
Проблема заключается в создании подпрограммы, которой присваивается список слов, которые вы затем добавляете с другим списком, который становится выходом. Это в основном метод работы с большими числами.
Мой код отлично подходит для флагов переноса в пределах слов, но для флага переноса от одного полного слова к другому он не работает. Первое 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
;---------------------------------------
Remainder: 'cmp' будет изменять флаг' CF', в то время как 'mov' не будет. – MikeCAT