# برنامه نویسی سطح پایین > برنامه نویسی اسمبلی خانواده x86 >  جمع دو عدد 32 بیتی

## atenaa

چه طوری می تونم 2 عدد 32 بیتی رو با هم جمع کنم؟
یا اصلا یه عدد که از DOUBLE WORD تعریف شده رو  می تونم تو  رجیستر ها بریزم و بعدش با هم جمعشون کنم
می دونم ساده است ولی منم مبتدی ام
لطفا راهنماییم کنید

----------


## mortezamsp

فکرکنم فکرکنم فکرکنم   که باید اون رو به چهار عدد هشت بیتی تقسیم کنی و بعد این اعداد رو باهم جمع کنی.
یعنی برنامه از کاربر چهار بار عدد هشت بیتی رو بگیره و هر باز با دستور adc رقم نقلی قبلی رو هم حساب کنه.

یا اینکه مثلا ثبات ax رو به سه ثبات دیگه گسترشش بدی.در این مورد کمتر میدونم.

----------


## Younes

d1   dd    0
d2   dd    0
d3   dd    0

mov   ax,word ptr d1
add  ax,word ptr d2
mov   word ptr d3,ax
mov   ax,word ptr d1+2
adc   ax,word ptr d2+2
mov   word ptr d3+2,ax

mov

----------


## regbyte

میشه یه مثال کامل بزنید که دو عدد را بگیرد و ...

لطفا راهنمایی کنید.

----------


## tdkhakpur

سلام:
باید بدونید که هر کدوم از رجیسترها 16 بیت یعنی 2 بایت هستند پس شما به دو رجیستر احتیاج دارید تا یه رقم 32 بیتی رو درش قرار بدید یعنی شما عددتون رو در دو قسمت در axو bx قراردهید و روش زیر رو پیاده سازی کنید.(توجه داشته باشید که ممکن است حمع عددها carry هم داشته باشن پی اونها رو هم add کنید.)

 
number1 dd 12365
number2 dd 73365
result     dd ?
 
mov ax, word ptr number1+0
mov bx, word ptr number2+0
add  ax, bx
mov dx, ax
 
mov  ax, word ptr number1+2
mov  bx, word ptr number2+2
adc  ax, bx
mov word ptr result+0, dx
adc  ax, bx
mov word ptr result+2, ax

نتیجه در resultقرار خواهد گرفت.
اگه اشکال دستوری درش باشه اصلاحش کن و لی روش کلی همینه.
موفق باشید

----------


## adelking200071

اینی که من نوشتم و تست شده با امولاتور 8086
sseg segment stack
 DW 32 DUP(?)
 sseg ends
 ;---------------------------------
 dseg segment
number1 dd 1234H
number2 dd 5678H
number3 dd AB55H
number4 dd 65AFH
result  dd ?
 dseg ends
 ;----------------------------------
 cseg segment
 assume cs:cseg,ds:dseg,ss:sseg
  main proc near
 mov AX,dseg
 mov DS,AX
mov ax, number1
mov bx, number2
mov cx,number3
mov dx,number4


add bx,dx
adc ax,cx


add [result+2],ax
mov result,bx

mov ax,4c00h
int 21h

 cseg ends
  endp main
 end main

----------


## سحر 6856

ممكنه تفريق 32 بيتي با SUB رو هم بفرماييد؟

----------


## 7omid7

> اینی که من نوشتم و تست شده با امولاتور 8086
> sseg segment stack
>  DW 32 DUP(?)
>  sseg ends
>  ;---------------------------------
>  dseg segment
> number1 dd 1234H
> number2 dd 5678H
> number3 dd AB55H
> ...


سلام میشه راهنمایی کنید که هر خط چه عملی انجام میده ؟

----------

