Как мы используем два 32-битных регистра (32 + 32 = 64) одновременно, чтобы он мог принимать 64-битные значения? Язык ассемблера 8086

ЯЗЫК АССАМБЛЕИ 8086:

Я сделал программу для добавления, она принимает два значения в консоли и дает нам результат.. она может принимать значение только ниже 32 бита (8 цифр), если мы дадим более высокое значение, то это даст ошибку целого числа переполнение в консоли winbdow..

Если я хочу дать более 32-битное значение в input1 и input2, как я это сделаю? это можно сделать, создав массив DWORD (32 бита) и поместив половину (16 бит) половину (16 бит) значений

например:

массив1 DWORD 2 DUP(?)

массив2 DWORD 2 DUP(?)

Я хочу добавить значение1 к значению2 с помощью 32-битного регистра и дать значение под 64-битным (равно 16 цифрам).. Можно ли использовать пространство 2 рег (32 + 32 = 64 бит)?...

Как мы можем сделать 2 32-битных регистра, чтобы сделать их 64-битными, я знаю, что это возможно, но я не знаю, как это сделать... потому что я новичок в языке ассемблера.

Я использую библиотеки ссылок KIP.R.IRVINE на языке ассемблера.

как мы дадим 64-битное значение, используя 2 32-битных регистра? или как мы разрешим 2 32-битным регистрам принимать 64-битные значения? я не знаю, как это кодировать..нужна помощь в кодировании

вот код для 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

person Mustafa Halai    schedule 22.04.2013    source источник


Ответы (1)


8086 (и все другие процессоры, которые я использовал) поддерживают набор «кодов состояния», который включает «бит переноса» (эти цитируемые термины предназначены для вашего удовольствия от поиска в Google).

Когда вы добавляете две 32-битные величины без знака, бит переноса будет установлен, если сумма превысит 32 бита. Вы можете добавить столько 32-битных (или 64-битных) величин, сколько захотите, если вы включаете бит переноса из предыдущего добавления.

person Community    schedule 22.04.2013
comment
Это инструкция АЦП - person James; 22.04.2013
comment
Парсифаль. Если я хочу дать 1-е значение и 2-е значение более 32 бит ... тогда это проблема .. - person Mustafa Halai; 23.04.2013
comment
Если вам нужно работать с 64-битными числами на 32-битном процессоре, а не просто разрешать 64-битные результаты из 32-битной математики, вам нужно написать все свои собственные математические функции, которые потребляют 64-битные числа в двух 32-битных регистрах. В неассемблерном мире есть различные библиотеки BigNum, которые делают это. - person Patrick Hughes; 23.04.2013
comment
@MustafaHalai - в чем проблема? Вы читали о кодах состояния? Или смотрели документацию операции ADC? (спасибо, Джеймс, прошло более 20 лет с тех пор, как я программировал 8086) - person parsifal; 23.04.2013
comment
Для всех, кто может отправить закрытое голосование: это дубликат вопроса, который ОП задал два дня назад: stackoverflow.com/questions/16125998/ - person parsifal; 23.04.2013