پاسخ : اموزش DSP
سلام دوستان. من برگشتم بابت وقفه دو سه روزه هم شرمنده.
خوب می سراغ ادامه دستورات ADD .برای بقیه دستورات ADD تاثیر پذیری پرچم ها رو توضیح نمیدم چون همشون تقریبا مثل همدیگن البته برای اطلاع دقیقتر می تونید به منابع موجود مراجعه کنید.
ADD ACC,LOC16<<T :
عملوند رجیستر ACC می باشدو T نیز 16بیت بالای رجیستر XT می باشد
شرح دستور:مقدار اشاره شده به وسیله LOC 16 بعد از شیفت به رجیستر ACCاضافه می شود.مقدار شیفت به وسیله چهار بیت کم ارزشتر رجیستر T مشخص می شود.بیتهای بالای رجیستر T نادیده گرفته می شود.مقدار شیفت داده شده اگر SXM=1 باشد شامل گسترش بیت علامت می شود و اگر فعال نباشد مقدار شیفت داده شده به وسیله صفر پر می شود.
جمع دو مقدار علامت دارACC=(VarA<<SB)+(VarB<<SB)
خوب می ریم سراغ دستور ADD بعدی دیگه فکر کنم خودتون می تونید عملوند یا مد ادرس دهی و این چیزارو تشخیص بدید .پس من برای خلاصه کردن مبحث دیگه این چیزا رو توضیح نمیدم مگر اینکه چیز جدیدی باشه.
این دستور مقدار شیفت داده شده محتوای مکان اشاره شده را به رجیستر ACC اضافه می کند.
عملکرد بیت SXM مانند دستورات قبلی می باشد.
محتوای امکان اشاره شده به رجیستر AX اضافه می کند و نتیجه را در رجیستر AX ذخیره می کند.
محتوای رجیستر AX را با محتوای مکان اشاره شده به وسیله loc16 اضافه می کند و نتیجه را در loc16 ذخیره می کند.
مقدار علامت دار ثابت 16 بیتی را با محتوای علامت دار اشاره شده به وسیله loc16 جمع می کند و حاصل را در مکان اشاره شده به وسیله loc16 ذخیره می کند.
یک مقدار ثابت 8 بیتی را با رجیستر ACC جمع می کند.
ACC=ACC + 0:8bit;
مقدار ثابت 8 بیتی علامت دار را با رجیستر AX جمع می کند و نتیجه را در AX ذخیره می کند.
AX=AX + S:8bit;
یک مقدار ثابت 7 بیتی را به SP اضافه می کند
SP=SP + 0:7bit;
یک مقدار ثابت 7 بیتی را به رجیستر XARn اضافه می کند.
XARn= XARn +0:7bit;
سلام دوستان. من برگشتم بابت وقفه دو سه روزه هم شرمنده.
خوب می سراغ ادامه دستورات ADD .برای بقیه دستورات ADD تاثیر پذیری پرچم ها رو توضیح نمیدم چون همشون تقریبا مثل همدیگن البته برای اطلاع دقیقتر می تونید به منابع موجود مراجعه کنید.
ADD ACC,LOC16<<T :
عملوند رجیستر ACC می باشدو T نیز 16بیت بالای رجیستر XT می باشد
شرح دستور:مقدار اشاره شده به وسیله LOC 16 بعد از شیفت به رجیستر ACCاضافه می شود.مقدار شیفت به وسیله چهار بیت کم ارزشتر رجیستر T مشخص می شود.بیتهای بالای رجیستر T نادیده گرفته می شود.مقدار شیفت داده شده اگر SXM=1 باشد شامل گسترش بیت علامت می شود و اگر فعال نباشد مقدار شیفت داده شده به وسیله صفر پر می شود.
if(SXM=1)
ACC=ACC+S:[loc16]<<T(3:0(;
else
ACC=ACC+0:[loc16]<<T(3:0);
مثال:ACC=ACC+S:[loc16]<<T(3:0(;
else
ACC=ACC+0:[loc16]<<T(3:0);
جمع دو مقدار علامت دارACC=(VarA<<SB)+(VarB<<SB)
SETC SXM
فعال کردن بیت گسترش علامتMOV T,@SA
بار کردن T با مقدار شیفت از متغیر SAMOV ACC,@VarA<<T
بار کردن مقدار شیفت داده شده رجیستر VarA در رجیستر ACCMOV T,@SB
بار کردن رجیستر T با مقدار شیفت از متغیر SB ADD ACC,@VarB<<T
اضافه کردن مقدار شیفت داده شده متغیرVarB به رجیستر ACC
ADD ACC,loc16<<1..15:اضافه کردن مقدار شیفت داده شده متغیرVarB به رجیستر ACC
خوب می ریم سراغ دستور ADD بعدی دیگه فکر کنم خودتون می تونید عملوند یا مد ادرس دهی و این چیزارو تشخیص بدید .پس من برای خلاصه کردن مبحث دیگه این چیزا رو توضیح نمیدم مگر اینکه چیز جدیدی باشه.
این دستور مقدار شیفت داده شده محتوای مکان اشاره شده را به رجیستر ACC اضافه می کند.
عملکرد بیت SXM مانند دستورات قبلی می باشد.
if (SXM=1)
ACC=ACC+S:[loc16]<< shift value;
else
ACC=ACC+0:[loc16]<< shift value;
ADD AX,loc16 :ACC=ACC+S:[loc16]<< shift value;
else
ACC=ACC+0:[loc16]<< shift value;
محتوای امکان اشاره شده به رجیستر AX اضافه می کند و نتیجه را در رجیستر AX ذخیره می کند.
AX=AX+[loc16]
ADD loc16,AX :محتوای رجیستر AX را با محتوای مکان اشاره شده به وسیله loc16 اضافه می کند و نتیجه را در loc16 ذخیره می کند.
; Add the contents of VarA to index register AR0:
MOV AL,@VarA ; Load AL with contents of VarA
ADD @AR0,AL ; AR0 = AR0 + AL
; Add the contents of VarB to VarC:
MOV AH,@VarB ; Load AH with contents of VarB
ADD @VarC,AH ; VarC = VarC + AH
ADD loc16,#16bitSigned :MOV AL,@VarA ; Load AL with contents of VarA
ADD @AR0,AL ; AR0 = AR0 + AL
; Add the contents of VarB to VarC:
MOV AH,@VarB ; Load AH with contents of VarB
ADD @VarC,AH ; VarC = VarC + AH
مقدار علامت دار ثابت 16 بیتی را با محتوای علامت دار اشاره شده به وسیله loc16 جمع می کند و حاصل را در مکان اشاره شده به وسیله loc16 ذخیره می کند.
[loc16]=[loc16]+16bitSigned;
; Calculate:
; VarA = VarA + 10
; VarB = VarB − 3
ADD @VarA,#10 ; VarA = VarA + 10
ADD @VarB,#−3 ; VarB = VarB − 3
ADDB ACC,#8bit ; VarA = VarA + 10
; VarB = VarB − 3
ADD @VarA,#10 ; VarA = VarA + 10
ADD @VarB,#−3 ; VarB = VarB − 3
یک مقدار ثابت 8 بیتی را با رجیستر ACC جمع می کند.
ACC=ACC + 0:8bit;
; Increment contents of 32-bit location VarA:
MOVL ACC,@VarA ; Load ACC with contents of VarA
ADDB ACC,#1 ; Add 1 to ACC
MOVL @VarA,ACC ; Store result back into VarA
ADD AX,#8bitSigned MOVL ACC,@VarA ; Load ACC with contents of VarA
ADDB ACC,#1 ; Add 1 to ACC
MOVL @VarA,ACC ; Store result back into VarA
مقدار ثابت 8 بیتی علامت دار را با رجیستر AX جمع می کند و نتیجه را در AX ذخیره می کند.
AX=AX + S:8bit;
; Add 2 to VarA and subtract 3 from VarB:
MOV AL,@VarA ; Load AL with contents of VarA
ADDB AL,#2 ; Add to AL the value 0x0002 (2)
MOV @VarA,AL ; Store result in VarA
MOV AL,@VarB ; Load AL with contents of VarB
ADDB AL,#−3 ; Add to AL the value 0xFFFD (−3)
MOV @VarB,AL ; Store result in VarB
ADD SP,#7bit MOV AL,@VarA ; Load AL with contents of VarA
ADDB AL,#2 ; Add to AL the value 0x0002 (2)
MOV @VarA,AL ; Store result in VarA
MOV AL,@VarB ; Load AL with contents of VarB
ADDB AL,#−3 ; Add to AL the value 0xFFFD (−3)
MOV @VarB,AL ; Store result in VarB
یک مقدار ثابت 7 بیتی را به SP اضافه می کند
SP=SP + 0:7bit;
FuncA:
ADDB SP, #N
; Function with local variables on stack.
; Reserve N 16-bit words of space for
; local variables on stack:
.
.
.
SUBB SP, #N ; Deallocate reserved stack space.
LRETR ; Return from function.
ADDB XARn,#7bit ADDB SP, #N
; Function with local variables on stack.
; Reserve N 16-bit words of space for
; local variables on stack:
.
.
.
SUBB SP, #N ; Deallocate reserved stack space.
LRETR ; Return from function.
یک مقدار ثابت 7 بیتی را به رجیستر XARn اضافه می کند.
XARn= XARn +0:7bit;
MOVL XAR1,#VarA
MOVL XAR2,*XAR1
ADDB XAR2,#10h
; Initialize XAR1 pointer with address
; of VarA
; Load XAR2 with contents of VarA
; XAR2 = VarA + 0x10
MOVL XAR2,*XAR1
ADDB XAR2,#10h
; Initialize XAR1 pointer with address
; of VarA
; Load XAR2 with contents of VarA
; XAR2 = VarA + 0x10
دیدگاه