Transcript Assembly_4

‫مهدی ایل بیگی‬
‫دانشگاه آزاد اسالمی دماوند‬
‫ تیمهها‬25 ‫و‬10‫ و‬5 ‫و‬1 ‫ رب بههی ه ی ههان‬2557 ‫ههی مبل ه‬
Stackseg
Stackseg
Datasg
Datasg
‫ برنامههی بن بسید ه‬.1
. ‫خرد س‬
segment stack ‘stack’
Dw 100h dup(0)
ends
segment
X
dw
c25 db
c10 db
c5 db
c1 db
ends
‘data’
2557
?
?
?
?
2
Codesg
segment ‘code’
Assume ss:stacksg,ds:datasg , cs:codesg
Main
proc far
Mov ax,datasg
Mov ds,ax
;-----------------------------------------
mov cl, 25
Mov ax, x
Div cl
Mov c25, al
mov cl, 10
Mov al, ah
Cbw
Div cl
Mov c10, al
3
Mov cl, 5
Mov al, ah
Cbw
Div cl
Mov c5, al
Mov c1, ah
;-----------------------------------------Mov ax, 4c00h
Int 21h
Main
endp
Codesg
ends
End main
4
‫‪ .1‬برنامههی بن بسید ه‬
‫محا بی ن ای ‪.‬‬
‫ههی ن هرب ‪ 5‬درس رب بز حافظههی خیبن ه د و م ه‬
‫‪ .2‬برنامی بن بسید‬
‫ن ای ‪.‬‬
‫ی یک درجی حربر رب بز ل یس بهی فارهاایه تبه ی‬
‫رب‬
‫ی روز ماد و ا تیل و تاریخ روز رب بز حافظی خیبنه د‬
‫‪ .3‬برنامی بن بسید‬
‫و ت بد روز ان زن گ رب محا بی ن ای ‪.‬‬
‫‪ .4‬برنامههی بن بسید ه ههی تههاریخ روز رب خیبن ه د و ت ه س ه ههی بمههروز چس ه‬
‫شنبی ب ‪( .‬روز بو ا رب شنبی و ی ماد ا رب ‪ 30‬روزد در نظر بگ ری )‬
‫‪5‬‬
‫• در ه اربرن ‪ BCD‬ههر ر ههد د ه‬
‫بی ن ایش دبدد م شید‪.‬‬
‫بهها ‪4‬‬
‫‪0‬‬
‫‪1‬‬
‫‪2‬‬
‫‪3‬‬
‫‪4‬‬
‫‪5‬‬
‫‪6‬‬
‫‪7‬‬
‫‪8‬‬
‫‪9‬‬
‫• مثا ‪:‬‬
‫‪1389‬‬
‫‪0001 0011 1000 1001‬‬
‫• ‪ 6‬تر ب ‪ 1010‬تا ‪ 1111‬حهاون گوینهی‬
‫دبدد بن نی تس ‪.‬‬
‫‪6‬‬
‫بال استفاده‬
‫‪0000‬‬
‫‪0001‬‬
‫‪0010‬‬
‫‪0011‬‬
‫‪0100‬‬
‫‪0101‬‬
‫‪0110‬‬
‫‪0111‬‬
‫‪1000‬‬
‫‪1001‬‬
‫‪1010‬‬
‫‪1011‬‬
‫‪1100‬‬
‫‪1101‬‬
‫‪1110‬‬
‫‪1111‬‬
‫• ‪ BCD‬فشهردد‪ :‬در یههک بایه‬
‫تس ‪.‬‬
‫‪4‬بیه بههاپ و نههای‬
‫• ‪ BCD‬غ ههر فش ههردد‪ :‬در ی ههک بای ه‬
‫‪4‬بی باپ صفر م باش ‪.‬‬
‫ههر ه بد شهها د سه د یههک ر ههد د ه‬
‫‪ 1‬رقم دسیمال‬
‫‪ 1‬رقم دسیمال‬
‫‪4‬بی ه ن ههای‬
‫ب ه و‬
‫ش هها د س ه د ی ههک ر ههد د ه‬
‫‪ 1‬رقم دسیمال‬
‫‪0‬‬
‫‪7‬‬
‫‪0‬‬
‫‪0‬‬
‫‪0‬‬
‫• بار مج یع دو ر د تر بز دد باش مش ل بیجاد نخیب‬
‫• باههر مج ههیع دو ر ههد بیشههتر بز نههی شههید ه ان حاصه‬
‫بازد ‪ 10‬تا ‪.)15‬‬
‫در صورتی که حاصلجمع دو‬
‫رقم بیش از ‪ 9‬باشد باید‬
‫جواب تصحیح شود‬
‫یعنی عدد ‪ 6‬به آن رقم‬
‫افزوده شود‬
‫‪8‬‬
‫ش ‪.‬‬
‫ه ان ه م ه خیب سه بههید ( در‬
‫‪1‬‬
‫‪0 0 0 1,1 0 0 1,0 1 0 1‬‬
‫‪0 0 0 1,1 0 0 0,0 0 1 0‬‬
‫‪195‬‬
‫‪182‬‬
‫‪0 0 1 1,0 0 0 1,0 1 1 1‬‬
‫‪377‬‬
‫‪7‬‬
‫‪1‬‬
‫‪6‬‬
‫‪3‬‬
‫‪+‬‬
‫‪7‬‬
‫‪7‬‬
‫‪3‬‬
‫‪+‬‬
‫• بربن ج ع بع بد ‪ BCD‬در زبا ب بل ‪:‬‬
‫– د تیرب م یل ج ع بی کار بردد م شین ‪.‬‬
‫– پس بز ج ع جیبب بای تصح ح شید‪.‬‬
‫د تیر زیر بین تصح ح رب بنجاد م د ‪:‬‬
‫‪Decimal Adjust After Addition‬‬
‫ن تی‪ :‬دبدد ان ‪ BCD‬بی صیر فشردد فرض م شین ‪.‬‬
‫‪9‬‬
‫‪DAA‬‬
AF
CF
‫ بیت باال‬4
+
‫ بیت باال‬4
‫ بیت‬4
AH
BH
CH
IF ( CF=1 ) OR (CH>9) THEN
Ch = Ch + 6
‫ بیت پایین‬4 AL
‫ بیت پایین‬4
BL
‫ بیت‬4 CL
IF ( AF=1 ) OR (CL>9) THEN
CL = CL + 6
10
‫• ببت ب د تیرب م یل تفریق بکار بردد م شید‪.‬‬
‫•‬
‫پس نت جی بصالح م شید‪.‬‬
‫‪DAS‬‬
‫‪Decimal Adjust after Substraction‬‬
‫• نکا ع ل ا ‪:BCD‬‬
‫• د تیرب ‪ DAA‬و ‪ DAS‬فقط بر رون ‪ AL‬ع‬
‫• بین د تیرب بای بالفاصلی ب‬
‫‪11‬‬
‫م‬
‫سس ‪.‬‬
‫بز د تیر ج ع و تفریق بجرب شین ‪.‬‬
‫•‬
‫دبربن یک‬
‫ر ر د بز بع بد د‬
‫‪55‬‬
‫‪+53‬‬
‫‪108‬‬
‫‪-96‬‬
‫چی ر ع د ‪ 48‬وبح‬
‫بضاف دبرد پس بربن تصح ح‬
‫ج ع دو ع د ‪ 96 = 2 * 48‬رب‬
‫بای بز حاصلج ع د س د‪.‬‬
‫در ی تد ‪ ASCII‬م باش ‪.‬‬
‫‪30H‬‬
‫‪48‬‬
‫‪0‬‬
‫’‪‘7‬‬
‫’‪+’5‬‬
‫‪31H‬‬
‫‪49‬‬
‫‪1‬‬
‫‪32H‬‬
‫‪50‬‬
‫‪2‬‬
‫‪12‬‬
‫‪33H‬‬
‫‪51‬‬
‫‪3‬‬
‫‪34H‬‬
‫‪52‬‬
‫‪4‬‬
‫‪35H‬‬
‫‪53‬‬
‫‪5‬‬
‫‪36H‬‬
‫‪54‬‬
‫‪6‬‬
‫‪37H‬‬
‫‪55‬‬
‫‪7‬‬
‫‪38H‬‬
‫‪56‬‬
‫‪8‬‬
‫‪39H‬‬
‫‪57‬‬
‫‪9‬‬
‫‪ 1‬بایت‬
‫‪12‬‬
‫• ببت ب ج ع و تفریق م یل رب بنجاد م د د‪.‬‬
‫پس نت جی با ب تفادد بز د تیرب زیر تصح ح م شید‪.‬‬
‫•‬
‫‪ASCII Adjust after Addition‬‬
‫‪AAA‬‬
‫‪ASCII Adjust after Substraction‬‬
‫‪AAS‬‬
‫• ن تی‪ :‬در ر دو د تیر ع لین در ‪ AL‬ربر دبرد‪.‬‬
‫‪13‬‬
‫ر دو ع د بی صیر ‪ BCD‬غ ر فشردد‬
‫•‬
‫• نت جی بی صیر ‪ BCD‬فشردد ب‬
‫تس ‪.‬‬
‫‪.‬‬
‫• در ع ل هها ضههرب بع ه بد ‪ ASCII‬پههس بز بنجههاد ضههرب بهها د ههتیر زیههر نت جههی رب ههی در‬
‫‪ AX‬ربر دبرد تصح ح م ن ای د‪.‬‬
‫‪ASCII Adjust after Multiplication‬‬
‫ن تی‪ :‬بربن تب ی بع بد ب ک بی ‪ BCD‬کاف ب‬
‫‪14‬‬
‫‪AAM‬‬
‫ا رب با ‪ AND 0Fh‬س د‪.‬‬
. ‫وری‬
‫ رب ب‬7 ‫ و‬9 ‫ ضرب دو ع د ب ک‬: ‫• مثا‬
MOV AL, ‘9’
AND AL,0F
AL=39H
AL=09H
MOV BL,’7’
AND BL,0F
BL=37H
BL=07H
MUL BL
‫ا‬
‫مقادیر ثبا‬
‫ب بز بجربن‬
‫د تیرب‬
AX=003FH
AAM
AX=0603
OR AX, 3030H
AX=3633H=‘6’’3’
15
‫• در تق‬
‫– مق‬
‫– مق‬
‫– مق‬
‫د بع بد ‪:ASCII‬‬
‫ید ‪ BCD‬غ رفشردد ب ‪.‬‬
‫ید در ‪ AX‬م باش ‪.‬‬
‫ید عل ی ‪ BCD‬غ رفشردد ب‬
‫‪.‬‬
‫• ب بز بنجاد تق د‪:‬‬
‫در ‪AL‬‬
‫– خارج‬
‫– با ان د در ‪AH‬‬
‫• ن تی‪ :‬ب بز بنجاد تق د با ب تفادد بز د تیر زیر مق ید رب تصح ح م ن ای د‪:‬‬
‫‪16‬‬
‫‪ASCII Adjust before Division‬‬
‫‪AAD‬‬
AX=3532H
AX=0502
MOV AX,3532h
AND AX,0F0FH
AAD
MOV DL,’7’
AND DL,0FH
DIV DL
OR AX,3030H
AX=0034H
‫ا‬
‫مقادیر ثبا‬
‫ب بز بجربن‬
‫د تیرب‬
DL=37H
DL=07H
AL=07H
AH=03H
AX=3337H
17
‫• تب ی‬
‫‪ ASCII‬بی ‪ BCD‬غ ر فشردد‪:‬‬
‫– فقههط کههاف ب ه چاههار بی ه بههاپد صههفر شههین ‪ .‬در نت جههی ع ه د رب بهها ‪AND 0Fh‬‬
‫م س د‪.‬‬
‫• مثا ‪ :‬ع د ‪ 6‬در ن ایش ب ک رب بی ‪ BCD‬تب ی ن ای ‪.‬‬
‫’‪‘6‬‬
‫‪ASCII‬‬
‫‪AND 0FH‬‬
‫‪06H‬‬
‫‪0110‬‬
‫‪18‬‬
‫‪0000‬‬
‫‪36H‬‬
‫‪ ASCII‬بی ‪ BCD‬فشردد‪:‬‬
‫• تب ی‬
‫– ببت ب ر بای رب با ‪ AND 0Fh‬م س د‪.‬‬
‫– ههپس ‪ 4‬بیه نههای بایه بو بههی عسههیب ‪ 4‬بیه نههای جههیبب بنتخههاب خیب ه شه و‬
‫‪ 4‬بی باپد جیبب برببر با ‪ 4‬بی نای بای دود م شید‪.‬‬
‫‪3X‬‬
‫‪3X‬‬
‫‪AND 0Fh‬‬
‫جواب نهایی‬
‫‪19‬‬
‫‪0X‬‬
‫‪0X‬‬
‫‪0000xxxx‬‬
‫‪0000XXXX‬‬
‫‪XXXXxxxx‬‬
‫• ب ش اب غ رشرط‬
‫– مشابی د تیر ‪GOTO‬‬
‫• ب ش اب شرط‬
‫– مشابی با ‪IF‬‬
‫‪20‬‬
‫• د ههتیر ‪ JMP‬ش ه ی د ههتیر ‪ go-to‬در نا ههکا م ه باش ه ‪ .‬بی ههن د ههتیر دبربن ف ههرد زی ههر‬
‫ب ‪:‬‬
‫‪JMP LABEL‬‬
‫– ب بز بجربن بین د تیر د هتیر ب ه ن بهربن بجهرب د هتیرن بها برچ هب هر شه د‬
‫در مقاب ‪ JMP‬خیب بید‪.‬‬
‫• مثا ‪ :‬با ب تفادد بز د تیر ‪ JMP‬یک حلقی ب ناای ب ازی ‪.‬‬
‫‪MOV AX , 0A00h‬‬
‫‪L1 : INC AX‬‬
‫‪ADD AX,BX‬‬
‫‪JMP L1‬‬
‫‪21‬‬
‫• بین د تیرب بز فلگ ا بثر م نذیرن ‪.‬‬
‫• ب بز بین د تیرب نردبزش پزد جا تغ ر فلگ ا بنجاد م شید‪.‬‬
‫– ی ببت ب یک محا بی یا مقای ی بنجاد م شهید و هپس بهر ب هاس شهربیط نت جهی‬
‫یک نرش صیر م ا رد‪.‬‬
‫• د تیرب نرش شرط‬
‫ی د تی‬
‫تس ‪:‬‬
‫‪ .1‬د تیرب نرش مبت بر فلگ ا‬
‫‪ .2‬د تیرب نرش بر ب اس نت جی مقای ی بع بد عالمت بر‬
‫‪ .3‬د تیرب نرش بر ب اس نت جی مقای ی بع بد‬
‫‪22‬‬
‫عالم‬
‫بله مقه بر ارفتههی بنه‬
‫• بیههن نههیع نههرش هها بههر ب ههاس محتییهها فلههگ هها ههی بهها محا ههبا‬
. ‫بنجاد م نذیرن‬
‫توضیح‬
‫شرط پرش‬
‫نام دستور‬
JUMP SIGN (NEGATIVE)
SF=1
JS
JUMP NOT SIGN (POSITIVE)
SF=0
JNS
JUMP CARRY
CF=1
JC
JUMP NOT CARRY
CF=0
JNC
JUMP OVERFLOW
OF=1
JO
JUMP NOT OVERFLOW
OF=0
JNO
JUMP PARITY
PF=1
JP
JUMP NOT PARITY
PF=0
JNP
23
‫• د تیر ‪ CMP‬دو ع د رب با د مقای ی م ن ای ‪.‬‬
‫• بربن بین مسظیر ع لین بو رب بز ع لین دود د م س ‪:‬‬
‫– در صیرت ی جیبب صفر شید دو ع د م اویس ‪.‬‬
‫– بار جیبب مسف ش ع لین دود برراتر ب ‪)CF = 1, ZF = 0( .‬‬
‫– بار جیبب مث ش ع لین بو برراترب ‪)CF = 0, ZF = 0( .‬‬
‫‪ZF‬‬
‫‪CF‬‬
‫‪1‬‬
‫‪0‬‬
‫‪OP1 = OP2‬‬
‫‪0‬‬
‫‪0‬‬
‫‪OP1 > OP2‬‬
‫‪0‬‬
‫‪1‬‬
‫‪OP1 < OP2‬‬
‫‪OF‬‬
‫‪CMP OP1,OP2‬‬
‫‪SF‬‬
‫‪ZF‬‬
‫‪OP1 - OP2‬‬
‫‪AF‬‬
‫‪DF‬‬
‫‪CF‬‬
‫‪24‬‬
‫‪ OP1‬و ‪ OP2‬تغییر‬
‫نمی کنند‬
‫ه ‪ CF‬زمهها ر برببههر شههک مرشههید ههی در تفر ههق شههک ر ههد عار ههی وجههید‬
‫• فلههگ ر ههد نقل ه‬
‫دبشههتی باش ه (نت جههی ع ل هها تفریههق مسف ه شههید) چسانگههی عار ههی وجههید ن بشههتی باش ه‬
‫بشن فلگ برببر صفر خیب بید‪.‬‬
‫• فلههگ ههرر ر شهها ‪ OF‬در صههیرتر شههک خیب ه بههید ههی ههرر ر وجههید دبشههتی باشه و در‬
‫غ ر بشسصیر برببر صفر خیب بید‪.‬‬
‫• فلههگ عالم ه شهها ‪ SF‬زمهها ر شههک خیب ه بههید ههی حاص ه تفر ههق شهها د س ه د شههک ع ه د‬
‫مسف ههر م ه دو باش ه و زم هها ر بربب ههر ص ههفر خیب ه ب ههید ههی حاص ه تفر ههق بربب ههر ص هفر ش هها‬
‫مث باش ‪.‬‬
‫• فله ههگ صه ههفر شه هها ‪ ZF‬زمه هها ر شه ههک خیب ه ه به ههید ه ههی حاص ه ه تفر ه ههق صه ههفر باش ه ه و در غ ه ههر‬
‫بشسصیر برببر صفر خیب بید‪.‬‬
‫‪25‬‬
CMP
AX,BX
CMP
AX, Z
CORRECT USE
CMP
Z, AX
CMP AX,120
CMP
CMP
120,Y
200, CX
ERROR
‫عملوند اول نمی تواند عدد ثابت باشد‬
26
‫• در بیههن نههیع نههرش هها ببته ب یههک مقای ههی به دو عه د ه عالمه صههیر مه ا ههرد و ههپس‬
‫برب اس حاپ مختلف ی م تیبن رخ د نرش صیر م ا رد‪.‬‬
‫‪27‬‬
‫شرط پرش‬
‫نام دستور‬
‫توضیح‬
‫‪OP1 = OP2‬‬
‫‪JE‬‬
‫‪JUMP EQUAL‬‬
‫‪OP1 # OP2‬‬
‫‪JNE‬‬
‫‪JUMP NOT EQUAL‬‬
‫‪OP1 > OP2‬‬
‫‪JA‬‬
‫‪JUMP ABOVE‬‬
‫‪OP1 >= OP2‬‬
‫‪JAE‬‬
‫‪JUM ABOVE OR EQUAL‬‬
‫‪OP1 < OP2‬‬
‫‪JB‬‬
‫‪JUMP BELOW‬‬
‫‪OP1 <= OP2‬‬
‫‪JBE‬‬
‫‪JUMP BELOW OR EQUAL‬‬
‫• در بیههن نههیع نههرش هها ببت ه ب یههک مقای ههی ب ه دو ع ه د عالمت ه بر صههیر م ه ا ههرد و ههپس‬
‫برب اس حاپ مختلف ی م تیبن رخ د نرش صیر م ا رد‪.‬‬
‫‪28‬‬
‫شرط پرش‬
‫نام دستور‬
‫توضیح‬
‫‪OP1 = OP2‬‬
‫‪JE‬‬
‫‪JUMP EQUAL‬‬
‫‪OP1 # OP2‬‬
‫‪JNE‬‬
‫‪JUMP NOT EQUAL‬‬
‫‪OP1 > OP2‬‬
‫‪JG‬‬
‫‪JUMP GREATER‬‬
‫‪OP1 >= OP2‬‬
‫‪JGE‬‬
‫‪JUMP GREATER OR EQUAL‬‬
‫‪OP1 < OP2‬‬
‫‪JL‬‬
‫‪JUMP LESS‬‬
‫‪OP1 <= OP2‬‬
‫‪JLE‬‬
‫‪JUMP LESS OR EQUAL‬‬
‫• در حلقی ت ربر ‪ FOR‬بغلب ت بد دف ات هی ب نهی حلقهی بایه بجهرب شهید بز به م ه‬
‫م باش ‪ .‬در زبها ب ه بل بیهن ت ه بد رب بای ه در ثبها ‪ CX‬هربر دبد و بز د هتیربل‬
‫‪ LOOP‬ب تفادد ن ید‪ .‬در بین د تیر‪:‬‬
‫•‬
‫ر بار یک وبح بز ‪ CX‬د م‬
‫س ‪.‬‬
‫• نرش زما بنجاد م شید ی ‪ CX‬صفر نباش ‪.‬‬
‫)‪For(i=0;i<20;i++‬‬
‫;‪X++‬‬
‫‪MOV X, 0‬‬
‫‪MOV CX, 20‬‬
‫‪FOR:‬‬
‫‪INC x‬‬
‫‪LOOP FOR‬‬
‫‪29‬‬
‫• د ههتیربل ‪ JCXZ‬یههک نههیع نههرش مه باش ه ‪ .‬مستهه نههرش بههر ب ههاس فلو ه بنجههاد ن ه‬
‫شههید بل ههی چسانگههی محتههیبن ثبهها ‪ CX‬برببههر بهها صههفر باشه نههرش بنجههاد مه شههید‪ .‬شههک‬
‫ل بصیر زیر م باش ‪:‬‬
‫‪LABEL‬‬
‫‪JCXZ‬‬
‫‪JUMP if CX is ZERO‬‬
‫• مثا ‪ :‬بیجاد حلقی بن با‪ 50‬بار ت ربر‪:‬‬
‫‪CX , 50‬‬
‫‪.‬‬
‫‪.‬‬
‫‪.‬‬
‫‪CX‬‬
‫‪LABEND‬‬
‫‪LABI‬‬
‫‪30‬‬
‫‪MOV‬‬
‫‪LABI:‬‬
‫‪DEC‬‬
‫‪JCXZ‬‬
‫‪JMP‬‬
‫‪LABEND:‬‬
‫• چسانگی محتیبن ثبا ‪ CX‬صفر ش د باش و گس فلگ صهفر )‪ (ZF‬یهک باشه‬
‫د تیربل ‪ LOOPZ‬بی برچ ب میرد نظر نرش م س ‪.‬‬
‫)‪WHILE (CX != 0) AND (ZF == 1‬‬
‫{‬
‫}‬
‫• مثا ‪ :‬حلقی بن ی ‪ 10‬بار و بشرط بیس ی ‪ AX = 1200‬باش ت ربر م شید‪.‬‬
‫‪MOV CX,10‬‬
‫‪LABEL: MOV AX,X‬‬
‫‪ADD AX,Y‬‬
‫‪MOV X,AX‬‬
‫‪CMP AX,1200‬‬
‫‪LOOPZ LABEL‬‬
‫‪31‬‬
‫;‪i = 10‬‬
‫)‪WHILE ( i != 0) AND (X == 1200‬‬
‫{‬
‫;‪X = X + Y‬‬
‫;‪i--‬‬
‫}‬
‫• د قا مث ‪ LOOPZ‬ب‬
‫‪.‬‬
‫• بها عه د ت هاون دو بنرنه ما سها ‪ ZF = 0‬مه شهید در نت جهی ت هربر حلقهی بهی نایها مه‬
‫ر ‪.‬‬
‫• دل ب تفادد بز بین د تیر؟‬
‫– خیبناد برنامی !!!‬
‫‪32‬‬
‫• چسانگ ههی محت ههیبن ثب هها ‪ CX‬ص ههفر شه ه د باشه ه و گسه ه فل ههگ ص ههفر )‪ (ZF‬ص ههفر‬
‫باشه ه ه (ی ه ه ه نت جه ه ههی مقای ه ه ههی دو عه ه ه د عه ه ه د ت ه ه ههاون رب شه ه هها د ه ه ه ) د ه ه ههتیربل‬
‫‪ LOOPNZ‬بی برچ ب میرد نظر نرش م س ‪ .‬پس‪:‬‬
‫• ت ربر حلقی تا زما ی‪:‬‬
‫– ‪ CX‬صفر ش د باش‬
‫– و نت جی محا با غ ر صفر باش‬
‫)‪WHILE(CX != 0) AND (ZF == 0‬‬
‫{‬
‫• خروج بز حلقی زما ب‬
‫– ‪ CX‬صفر شید‬
‫– یا نت جی محا بی صفر شید (ت اون)‬
‫ی‪:‬‬
‫دستور ‪ LOOPNE‬هم به همین معنی بکار برده می شود‬
‫‪33‬‬
‫}‬
34
‫ههر ش ه د ن ههرش کیت ههاد (‪)SHORT‬‬
‫‪ .1‬ت ههام د ههتیرب نرش ه‬
‫ح ب ثر ‪ 127‬خط نای تر یا ‪ 128‬خط باپتر نرش م سس ‪.‬‬
‫ههتس ی ه‬
‫‪ .2‬د تیرن بهربن نهرش ب ونهی شهرط بلسه وجهید دبرد‪ .‬بیهن د هتیر ‪ LJMP‬مه‬
‫باش ‪.‬‬
‫‪ .3‬بربن نرش ان شرط بلس بای بیهن کهار رب برنامهی نهیدس بنجهاد د ه ‪( .‬مثها ‪:‬‬
‫نرش شرط بی د تیرن ی یک نرش ب ونی شهرط بهی برچ هب هاهاد بنجهاد‬
‫م د )‬
‫‪ .4‬د تیرب نرش بر رون فلگ ا تاث ر ن برن ‪.‬‬
‫‪35‬‬
.MODEL SMALL
.STACK 64
;Define stack
.DATA
;Define data segment
FIRST
DB 10
SECOND
DB 14
;---------------------------------------------.CODE
;Define code segment
MAIN PROC FAR
MOV AX, @data ;1- Set data segment
MOV DS,AX
;2- address
MOV BL,FIRST ;3-BL=10
MOV CL,SECOND
;4-CL=15
MOV AL,0
;5-AL=0
AGAIN: ADD AL,BL
;6-AL=AL+BL
INC BL
;7-BL=BL+1
CMP BL,CL
;8-Cmopare BL & CL
JLE AGAIN
;9- if BL <= CL go to AGAIN
MOV AX,4C00H ;10-End of
INT 21H
;11- processing
MAIN ENDP
; End of procedure
END MAIN
; End of program
36
STACKSG SEGMENT STACK 'STACK'
DW 32H DUP(0)
; 32H word for stack
STACKSG ENDS
; End of segment
DATASG SEGMENT
'DATA'
DATAX
DB 23H,10H,3BH,44H,12H
SUM
DB ?
DATASG ENDS
;End of segment
CODESG SEGMENT 'CODE'
ASSUME SS:STACKSG,DS:DATASG,CS:CODESG
MAIN
PROC FAR
MOV AX,DATASG ;1-Initialize DS
MOV DS,AX
;2- register Addressing
MOV CL,5
;3- Move 5 to counter CL
MOV DI,OFFSET DATAX
;4- DI=Offset DATAX
MOV AL,0
;5- Move 0 to AL
BACK1: ADD AL,[DI]
;6- Add [DI] to AL
INC DI
;7- Increment pointer DI
DEC CL
;8- Decrement counter CL
JNZ BACK1
;9- If CL#0 go to BACK1
MOV SUM,AL
;10- Else SUM=AL
MOV AX,4C00H
;11- End of
INT 21H
;12- processing
MAIN ENDP
; End of procedure
CODESG ENDS
; End of segment
END MAIN
; End of program
37
.MODEL SMALL
.STACK 100
.DATA
ORG 10H
DATA_IN DB 25,30,50,40,60
ORG 30H
COPY1 DB 5 DUP(?)
.CODE
MAIN PROC FAR
MOV AX,@DATA
MOV DS,AX
LEA SI, DATA_IN
LEA DI, COPY1
MOV CL, 5
BACK: MOV AL, [SI]
MOV [DI], AL
INC DI
INC SI
DEC CL
JNZ BACK
MOV AX,4C00H
INT 21H
MAIN ENDP
END MAIN
38
‫‪ .1‬بین د تیرب بع ا نایی مساق مث ‪ AND, OR‬و ‪...‬‬
‫‪ .2‬در بین د تیرب ع ل ا بر رون تک تک بی‬
‫‪ .3‬بین د تیرب ع یما ب بز د تیرب‬
‫ا بنجاد م شید‪.‬‬
‫سترل ب تفادد م شین ‪.‬‬
‫‪ .4‬بین د تیرب بر رون فلگ ا تاث راذبر خیب س بید‪.‬‬
‫‪39‬‬
‫تس ‪.‬‬
SF
AND
OP1,OP2
ZF
:‫• فرد د تیر‬
PF
OP1←OP1.OP2
CF = 0
OF = 0
X1
X2
X1.X2
0
0
0
0
1
0
1
0
0
1
1
1
: ‫• مثا‬
OP1 1 0 0 1 1 0 1 0
OP2 0 0 1 1 0 1 0 1
AND
0 0 0 1 0 0 0 0
40
‫ل د تیر ‪:OR‬‬
‫•‬
‫فرم‬
‫•‬
‫بز د هتیر ‪ OR‬بهربن یهک هرد ت ه بدن بیه‬
‫م تیب ب تفادد ن ید‪.‬‬
‫•‬
‫بز د ه ه ه ههتیر ‪ AND‬م ه ه ه ه ته ه ه ههیب ب ه ه ه هربن صه ه ه ههفر‬
‫(‪ )Mask‬ه ه ه ههرد ت ه ه ه ه بدن بی ه ه ه ه م ه ه ه ه ته ه ه ههیب‬
‫ب تفادد ن ید‪.‬‬
‫‪SF‬‬
‫‪OR OP1,OP2‬‬
‫‪ZF‬‬
‫‪PF‬‬
‫‪CF = 0‬‬
‫‪OF = 0‬‬
‫‪41‬‬
‫‪OP1←OP1+OP2‬‬
‫‪OR‬‬
‫‪X2‬‬
‫‪X1‬‬
‫‪0‬‬
‫‪0‬‬
‫‪0‬‬
‫‪1‬‬
‫‪1‬‬
‫‪0‬‬
‫‪1‬‬
‫‪0‬‬
‫‪1‬‬
‫‪1‬‬
‫‪1‬‬
‫‪1‬‬
SF
XOR OP1,OP2
:‫• فرد د تیر‬
ZF
PF
OP1←(OP1) XOR (OP2)
CF=0
OF=0
X1
X2
XOR
0
0
0
OP1 1 0 0 1 1 0 1 0
0
1
1
OP2 0 0 1 1 0 1 0 1
1
0
1
XOR
1
1
0
: ‫• مثا‬
1 0 1 0 1 1 1 1
42
‫• نت جی مج یعی د تیرب زیر چی‬
‫؟‬
‫‪XOR AX,BX‬‬
‫‪XOR BX,AX‬‬
‫‪XOR AX,BX‬‬
‫• جیبب‪:‬‬
‫– محتییا ‪ AX‬و ‪ BX‬رب با د ت ییض م ن ای ‪.‬‬
‫‪43‬‬
‫ههان ع لین ه رب م کههیس م ه ن ای ه و رون فلههگ هها تههاث ر اههذبر نخیب ه‬
‫•‬
‫د ههتیر ‪ NOT‬تههک تههک بی ه‬
‫بید‪.‬‬
‫•‬
‫د ههتیر ‪ TEST‬هها د ههتیر ‪ AND‬م ه باش ه بهها بیههن تفههاو‬
‫فقط فلگ ا تغ ر خیب دبد‪.‬‬
‫‪NOT OPERAND‬‬
‫‪SF‬‬
‫ههی ع لین ه‬
‫هها رب تغ ههر ن ه د ه و‬
‫‪TEST OP1,OP2‬‬
‫‪ZF‬‬
‫‪PF‬‬
‫‪CF = 0‬‬
‫‪OF = 0‬‬
‫‪44‬‬
‫‪AND OP1,OP2‬‬
‫• در ریرع ش ف بول فل پ فالپ مق بر خید رب بز ورودن ریا م ا رد و بق هی‬
‫ا مق بر خید رب بز فل پ فالپ بل خید م ا رن ‪.‬‬
‫رب‬
‫• در ش ف بی چپ بول فل پ فالپ‬
‫رب خید م ا رد‪.‬‬
‫خید رب بز فل پ فالپ‬
‫• در ش ف بی رب‬
‫رب بز فل پ فالپ‬
‫‪45‬‬
‫ترین ب‬
‫و ر فل پ فالپ مقه بر‬
‫بوله فل هپ فهالپ چهپ تهرین ب ه و هر فل هپ فهالپ مقه بر خهید‬
‫چپ خید م ا رد‪.‬‬
‫• مق بر ورودن ریا با تیجی بی نیع ش ف مشخص م شید‪.‬‬
‫– در ش ف مساق صفر ب‬
‫‪.‬‬
‫– در ش ف حلقین مق بر بی‬
‫دیگر ثبا م باش ‪.‬‬
‫– در ش ه ف ح هها بههی چههپ صههفر و در ش ه ف ح هها بههی رب ه بی ه‬
‫عالم م باش ‪.‬‬
‫• زما‬
‫‪46‬‬
‫ی بی عالم تغ ر س‬
‫رریر رخ دبدد ب‬
‫‪.‬‬
‫• در شيف مساقر بي ورود صفر ب‬
‫• شيف مساقر بی رب‬
‫• شيف مساقر بی چپ‪:‬‬
‫‪47‬‬
‫‪:‬‬
‫‪.‬‬
‫• در شههيف چرخ ه بي ه ورود‬
‫ب ‪.‬‬
‫• شيف چرخ‬
‫بی رب‬
‫• شيف چرخ‬
‫بی چپ‪:‬‬
‫‪48‬‬
‫‪:‬‬
‫ههر ا بي ه خروث ه بز ه‬
‫دشگههر ثب ها‬
‫• شيف ح ا ر برب بع بد عالم دبر م‬
‫دبر ب‬
‫‪.‬‬
‫• شيف ح ا ر بی چپ ع د درو ثبا رب در ‪ 2‬ضرب مر س ‪.‬‬
‫ع د درو ثبا رب بر ‪ 2‬تق يد مر س ‪.‬‬
‫• شيف ح ا ر بی رب‬
‫• ما ترشن و ژگر شيف ح ا ر‬
‫ثبا رب حفظ مر س ‪.‬‬
‫• شيف ح ا ر بی رب‬
‫ب‬
‫هی بهی سوهاد شهيف (ضهرب و تق هيد) عالمه‬
‫‪:‬‬
‫‪sign‬‬
‫‪bit‬‬
‫• شيف ح ا ر بی چپ‪:‬‬
‫‪sign‬‬
‫‪bit‬‬
‫‪49‬‬
‫• در شيف ح ا بی چپ باش م الی رر ر (‪ )Overflow‬چک شید‪.‬‬
‫زیرب عالم‬
‫رر ر رخ دبدد ب‬
‫• بار ب بز شيف مق بر دو بي خر متفاو باش‬
‫ع د تغ ر خیب رد‪.‬‬
‫‪0‬‬
‫‪sign‬‬
‫‪bit‬‬
‫‪V‬‬
‫‪50‬‬
‫• شیفت منطقی‬
‫– مق بر بول ی‪:‬‬
‫– مق بر بول ی پس بز ش ف بی رب‬
‫‪11010011‬‬
‫‪:‬‬
‫– مق بر بول ی پس بز ش ف بی چپ‪:‬‬
‫‪01101001‬‬
‫‪10100110‬‬
‫• شیفت حلقوی‬
‫– مق بر بول ی‪:‬‬
‫– مق بر بول ی پس بز ش ف بی رب‬
‫– مق بر بول ی پس بز ش ف بی چپ‪:‬‬
‫‪51‬‬
‫‪11010011‬‬
‫‪:‬‬
‫‪11101001‬‬
‫‪10100111‬‬
‫• مثال اول‬
‫– مق بر بول ی‪:‬‬
‫– مق بر پس بز ش ف بی رب‬
‫‪11010011‬‬
‫‪11101001 :‬‬
‫– مق بر بول ی پس بز ش ف بی چپ‪:‬‬
‫‪10100110‬‬
‫• مثال دوم‬
‫– مق بر بول ی‪:‬‬
‫– مق بر پس بز ش ف بی رب‬
‫– مق بر پس بز ش ف بی چپ‪:‬‬
‫‪52‬‬
‫‪10011010‬‬
‫‪11001101 :‬‬
‫‪ ( 00110100‬رریر)‬
SHL
SHL
SHIFT LEFT
SHIFT ARITHMETIC LEFT
OP1,1
OP1,CL
SAL OP,1
SAL OP,CL
SF
ZF
PF
CF
OF
CF
7
2 1 0
0
53
SHR
SHR
SHIFT RIGHT
SHIFT ARITHMETIC RIGHT
SAR OP,1
SAR OP,CL
7
SF
ZF
PF
‫مساق‬
0
OP1,1
OP1,CL
2 1 0
CF
CF
OF
S
2 1 0
CF
‫ریاض‬
54
ROR
ROR
ROTATE RIGHT
OP1,1
OP1,CL
SF
ZF
PF
CF
OF
7
2 1 0
CF
55
ROTATE RIGHT THROUGH CARRY FLAG
RCR
RCR
OP1,1
OP1,CL
SF
ZF
PF
7
2 1 0
CF
CF
OF
56
ROL
ROL
ROTATE LEFT
OP1,1
OP1,CL
SF
ZF
PF
CF
OF
CF
7
2 1 0
57
ROTATE LEFT THROUGH CARRY FLAG
RCL
RCL
OP1,1
OP1,CL
SF
ZF
PF
CF
CF
7
2 1 0
OF
58
SHIFT LEFT
SHL
SHIFT ARITHMETC LEFT
SAL
SHIFT RIGHT
SHR
SHIFT ARITHMETIC RIGHT
SAR
ROTATE RIGHT
ROR
ROTATE RIGHT THROUGH CARRY
RCR
ROTATE LEFT
ROL
ROTATE LEFT THROUGH CARRY
RCL
59
Stackseg
segment ‘stack’
Dw 32h dup(0)
ends
Datasg
segment ‘data’
Datasg
ends
Stacksg
Codesg
Main :
segment ‘code’
Assume ss:stacksg,ds:datasg , cs:codesg
proc far
Mov ax,datasg
Mov ds,ax
;----------------------------------------MOV AX, WORD PTR X
AND AX,0F0FH
XCHG AL,AH
MOV CL,4
SHL AH,CL
OR AL,AH
MOV Y,AL
;------------------------------------------
Ax=3735
Ax=0705
Ax=0507
AH=50
AL= 50 or 07 => AL=57
Mov ax,4c00h
Int 21h
Main
Codesg
endp
ends
End main
60
61