2つの整数をビットごとに減算しようとしていて、このアルゴリズムが与えられました
b = 0
difference = 0
for i = 0 to (n-1)
x = bit i of X
y = bit i of Y
bit i of difference = x xor y xor b
b = ((not x) and y) or ((not x) and b) or (y and b)
end for loop
この行まで実装しましたb = ((not x) and y) or ((not x) and b) or (y and b)
。コードでアルゴリズムの最後の行をどのように実装すればよいですか
これは私がこれまでに持っているものです:
INCLUDE Irvine32.inc
.data
prompt1 BYTE "Enter the first integer: ",0dh,0ah,0
prompt2 BYTE "Enter the second integer: ",0dh,0ah,0
prompt3 BYTE "The first integer entered is not valid ",0dh,0ah,0
prompt4 BYTE "The second integer entered is not valid ",0dh,0ah,0
X byte 0
Y byte 0
diff byte 0
.code
main PROC
L1:
mov edx, OFFSET prompt1
call writeString
xor edx, edx
call readInt
js printError1
cmp eax, 0ffh
jg printError1
mov X, al
xor eax, eax
L2:
mov edx, OFFSET prompt2
call writeString
xor edx, edx
call readInt
js printError2
cmp eax, 0ffh
jg printError2
mov Y, al
xor eax, eax
jmp calculation
printError1:
mov edx, OFFSET prompt3
call writeString
xor edx, edx
jmp L1
printError2:
mov edx, OFFSET prompt4
call writeString
xor edx, edx
jmp L2
calculation:
mov ebx, 0
mov diff, 0
mov ecx, 7
subtract:
mov al, X
and al, 1h
mov dl, Y
and dl, 1h
xor al, dl
xor al, bl
mov diff, al
rol X, 1
rol Y, 1
loop subtract
exit
main ENDP
END main
アルゴリズムは、計算ループ ラベルから開始します。al
アルゴリズムの最後の行を実装するために、レジスタに格納された値を保存する必要がdl
ありbl
ましたが、使用されているため、どの汎用レジスタを使用して値を格納する必要がありal
ますか?