Laơp trình với câu trúc câp cao

Một phần của tài liệu giáo trình hợp ngữ nâng cao (Trang 41 - 46)

b) IF_THEN_ELSE

3.5 Laơp trình với câu trúc câp cao

Bài toán:Viêtchươngtrình nhaĩcngườidùnggõvàomoơtdòngvaínbạn. Tređn2dòngtiêptheoinrakýtựviêthoađaăutieđnvàkýtự viêthoacuôi cùngtheo thứtự alphabetical.Nêungườidùnggõvàomoơtkýtựthường,máysẽthođngbáo ‘Nocapitals’

Kêtqụacháychươngtrình sẽnhưsau:

TRUONGDAi HOCDALAT

Firstcapital=A Lastcapital=U

ĐeơgiạibàitoánnàytadùngkỹthuaơtlaơptrìnhTOP-DOWN,nghĩalàchia nhỏbàitoán thànhnhieăubàitoáncon.Cótheơchiabàitoánthành3bàitoáncon nhưsau:

1.Xuât1chuoêikýtự(lờinhaĩc) 2.Đĩcvàxửlý1dòngvaínbạn 3.Inkêtqụa

Bước 1: Hieơndâunhaĩc.

Bướcnàycótheơmãhoánhưsau: MOV AH,9 ;hàmxuâtchuoêi

LEA DX,PRMOPT;lâyđịachưchuoêivàoDX INT 21H ;xuâtchuoêi

Dâunhaĩccótheơmãhoánhưsautrongđốnsôlieơu.

Chương 3: Các leơnh laịp và rẽ nhánh 40 PROMPT DB ‘Typealineoftext:’,0DH,0AH,’$’

Bước2:Đĩcvàxửlýmoơtdòngvaínbạn

Bướcnàythựchieơnhaăuhêtcáccođngvieơccụachươngtrình:đĩccáckýtựtừ bànphím,tìmrakýtựđaăuvàkýtựcuôi,nhaĩcnhởngườidùngnêukýtựgõvào khođngphạilàkýtựhoa.

Cótheơbieêudieênbướcnàybởithuaơttoánsau: Readacharacter

WHILE characterisnotacarrigereturn DO IFcharacterisacapital(*)

THEN

IFcharacterprecedesfirstcapital Then

firstcapital=character End_if

IFcharacterfollowslastcharacter Then

lastcharacter=character End_if

END_IF

Readacharacter END_WHILE

Trongđódòng(*)cónghĩalàđieăukieơnđeơkýtựlàhoalàđieăukieơnAND IF(‘A’<=character)AND(character<=‘Z’)

Bước2cótheơmãhoá nhưsau:

MOV AH,1 ;đĩckýtự INT 21H ;kýtựtređnAL WHILE:

;trongkhikýtựgõvàokhođngphạilàCRthìthựchieơn CMP AL,0DH ;CR?

JE END_WHILE ;yes,thoát ;nêukýtựlàhoa

CMP AL,’A’ ;char>=‘A’?

JNGE END_IF ;khođngphạikýtựhoathìnhạyđênEND_IF CMP AL,’Z’ ;char<=‘Z’?

JNLE END_IF ;khođngphạikýtựhoathìnhạyđênEND_IF ;thì

Chương 3: Các leơnh laịp và rẽ nhánh 41 ;nêuký tựnaỉm trướcbiênFIRST(giátrịbanđaăulà‘[‘:kýtựsauZ)

CMP AL,FISRT ;char<FIRST? JNL CHECK_LAST;>=

;thì kýtự viêthoađaăutieđn=ký tự

MOV FIRST,AL ;FIRST=character ;end_if

CHECK_LAST:

;nêuký tựlàsaubiênLAST(giátrịbanđaăulà‘@’:kýtựtrướcA) CMP AL,LAST ;char>LAST?

JNG END_IF ;<= ;thìkýtựcuôicùng=kýtự

MOV LAST,AL ;LAST=character ;end_if END_IF: ;đĩcmoơtkýtự INT 21H ;kýtựtređnAL JMP WHILE_ ;laịp END_WHILE:

CácbiênFIRSTvàLASTđượcđịnhnghĩa nhưsautrongđốnsôlieơu: FIRST DB ‘[$‘ ;‘[‘làkýtựsauZ

LAST DB ‘@$’ ;‘@’ làkýtựtrước A

Bước 3 : Inkêtqụa

Thuaơttoán

IF nocapitalweretyped THEN

display ‘No capital’ ELSE

displayfirstcapitalandlastcapital END_IF

Bước3sẽphạiinracác thođngbáo:

• NOCAP_MSGnêukhođngphạichữin

• CAP1_MSG chữin đaăutieđn

• CAP2_MSG chữincuôicùng

Chúngđượcđịnhnghĩanhưsautrongđốnsôlieơu.

NOCAP_MSG DB 0DH,0AH,‘Nocapitals$’ CAP1_MSG DB 0DH,0AH,‘Firstcapital=’ FIRST DB ‘[$’

CAP2_MSG DB 0DH,0AH,‘Lastcapital=’

Chương 3: Các leơnh laịp và rẽ nhánh 42 LAST DB ‘@$’

Bước3cótheơmãhoánhưsau: ;inkêtquạ

MOV AH,9 ;hàmxuâtkýtự

;IFkhođngcóchữhoanàođượcnhaơpthìFIRST=‘[’ CMP FIRST,’[’ ;FIRST=‘[’?

JNE CAPS ;khođng,inkêtqụa ;THEN LEA DX,NOCAP_MSG INT 21H CAPS: LEA DX,CAP1_MSG INT 21H LEA DX,CAP2_MSG INT 21H ;end_if

Chươngtrìnhcótheơviêtnhưsau:

TITLE PGM3-1:FIRSTANDLASTCAPITALS .MODEL SMALL

.STACK 100h .DATA

PROMPT DB ‘Typealineoftext’,0DH,AH,‘$’ NOCAP_MSG DB 0DH,0AH,‘Nocapitals$’ CAP1_MSG DB 0DH,0AH, ‘Firstcapital=’ FIRST DB ‘[$’

CAP2_MSG DB ‘Lastcapital=’ LAST DB ‘@$’

MAIN PROC ;khởitáoDS

MOV AX,@DATA MOV DS,AX ;indâunhaĩc

MOV AH,9 ;hàmxuâtchuoêi

LEA DX,PROMPT;lâyđịachưchuoêivàoDX INT 21H ;xuâtchuoêi

Chương 3: Các leơnh laịp và rẽ nhánh 43

;đĩcvàxửlý1dòngvaínbạn

MOV AH,1 ;đĩckýtự INT 21H ;kýtựtređnAL WHILE:

;trongkhikýtựgõvàokhođngphạilàCRthìthựchieơn CMP AL,0DH ;CR?

JE END_WHILE ;yes,thoát ;nêukýtựlàhoa

CMP AL,’A’ ;char>=‘A’?

JNGE END_IF ;khođngphạikýtựhoathìnhạyđênEND_IF CMP AL,’Z’ ;char<=‘Z’?

JNLE END_IF ;khođngphạikýtựhoathìnhạyđênEND_IF ;thì

;nêukýtựnaỉmtrướcbiênFIRST

CMP AL,FISRT ;char<FIRST? JNL CHECK_LAST;>=

;thì kýtự viêthoađaăutieđn=ký tự

MOV FIRST,AL ;FIRST=character ;end_if

CHECK_LAST:

;nêukýtựlàsaubiênLAST

CMP AL,LAST ;char>LAST? JNG END_IF ;<=

;thìkýtựcuôicùng=kýtự

MOV LAST,AL ;LAST=character ;end_if END_IF: ;đĩcmoơtkýtự INT 21H ;kýtựtređnAL JMP WHILE_ ;laịp END_WHILE:

;inkêtquạ

MOV AH,9 ;hàmxuâtkýtự

;IFkhođngcóchữhoanàođượcnhaơpthìFIRST=‘[‘ CMP FIRST,’[‘ ;FIRST=‘[‘?

JNE CAPS ;khođng,inkêtqụa ;Then LEA DX,NOCAP_MSG INT 21H CAPS: LEA DX,CAP1_MSG

Chương 3: Các leơnh laịp và rẽ nhánh 44 INT 21H LEA DX,CAP2_MSG INT 21H ;end_if ;dosexit MOV AH,4CH INT 21h MAINENDP END MAIN

Chương4:Các leơnh dịch quay 45

Chương 4 : CÁC LEƠNHLOGIC,DỊCH VAØQUAY

Trongchươngnàychúngtasẽxemxétcác leơnhmàchúngcótheơdùngđeơ thayđoơitừngbit tređnmoơtbytehoaịcmoơttừ sôlieơu.Khạnaíngquạnlýđêntừngbit thườnglàkhođngcótrongcácngođnngữcâpcao(trừC)vàđađylàlýdogiạithíchtái saohợpngữvăn đóngvaitròquantrĩngtrongkhilaơptrình.

Một phần của tài liệu giáo trình hợp ngữ nâng cao (Trang 41 - 46)

Tải bản đầy đủ (DOCX)

(95 trang)
w