2013-04-22 3 views
0

어셈블리 언어 8086 :우리는 64 비트 값을 취할 수 있도록 한 번에 두 개의 32 비트 reg (32 + 32 = 64)을 사용합니까? 어셈블리 언어 8086

나는 그것이 콘솔에서 두 값을 받아 우리가 더 높은 주면 .. 그것은 단지 32 비트 (8 자리)에서 값을 취할 수있는 결과를 부여합니다 추가 할 프로그램을 가지고 값을 입력하면 콘솔 winbdow에서 정수 오버플로 오류가 발생합니다 ..

입력 1과 입력 2에서 32 비트 값을 더주고 싶다면 어떻게해야합니까?이 DWORD (32 비트)의 배열을 수행하고 넣을 수의 절반 (16 비트)의 절반 (16 비트)의 값

(?)

배열 1의 DWORD 2 DUP

배열 2 DWORD 2 DUP (?)

32 비트 레지스터를 사용하여 value2에 값 1을 더하고 64 비트 (16 자리 숫자) 이하의 값을 지정하고 싶습니다. 2 reg (32 + 32 = 64 비트)의 공간을 사용할 수 있습니다. ? ...

우리가 64 비트로 만들기 위해 32 비트의 2 레지스터를 만들 수 있습니다. 가능하다는 것을 알고 있지만 어떻게해야할지 모르겠군요 ... 어셈블리 언어에서 새롭기 때문에 ...

나는 KIP.R.IRVINE 링크를 사용하고 있습니다. 어셈블리 언어의 라이브러리

2 32 비트 reg를 사용하여 64 비트 값을 제공하는 방법은 무엇입니까? 또는 2 32 비트 reg에서 64 비트 값을 가져 오는 방법은 무엇입니까? 내가 32 비트 추가에 대한 코드는 여기

코딩에 it..need 도움을 코딩하는 방법을 잘 모릅니다 :

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 

답변

1

8086 (내가 사용했던 다른 모든 프로세서) "캐리 비트"를 포함하는 "조건 코드"세트를 유지하십시오 (인용 된 용어는 인터넷 검색을위한 것입니다).

부호없는 32 비트 수량을 두 개 추가하면 합계가 32 비트를 초과하면 캐리 비트가 설정됩니다. 이전 추가에서 캐리 비트를 통합하는 한 원하는만큼 많은 32 비트 (또는 64 비트) 수량을 추가 할 수 있습니다.

+0

ADC 명령 – James

+0

Parsifal.if 32 비트보다 두 번째 값과 두 번째 값을주고 싶습니다. 그러면 문제가됩니다 .. –

+0

32 비트 프로세서에서 64 비트 숫자로 작업해야하고 32 비트 수학에서 나온 64 비트 결과는 두 개의 32 비트 레지스터에서 64 비트를 먹는 모든 수학 함수를 작성해야합니다. 어셈블리가 아닌 세계에는이를 수행하는 다양한 "BigNum"라이브러리가 있습니다. –