0

汇编语言 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
4

1 回答 1

1

8086(以及我使用过的所有其他处理器)维护一组“条件代码”,其中包括一个“进位”(引用的术语是为了您的谷歌搜索乐趣)。

当您添加两个无符号 32 位量时,如果总数超过 32 位,则将设置进位位。您可以根据需要添加任意数量的 32 位(或 64 位)数量,只要您合并了之前添加的进位位。

于 2013-04-22T17:52:28.887 回答