汇编语言 8086:
我已经制作了一个加法程序,它在控制台中取两个值并给我们结果..如果我们给出更高的值,它只能取32 位(8 位)以下的值,那么它将在控制台 winbdow 中给出整数溢出错误..
如果我想在 input1 和 input2 中提供超过 32 位的值,我该怎么做?可以通过制作 DWORD(32 位)数组并放入一半(16 位)一半(16 位)值来完成
例如:
array1 DWORD 2 DUP(?)
array2 DWORD 2 DUP(?)
我想通过使用 32 位寄存器将 value1 添加到 value2 并在 64 位(等于 16 位)下给出值.. 可以使用 2 reg 的空间(32 + 32 = 64 位)?...
我们如何制作 2 个 32 位寄存器使其成为 64 位我知道这是可能的,但我不知道该怎么做......因为我是汇编语言的新手
我在汇编语言中使用 KIP.R.IRVINE 链接库
我们将如何使用 2 个 32 位 reg 给出 64 位值?或者我们如何使 2 32bit reg 取 64bit 值? 我不知道如何编码..需要编码方面的帮助
这是 32 位加法的代码:
INCLUDE Irvine32.inc
; In above i am calling KIP.R.IRVINE Link Library for assembly language
.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