4. Moơt sô chương trình cú theơ:
END MAIN Ví dú
Ví dú 7
Có moơt chuoêi ký tự thường trong boơ nhớ. Hãy táo ra moơt chuoêi ký tự chữ hoa từ chuoêi tređn roăi cât chuoêi đó trong boơ nhớ.
Giại:
Ví du nàý và ví dú trước khi khác nhau chút ít trong vieơc xử lý các ký tự cụa chuoêi, vì vaơy phaăn tređn các leơnh có tính chât chuaơn bị trước và sau các thao tác với chuoêi có theơ coi là như nhau. Đeơ giại bài toán này có theơ ứng dúng các leơnh LODSB và STOSB với chuoêi đã cho. Thuaơt toán là:
+ Lây từng ký tự cụa chuoêi gôc (cũ) baỉng leơnh LODSB, + Biên đoơi thành chữ hoa baỉng cách trừ đi 20H,
+ Cât ký tự đã biên đoơi vào chuoêi đích (mới) baỉng leơnh STOSB.
Sau đađy là cách toơ chức dữ lieơu và chương trình cho bài toán tređn với đoơ dài chuoêi là 8 byte. Đeơ minh hố moơt cách thao tác khác so với cách ở ví dú trước trong ví dú này là dùng cách thao tác lùi đôi với chuoêi ký tự.
.Model Small .Stack 100 .Data
Str1 DB 'a' , 'b' , 'c' , 'd' , 'e' , 'f' , 'g' , 'h' Tbao DB 'chuoêi đã được đoơi: ' , 10,13
DB '$'.Code .Code
MAIN Proc
MOV AX, @Data ; khởi đaău đaău cho DS và ES MOV DS, AX
MOV ES, AX
LEA SI, Str1+7 ; SI chư vào cuôi chuoêi cũ LEA DI, Str2+7 ; DI chư vào cuôi chuoêi mới
STD ; định hướng lùi
MOV CX, 8 ; CX chứa sô byte phại đoơi LAP : LODSB ; lây 1 ký tự cụa chuoêi cũ
SUB AL, 20H ; đoơi thành chữ hoa STOSB ; cât vào chuoêi mới LOOP LAP ; làm cho đên hêt
LEA DX, Tbao ; chuaơn bị hieơn chuoêi mới MOV AH, 9
INT 21H
MOV AH, 4CH ; veă DOS INT 21H
MAIN Endp
END MAINVí dú 8 Ví dú 8
Cho 1 mạng goăm các phaăn tử kieơu byte. Hãy saĩp xêp chúng theo thứ tự lớn daăn.
Giại:
Đađy là bài toán kinh đieơn rât hay gaịp trong khi hĩc laơp trình với các ngođ ngữ khác nhau. Thuaơt giại cụa nó vì thê cũng khá quen thuoơc: tìm phaăn tử lớn nhât (max) trong dãy và xêp phaăn tử đó vào cuôi dãy, tiêp túc làm như
vaơy với các phaăn tử còn lái (trừ phaăn tử vừa được tìm thây và được xêp vào cuôi dãy).
Đeơ minh hĩa thuaơt toán tređn nhưng với dữ lieơu cú theơ, ta giạ thiêt chuoêi caăn saĩp xêp là chuoêi cụa các ký tự ASCII goăm 10 phaăn tử. Tât nhieđn, chương trình văn cháy đúng khi tư thay các phaăn tử cụa mạng tređn baỉng các sô khođng dâu có đoơ lớn bieơu dieên được trong phám vi 1 byte. Tái đađy ta toơ chức chương trình thành 1 chương trình chính và 1 chương trình con. Chương trình con có teđn là DOICHO được gĩi ra moêi khi caăn đoơi choê 2 phaăn tử cụa dãy.
Sau đaơy là chương trình thực hieơn cođng vieơc tređn. . Model Sall
. Stack 100 . Data
Tbao DB 'chuoêi đã saĩp xêp:' , 10, 13
MGB DB 'a' , 'Y' , 'G' , 'T' , 'y' , 'Z' , 'U' , 'B' , 'D' , 'E' DB '$'
. Code MAIN Proc
MOV AX, @Data ; khởi đaău DS
MOV DS, AX ; BX: sô phaăn tử cụa mạng LEA DX, MGB ; DX chư vào đaău mạng byte
DEC BX ; sô vòng so sánh phại làm
LAP : MOV SI, DX ; SI chư vào đaău mạng MOV CX, BX ; CX sô laăn so cụa vòng so MOV DI, SI ; giạ sử phaăn tử đaău là max MOV AL, {DI} ; AL chứa phaăn tử cụa max TIMMAX: INC SI ; chư vào phaăn tử beđn cánh
CMP {SI}, AL ; phaăn tử mới > max ?
JNG TIEP ; khođng, tim max
MOV DI, SI ; đúng, DI chư vào max MOV AL, {DI} ; AL chứa phaăn tử max TIEP: LOOP TIMMAX ; tìm max cụa moơt vòng so
CALL DOICHO ; đoơi choê max - sô mới
DEC BX ; sô vòng so còn lái
JNZ LAP ; làm tiêp vòng so mới
MOV AH, 9 ; hieơn thị chuoêi đã saĩp xêp LEA DX, Tbao
INT 21H
MOV AH, 4CH ; veă DOS