END MAIN Ví dú

Một phần của tài liệu Lập Trình Bằng Hợp Ngữ Với 8088 (Trang 39)

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

Một phần của tài liệu Lập Trình Bằng Hợp Ngữ Với 8088 (Trang 39)

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

(60 trang)
w