INT 21H MAIN Endp

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

4. Moơt sô chương trình cú theơ:

INT 21H MAIN Endp

MAIN Endp

END MAIN

Trong chương trình tređn ta khođng có phaăn leơnh đeơ hieơn thị kêt quạ cụa phép coơng, vì vaơy ngay cạ khi đã thay các giá trị sô cú theơ vào các biên So1 và So2 roăi dịch ra teơp chương trình có đuođi.EXE và cho cháy nó, ta cũng khođng kieơm tra kêt quạ baỉng cách dùng chương trình tìm loêi Debug (xem theđm phaăn phú lúc đeơ hieơu được các thao tác caăn thiêt trong Debug).

Baỉng chương trình Debug ta có theơ quan sát được các leơnh cụa chương trình tređn được dịch và cât trong boơ nhớ như thê nào, đoăng thời ta cũng xem được các mạng dữ lieơu cụa 2 toán háng và cụa kêt quạ được toơ chức ra sao trong boơ nhớ. Lúc này ta mới giại thích lý do tái sao ta có định nghĩa dòng thođng báo TBao trong đốn dữ lieơu mà ở beđn trong chương trình tređn ta đã khođng heă sử dúng đên nó. Thực chât đađy chi là cách dùng moơt chuoêi ký tự đeơ đánh dâu đốn dữ lieơu mà ta quan tađm. Đieău này cho phép ta deê dàng nhaơn được đốn dữ lieơu mà ta quan tađm. Đieău này cho phép ta deê dàng nhaơn ra được đốn dữ lieơu mà ta caăn quan tađm trong moơt vùng nhớ chứa dữ lieơu moêi khi ta dùng Debug đeơ xem noơi dung cụa nó.

Bađy giờ ta sẽ đeă caơp đên vân đeă sử dúng Deug cú theơ hơn.

Nêu ta gõ vaín bạn cụa chương trình tređn roăi đaịt teđn là teơp ADC.ASM và dịch nó ra teơp ADC.EXE ta có theơ dùng leơnh sau đeơ cháy ADC trong Debug:

Debug adc.exe

Tređn màn hình sẽ xuât hieơn dâu-đó là dâu nhaĩc cụa Debug Tái dâu nhaĩc đó cụa Debug nêu ta gõ

-u 0 60

ta sẽ nhaơn được moơt màn hình, trong đó moơt beđn chứa địa chư các ođ nhớ kèm theo noơi dung cụa các ođ đó (các mã leơnh và dữ lieơu) và beđn kia là các dòng leơnh gợi nhớ tương ứng. Thực ra phaăn mã leơnh cụa chương trình kêt thúc tái địa chư IP=0029H (byte cuôi cụa leơnh INT 21H). Tiêp ngay sau đó chính là phaăn dành cho các dữ lieơu cụa các toán háng và kêt quạ, như những dữ lieơu đó lúc này (do ta đang ở chê đoơ dịch ngược -unassemble) đã bị Debug coi như

là mã leơnh và được dịch ra thành các leơnh gợi nhớ. Muôn xem các mạng dữ lieơu này ta gõ:

-d CS:0 60

ta sẽ thây mã leơnh và dữ lieơu có tái moơt địa chư nào đó được hieơn leđn theo 2 kieơu: baỉng các sô heơ mười sáu (phaăn beđn trái) và baỉng các ký tự ASCII (phaăn beđn phại). Chính tređn phaăn hieơn thị ở beđn phại này ta deê dàng nhaơn thây dòng ký tự dùng đeơ đánh dađu mà ta đã nói đên trước đađy ('Du lieu bat dau tu day'). Nêu lây hàng chữ này làm môc và nhìn sang phaăn hieơn thị dưới dáng sô heơ mưới sáu ở beđn trái (baĩt đaău từ địa chư leơch 002AH) ta deê dàng ta tìm ra vị trí và noơi dung cụa các byte dữ lieơu (là các toán háng) và kêt quạ (kêt quạ được tám gán baỉng 0 lúc đaău).

Đeơ xem chương trình này cho kêt quạ ra sao ta phại cho nó cháy trong mođi trường Debug. Muôn vaơy ta có theơ gõ

-g 50

Sau khi nhaơn được từ mây cađu trạ lời 'program terminated normally'

-chương trình kêt thúc bình thường (khođng loêi), ta gõ tiêp

-d CS: 0 50

đeơ xem kêt quạ cụa chương trình sau khi cháy được cât giữ trong boơ nhớ ra sao.

Sau đađy là moơt trường hợp cụa chương trình tređn với các dữ lieơu cú theơ. Nêu ta gõ vào các byte cụa các toán háng viêt dưới dáng các sô heơ mười sáu:

So1 = 00H 80H 81H 82H 83H 80H 80H 80H 83H 84H 85H và So2 = 00H 80H 81H 82H 83H 80H 80H 80H 83H 84H 85H thì khi cho cháy chương trình ta sẽ nhaơn được.

Sum = 01H 01H 03H 05H 07H 01H 01H 01H 07H 09H 0AH Ta có theơ tính 'baỉng tay' đeơ kieơm chứng lái kêt quạ tređn. Cuôi cùng đeơ ra khỏi Debug ta gõ

- q

Qua moơt vài thao tác sơ boơ trong ví dú tređn ta cũng đã thây được phaăn nào sự tieơn lợi cụa chương trình Debug trong vieơc cho cháy và thử nghieơm các chương trình hợp ngữ đơn giạn

Ví dú 5

Trong thanh ghi BX có sẵn 4 sô heơ mười sáu, moêi sô được bieơu dieên baỉng 1 ođ màu:

Hãy laơp trình đeơ biên đoơi thanh ghi BX thành:

(ví dú: nêu như lúc đaău thanh ghi BX chứa giá trị 1234H thì sau khi biên đoơi, BX sẽ chứa giá trị 3241H.v.v...)

Giại

Thực chât đađy là kieơu bài toán cú theơ này, sau khi xem xét dáng thức cụa thanh ghi BX trước và sau khi biên đoơi, ta thây có theơ thu được kêt quạ mođt cách rât đơn giạn baỉng cách quay trái thanh ghi BX nguyeđn gôc đi 12 bít roăi sau đó quay tiêp thanh ghi BH đi 4 bít là xong.

Sau đađy là chương trình thực hieơn cođng vieơc tređn. .Model Small

.Stack 100 .Code MAIN Proc

MOV CL,12

ROL BX,CL ; quay BX đi 12 bít MOV CL, 4

ROR BH, CL ; tráo 4 bít thâp và cao cụa BH MOV AH, 4CH ; trở veă DOS

INT 21H MAIN Endp

END MAIN

Ví dú 6

Có moơt chuoêi ký tự trong boơ nhớ. Hãy táo ra moơt bạn sao cụa choêi tređn roăi cât trong boơ nhớ.

Giại

Đeơ giại bài toán lối này có theơ ứng dúng các leơnh chuyeơn chuoơi. 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 choêi là 8 byte

.Model Small .Stack 100 .Data

Str1 DB 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h' Tbao DB "bạn sao cụa choêi gôc:', 10,13 Str2 DB 8 DUP (' ')

DB '$'. Code . Code

MAIN proc

MOV AX, @Data ; khởi đaău cho DS và ES MOV DS, AX

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

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

(60 trang)
w