Тарматы рылымдарды программалау

Ассемблер тілі - машиналы командалар тілі. Мнда жоары дрежелі тілдерге тн басару рылымдары (тадау, тарматау, циклдарды йымдастыру жне т.б.) жо. Бірата ту командаларыны кмегімен кез келген рылымдарды йымдастыруа болады. Енді ассемблерде осы рылымдарды жасау жолдарын арастырамыз.

Тарма йымдастыру. Мысал шін Паскаль тілінде жазылан мына операторды алайы:

if Х>0 then 1-оператор else 2-оператор;

Ассемблерде бл операторды мына слбалармен жзеге асыруа болады:

 

    CMP X, 0 ;X= 0?   CMP X, 0 ;X= 0 ?
  JLE L2 ;X<=0L2   JQ L2 ;X>0L2
  1-оператора сйкес командалар тобы     2-оператора сйкес командалар тобы  
  JMP FIN ; FIN   JMP FIN ; FIN
L2: 2-оператора сйкес командалар тобы   L2: 1-оператора сйкес командалар тобы  
FIN:     FIN:    
  a)     б)  

Бл слбалардан кретініміз: егер операторларды Паскаль операторындаы ретпен орналастыратын болса (а-слбасы), онда Ассемблерде 2-оператора ту шарты(X<=0) тексеріледі, ал 1-оператора сйкес командалар тобы салыстыру командасынан со жазылады да, соында 2-оператора сйкес командалар тобын аттап ту шін шартсыз ту командасы(JMP FIN) жазылады; егер Паскаль операторындаы шарт (X>0) тексерілетін болса, онда командалар топтары кері орналастырылады (б- слбасы).

6.3.1-мысал. ш орынды X бтін санны цифрларыны лкенін табу керек.

Шешуі. Алдымен берілген бтін санны цифрларын тауып оларды скесінше a, b, c айнымалыларына меншіктейміз:

Y = X div 10, c = X mod 10, b = Y mod 10, a = Y div 10

Сонан со a мен b айнымалыларын салыстырамыз. Екеуіні лкенін с айнымалысымен салыстырып, лкенін Y -ке меншіктейміз.

X DW ? ;X берілген сан, сз лшемді

A DB ? ;А берілген X саныны бірінші цифры

B DB ? ;В берілген X саныны екінші цифры

C DB ? ;С берілген X саныны шінші цифры

Y DB ? ; Y=max(a,b,c)

. . .

;санны цифрларын табу

MOV A,10 ;A=10, DIV командасында пайдалану шін

MOV AX, X ;AX=X

DIV A ; X div 10

MOV Y, AL ; Y = X div 10

MOV С, AH ; c = X mod 10

MOV Al

cbW ;AX=Y, Y-ті зартып AX жазамыз

DIV А ; Y mod 10

MOV B, AL ; b = Y mod 10

MOV C, AH ; a = Y div 10

;MAX(a,b,c)

MOV AL, A ;AL=a, алашыда лкені a деп аламыз

CMP AL,B ;a>b ?

JA M ;егер a>b à M

MOV AL,B ;егер a<=b болса AL=b

M: CMP AL,C ;лкені>с ?

JA L ; à L

MOV AL,C ;AL=c, енді лкені с болады

L: MOV Y,AL ;нтижені меншіктеу

6.3.2-мысал. Берілген шартара байланысты Y-ті есептейтін рнекті анытап мнін табу керек:

Шешуі. Мнда, алдымен шінші шартты орындалуын тексереміз, егер Аиат болса шінші рнекті есептеуге (L1 белгісіне) теміз, Жалан болса екінші рнекті тадау шартын тексеріп, орындалса оны есептеуге (L2 белгісіне) теміз, йтпесе бірінші рнекті есептеуді бастаймыз. р рнек есептелгеннен со, баса рнектер есептелмес шін шартсыз ту командасы (JMPL3)ойылады.

X DW ?

Y DW ?

. . .

MOV AX,X ;AX=X

CMP AX,0 ;X=0 ?

JE L1 ;X=0 болса, 3-ші рнекті есептеуге теді

CMP AX,3 ;X<3 ?

Jl L2 ;X<3 болса, 2-ші рнекті есептеуге теді

;Бірінші рнекті есептеу

MOV AL,BYTE PTR ;X-ті байтын AL-ге жазамыз

MUL AL ;AX=X*Х

ADD AX,2 ;AX=X*Х+2

JMP L3 ;àL3

;Екінші рнекті есептеу

L2:

DEC AX ;AX=X-1

JMP l3 ;àL3

;шінші рнекті есептеу

L1: INC AX ;AX=X+1

;Нтижені Y-ке меншіктеу

L3: MOV Y,AX

. . .

Дріс №6

Таырыбы: Циклды рылымдарды программалау.

Жоспары.. «зір» циклын йымдастыру.