アセンブリ言語 8086:
加算用のプログラムを作成しました。コンソールで2つの値を取り、結果を返します。より高い値を指定すると、32ビット(8桁)未満の値しか取ることができず、コンソールで整数オーバーフローのエラーが発生します
input1 と input2 に 32 ビット以上の値を指定したい場合、どうすればよいですか?
32bitレジスタを使ってvalue1にvalue2を加算し、64bit以下(16桁)の値を与えたいのですが、2reg(32+32=64bit)の空間を使用することは可能ですか? ...
32ビットの2つのレジスタを作成して64ビットにする方法は可能ですが、その方法がわかりません...アセンブリ言語が初めてなので
アセンブリ言語で KIP.R.IRVINE リンク ライブラリを使用しています
2 つの 32 ビット reg を使用して 64 ビットの値を与えるにはどうすればよいでしょうか。または、2 つの 32 ビット reg を有効にして 64 ビット値を取得するにはどうすればよいでしょうか。
32ビット加算のコードは次のとおりです。
INCLUDE Irvine32.inc
.data
Addition BYTE "A: Add two Integer Numbers", 0
inputValue1st BYTE "Input the 1st integer = ",0
inputValue2nd BYTE "Input the 2nd integer = ",0
outputSumMsg BYTE "The sum of the two integers is = ",0
num1 DD ?
num2 DD ?
sum DD ?
.code
main PROC
;----Displays addition Text-----
mov edx, OFFSET Addition
call WriteString
call Crlf
;-------------------------------
; calling procedures here
call InputValues
call addValue
call outputValue
call Crlf
jmp exitLabel
main ENDP
; the PROCEDURES which i have made is here
InputValues PROC
;----------- For 1st Value--------
call Crlf
mov edx,OFFSET inputValue1st ; input text1
call WriteString
; here it is taking 1st value
call ReadInt ; read integer
mov num1, eax ; store the value
;-----------For 2nd Value----------
mov edx,OFFSET inputValue2nd ; input text2
call WriteString
; here it is taking 2nd value
call ReadInt ; read integer
mov num2, eax ; store the value
ret
InputValues ENDP
;---------Adding Sum----------------
addValue PROC
; compute the sum
mov eax, num2 ; moves num2 to eax
add eax, num1 ; adds num2 to num1
mov sum, eax ; the val is stored in eax
ret
addValue ENDP
;--------For Sum Output Result----------
outputValue PROC
; output result
mov edx, OFFSET outputSumMsg ; Output text
call WriteString
mov eax, sum
call WriteInt ; prints the value in eax
ret
outputValue ENDP
exitLabel:
exit
END main