25/05/2018, 07:48

Phụ lục B

Giải các bài tập củng cố BÀI TẬP SỐ 1: 1.1/ Viết chương trình sử dụng lệnh SUB Tương tự chương trình trên nhưng ta sử dụng lệnh SUB thay cho lệnh ADD để trừ 2 số và kết quả được lưu vào thanh ghi AL. ; chương trình trừ ...

Giải các bài tập củng cố

 

  BÀI TẬP SỐ 1:

1.1/ Viết chương trình sử dụng lệnh SUB

Tương tự  chương trình trên nhưng ta sử dụng lệnh SUB thay cho lệnh ADD để trừ 2 số và kết quả được lưu vào thanh ghi AL.

; chương trình trừ 2 số Hex

CLO

MOV           AL,2

MOV           BL,2

SUB           AL, BL

END                                ; kết thúc chương trình .

         

1.2/ Viết chương trình sử dụng lệnh MUL

Tương tự  chương trình trên nhưng ta sử dụng lệnh MUL để nhân 2 số và kết quả được lưu vào thanh ghi AL

; chương trình nhân 2 số Hex

CLO

MOV           AL,2

MOV           BL,2

MUL          AL, BL

END                               ; kết thúc chương trình .

 

1.3/ Viết chương trình chia 2 số sử dụng lệnh DIV

; chương trình chia 2 số Hex

CLO

MOV           AL,2

MOV           BL,2

DIV            AL, BL

END                         ; kết thúc chương trình . 

 

1.4/ Viết chương trình chia cho 0

 

; chương trình chia cho 0

MOV                    AL,10

MOV                    BL,0

DIV                    AL,BL

 

BÀI TẬP SỐ 2:

Sử dụng help page trong số Hex và số nhị phân. Tìm ra những số Hex sẽ làm hoạt động của đèn thay đổi. Từ đó hãy sửa đổi chương trình của đèn giao thông để hoạt động theo trình tự trong thực tế.

Giảng giải:

Ðể thực hiện chương trình . ta phải xem các bit nào làm cho đèn sáng theo trình tự thực tế thì cho lên 1, các bit còn lại bằng 0, 2 bit LSB không sử dụng thì cho bằng 0. Từ đó tìm ra số Hex tương ứng để viết chương trình .

; chương trình điều khiển đèn giao thông thực tế

CLO                      ; đóng tất cả các cửa sổ không cần thiết

Start :

MOV           AL, 84          ; chuyển 84h vào thanh ghi AL

OUT           01                ; xuất ra port 1

MOV           AL, 88          ; chuyển 88h vào thanh ghi AL

OUT           01                ; xuất ra port 1

MOV           AL,30          ; chuyển 30h vào thanh ghi AL

OUT           01                ; xuất ra port 1

MOV           AL,50          ; chuyển 50h vào thanh ghi AL

OUT           01                ; xuất ra port1

JMP           Start            ; nhảy về nhãn Start để thực hiện lại

END                           ; kết thúc chương trình

 

BÀI TẬP SỐ 3:

Viết chương trình hiển thị chữ  HELLO.

Hãy tra bảng mã ASCII của các mẫu tự H,E,L,L,O và copy những giá trị này vào bộ nhớ C0, C1,C2,C3,C4. Ðây là việc đơn giản và có phần thô trong việc hiển thị văn bản, trong việc sắp xếp bộ nhớ để hiển thị.

Giảng giải:

Ðể viết chương trình trên, đầu tiên ta phải tra cứu mã ASCII của các mẫu tự H,E,L,L,O và đưa các mã ASCII đến địa chỉ RAM [C0],[C1],[C2],[C3], [C4]. Chạy chương trình và xem văn bản xuất hiện như thế nào trong việc mô phỏng trên màn hình hiển thị VDU. Ðiều này là những gì xãy ra trong PC của IBM khi đang chạy trong hệ điều hành MS DOS.

Bạn nên làm bài tập này và nếu bạn đang học lập trình ngôn ngữ thấp thì bạn sẽ học có hiệu quả hơn và có nhiều cách linh động hơn để giải quyết vấn đề.

Chương trình :

CLO                               ; đóng các cửa sổ không cần thiết

Start:

MOV           AL,48                  ; đưa 48 vào thanh ghi AL

MOV           [C0], AL              ; đưa dữ liệu trong AL ra màn hình

MOV           AL,45       

MOV           [C1],AL

MOV           AL,4C

MOV           [C2],Al

MOV           AL,4C

MOV           [C3],AL

MOV           AL,4F

MOV           [C4],AL

END.                             ; kết thúc chương trình

 

BÀI TẬP SỐ 4:

    4.1/ Viết chương trình đếm lùi lại sử dụng DEC BL.

; chương trình đếm lùi

MOV BL, 40

Rep :

DEC     BL                         ; giảm BL xuống 1

JMP    Rep

END

 

4.2/ Viết chương trình đếm lên 3 sử dụng lệnh Add BL,3

; chương trình đếm lên 3

MOV  BL, 40

Rep :

Add       BL,3                              ; cộng thêm 3 vào BL

JMP    Rep

END

 

4.3/ Viết chương trình đếm 1,2,4,8,16 sử dụng lệnh MUL BL,2

; chương trình đếm 1, 2, 4, 8, 16

MOV           BL,01

Rep :

MUL         BL,2                     ; nhân 2 vào BL

JMP           Rep

END

 

4.4/Viết chương trình đếm theo dãy số sau 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89,  tràn bộ nhớ .

; Ðếm theo dãy số trên kết quả hiển thị trên ô nhớ [40] và [70] trên RAM        MOV AL,0     ; Giá trị khởi điểm thứ nhất lưu trong AL        MOV BL,1    ; Giá trị khởi điểm thứ hai lưu trong BLRep:         MOV [70],AL        MOV [40],BL        ADD AL,BL        ADD BL,AL        JMP Rep         ; Lặp lại phép cộngEND                        ; _____ Kết thúc chương trình________________________________________ 

 

BÀI TẬP SỐ 5

5.1/ Viết chương trình hiển thị mỗi ký tự tại vị trí đầu bên trái của màn hình VDU bằng việc copy tất cả chúng tới địa chỉ [C0]

Thí dụ ta muốn đưa chữ H ra vị trí đầu bên trái màn hình VDU thì ta phải tra mã ASCII của chữ H và mov vào thanh ghi AL, rồi từ đó copy vào [CO]

Chương trình:

CLO

START :

MOV    AL, 48

MOV    [C0], AL

END

 

5.2/ Viết chương trình sử dụng thanh ghi BL để chỉ tới địa[C0] và tăng BL sau mỗi lần phím nhấn theo thứ tự để thấy được văn bản bạn gõ.

Chương trình:

;Chương trình hiện chữ khi nhấn, nhấn Enter kết thúc chương trình

MOV              BL,C0

Start:

          IN               00

          CMP           AL,0D

          JZ                Stop

          MOV           [BL],AL

          INC             BL

          JMP            Start

Stop:

          END

 

            5.3/ Viết chương trình nhập mã số để mở máy với yêu cầu cụ thể như sau: khi chương trình đã khởi động muốn thoát khỏi chương trình phải tuần tự gỏ đúng thứ tự ba chữ cái A,N,H (đúng cã thứ tự); nếu gỏ sai chương cứ chạy lẩn quẩn không thoát ra được.

; Nhập phím nhấn từ bàn phím cho đến khi phím enter được nhấn ------------

CLO

Rep :

IN      00           ;Kiểm tra có phải chữ A không?

CMP  AL,0D    

JNZ   Rep         

                         

IN      00           ; Có phải chữ N không?

CMP  AL,0D    

JNZ   Rep         

 

IN      00           ; Có phải chữ H không?

CMP  AL,0D    

JNZ   Rep

; Nếu đúng là ba chữ A,N,H nhập theo thứ tự thì thoát khỏi chương trình        

 

END

 

BÀI TẬP SỐ 6:

 Viết chương trình đèn giao thông và sử dụng thủ tục này để thiết lập thời gian trì hoãn giống thực tế.

Ðể hiển thị đèn giao thông đúng thực tế ta cho Ðỏ: 10s, Xanh: 8s, Vàng 2s.

;chương trình hiển thị đèn giao thông theo thực tế

CLO

Start:

MOV           AL,84                  ;đỏ 1 + xanh 2

OUT            01                          ;xuất ra port 1

MOV           AL,8                     ;trì hoãn 8s

CALL       30                          ;gọi thủ tục tại địa chỉ [30]

 

MOV           AL,88                  ;đỏ 1 + vàng 2

OUT            01               

MOV           AL,2                     ;trì hoãn 2s

CALL       30

 

MOV           AL,30                  ;xanh 1 + đỏ 2

OUT            01

MOV           AL,8                     ;trì hoãn 8s

CALL       30

 

MOV           AL,50                  ;vàng 1 + đỏ 2

OUT            01

MOV           AL,2                     ;trì hoãn 2s

CALL       30

JMP          Start                               ;nhảy về nhãn Start

;thủ tục trì hoãn được lưu ở địa chỉ [30]

ORG          30

PUSH       AL

PUSHF

Rep:

DEC          AL

JNZ          REP

POPF

POP          AL

RET

END

 

BÀI TẬP SỐ 7:7.1/ Viết một chương trình sử dụng 3 thủ tục. Bao gồm thủ tục đọc văn bản từ bàn phím và cất vào RAM, thủ tục thứ 2 nên chuyển đổi trường hợp các ký tự chữ hoa trong văn bản thành chữ thường. Thủ tục 3 nên hiển thị văn bản trên màn hình VDU.

; --------------------------------------------------------------; Chương trình chính

MOV         BL,70    ; [70]là địa chỉ mã ASCII của ký tự đầu tiên trên VDU.CALL 10                 ; goi� thủ tục nhập chuỗi ký tựCALL 90                 ; goi� thủ tục chuyển chữ thường thành chữ hoa   CALL 40                 ; goi� thủ tục hiển thị chuỗi ký tự trên VDUHALT     ;  không được dùng END tại đây; --------------------------------------------------------------;  goi thủ tục nhập chuỗi ký tựORG 10                 ; khởi đầu thủ tục tại địa chỉ [10]PUSH AL              ;  lưu trữ trạng thái thanh ghiPUSH BL PUSHF Rep:IN 00                    ; nhập ký tự từ bàn phímCMP AL,0D         ; có phải phím Enter không?JZ Stop                 ; nếu phải nhảy đến StopMOV [BL],AL     ; Nhập phím nhấn vào RAM tại ô nhớ được chỉ ra bởi BLINC BL                ; BL chỉ ra vị trí kế tiếp mà ký tự sẽ nhập vàoJMP Rep              ; Nhảy về Rep ( chuẩn bị nhập phím kế tiếp)Stop:MOV AL,0             ; Nhập khoảng trắngMOV [BL],AL        POPF                 ; phục hồi trạng thái thanh ghiPOP BL POP AL RET                    ; kết thúc thủ tục; --------------------------------------------------------------; CHUYỂN CHỮ THƯỜNG THÀNH CHỮ HOAORG 90        PUSH AL        PUSH BL        PUSHFCHUYEN:MOV         AL,[BL] ; Có ký tự nào nhập và tại ô nhớ [BL]?

CMP         AL,0        ; nếu không thoát ra NGUNGJZ              NGUNGSUB             AL,20    ;nếu có, chuyển sang chữ hoaMOV         [BL],ALINC             BLJMP          CHUYENNGUNG:        POPF                ; khôi phục trạng thái thanh ghi        POP BL        POP ALRET;---------------------------------------------------------------; THỦ TỤC HIỂN THỊ KÝ TỰ TRÊN MÀN HÌNHORG 40 ; HERE:MOV CL,C0     ; XEM CHÚ GIẢI Ở BÀI TẬP 7    MOV BL,70          START:                 MOV AL,[BL]      CMP AL,0             JZ END1                MOV [CL],AL        INC CL                     INC BL                        JMP START             END1:    ; --------------------------------------------------------------END

 

BÀI TẬP SỐ :8.1/ Sử dụng bảng dữ liệu viết chương trình điều khiển đèn giao thông theo thực tế. Ta phải tìm số nhị phân nào làm cho đèn sáng tương ứng và sau đó đổi qua số hex

Ta có thể quy ước :

Ðỏ 1 - Xanh 2 sáng : 1000 0100

Ðỏ 1 - Vàng 2 sáng : 1000 1000

Xanh 1 - Ðỏ 2 sáng : 0011 0000

Vàng 1 - Ðỏ 2 sáng : 0101 0000

Chương trình:

;đèn  giao thông sáng theo thực tế

          JMP            Start

 

     DB       84

     DB       88

     DB       30

     DB       50

Start:

     MOV       BL,02

Rep:

     MOV       AL,[BL]

     OUT       01

     CMP        AL,50

     JZ      Start

     INC       BL

     JMB       Rep

      END  

 

8.2/ Viết chương trình điều khiển động cơ bước chạy bước

;động cơ bước chay bước

JMP START

DB 1

DB 3

DB 2

DB 6

DB 4

DB 0C

DB 8

DB 9

START:

MOV BL,02

REP:

MOV AL,[BL]

OUT       05

CMP        AL,9

JZ           STOP

INC       BL

JMP        REP

STOP:

END

 

BÀI TẬP SỐ 9:

            9.1/Viết thủ tục nhân đôi một số, cứ một tham số trong thủ tục thì sử dụng 1 thanh ghi. Sử dụng cùng thanh ghi để quay trở về lại kết quả.  

; Nhảy qua bảng thông số ----------------------------------------------------

    JMP Start         

    DB 00

    DB 00

Start:

    MOV     AL,5    ;giữ 1 byte của RAM tại địa chỉ 02

    MOV     BL,2    ;giữ 1 byte của RAM tại địa chỉ 03

    CALL       30   ;gọi thủ tục nhân đôi

;Thủ tục nhân đôi một số  ------------------------------------------------------

;Các tham số thông qua trong thủ tục sử dụng AL và BL

;Kết quả đưa vào AL

    ORG      30             ;bắt đầu tại địa chỉ 30

    MUL     AL,BL      ;nhân AL với 2, kết quả lưu trong AL

RET                           ;kết thúc chương trình con, quay trở về từ thủ tục

END                            ;kết thúc chương trình

;-----------------------------------------------------------------------------------

 

            9.2/ Viết thủ tục đảo tất cả các bit trong byte (tất cả số 0 thành 1, số 1 thành 0). Chuyển giá trị được xử lý vào thủ tục bằng cách sử dụng vị trí RAM. Quay trở về kết quả trong cùng vị trí RAM.

; Nhảy qua bảng thông số ----------------------------------------------------

    JMP Start         

    DB 00

Start:

;sử dụng vị trí RAM để đưa các tham số vào trong 1 thủ tục

      MOV        AL,3

      MOV        [02],AL

      CALL        40        ;gọi thủ tục đảo dấu

;Thủ tục đảo tất cã các bit ---------------------------------------------------

;Các tham số thông qua trong thủ tục sử dụng vị trí RAM

;Kết quả lưu vào vị trí RAM

    ORG     40                ;bắt đầu tại địa chỉ 40

    PUSH    CL              ;lưu các thanh ghi và các cờ vào ngăn xếp

    PUSHF

    MOV     CL,[02]        ;tìm nạp tham số từ RAM

    NOT      CL

    POPF                          ;khôi phục lại thanh ghi ban đầu và giá trị cờ

    POP CL

RET                                ;kết thúc chương trình con

END                              ;kết thúc chương trình

;-----------------------------------------------------------------------------------

 

BÀI TẬP SỐ 10:

            Viết một chương trình ngắt nạp phím nhấn và lưu vào RAM.

; --------------------------------------------------------------; Ngắt mềm

;---------------------------------------------------------------Jmp Start         ; nhảy qua bảng dữ liệu của ảng vector ngắtDB 51             ; vector tại ô nhớ 02 chỉ tới địa chỉ  51Start:INT 02           ; ngắt 02; --------------------------------------------------------------ORG 50DB 70; ----------------------------------------------------------------; Nhập văn bảng vào từ bàn phím, việc nhập kết thúc khi nhấn ENTER.; ----------------------------------------------------------------MOV     BL,C0 ; định địa chỉ sẽ hiển thị trên VDU (góc trái màn hình)Start1:IN 00                 ; Nhập từ bàn phím vào thanh ghi AL.CMP AL,0D     ; Có phải phím ENTER ? JZ     Stop          ; Nếu phải thì nhảy về Stop.MOV [BL],AL ; Chuyển ký tự vừa nhập trong AL vào VDU ở                           ; địa chỉ mà BL chỉ đếnINC     BL         ; BL chỉ ra vị trí kế tiếp trên VDU.JMP     Start      ; Trở về lại nhãn start.Stop:IRETEND

 

BÀI TẬP 11

1/ Viết chương trình kiểm tra bộ định thời tạo xung ngắt trong chương trình mô phỏng. ; --------------------------------------------------------------; Chương trình minh hoạ sự tác động của bộ định thời tạo tín hiệu ngắt cứng

; Trong Configuration Tab, khoảng thời gian là 5 ; nghĩa là sau mỗi 5 giây sẽ có một lệnh INT02 được gọi từ bộ định thời phần 

; cứng tác động lên chương trình Jmp StartDB 40Start:STIRep:NOPNOPNOPNOPNOPNOPJMP RepORG 40NOPNOPNOPNOPNOPNOPIRETEND

2/Dùng lệnh CLI và STI để kiểm tra sự tác động của ngắt cứng lên CPu trong chương trình mô phỏng.

; --------------------------------------------------------------; Sử dụng lệnh CLI và STI để xoá và đặt cờ I

; Chương trình kiểm tra chức năng của ngắt cứng 02; --------------------------------------------------------------JMP StartDB 40 ; Vector ngắt tại địa chỉ 02Start:nopnopnopclinopnopnopstijmp Start; --------------------------------------------------------------org 40NOPNOPNOPNOPNOPIRET; --------------------------------------------------------------end

;---------------------------------------------------------------

 

3/Viết chương trình điều khiển đồng thời đèn giao thông khi về khuya (chỉ có đèn vàng ở mỗi cột nhấp nháy) cùng mạch đếm từ 0 đến 9 lập đi lập lại nhiều lần, hiển thị kết quả trên một led 7 đoạn. Nếu bạn muốn phần cứng đếm từ 00 đến 99 thì sử dụng cả 2 led hiển thị cùng một lúc. 

; --------------------------------------------------------------Jmp Start ; nhảy qua bảng dữ liệuDB 50     ; vec tơ ngắt cứngDB FA    ; Bảng dữ liệu bắt đầu ở địa chỉ [03]DB 0ADB B6DB 9EDB 4EDB DCDB FCDB 8ADB FEDB CE ; dữ liệu cuối cùng trong bảng.DB 03 ; Ðịa chỉ bắt đầu của bảng dữ liệu; --------------------------------------------------------------Start:STI                 ; Cho phép ngắt cứng tác động

Mov BL,03     ; BL chứa địa chỉ khởi đầu của bảng dữ liệuRep:MOV AL,[BL] ; chuyển dữ liệu từ bảng vào ALOUT 02             ; hiển thị LED

CMP AL,CE     ; Có phải cuối bảng chưaJZ Start             ; Nếu cuối, nhảy đến StartINC BL             ; vị trí kế tiếp của bảngJMP Rep            ; Nhảy trở về và thực hiện với con số kế tiếpJMP Start; --------------------------------------------------------------ORG 50push al ;lưu trữ trạng thái thanh ghipush bl ;pushf ;  Jmp PastDataDB 40 ; vàng trái sángDB 08 ; vàng phải sángDB 57 ; qua bảngPastData:MOV BL,[59]           ; BL chỉ đến bảng dữ liệuMOV AL,[BL]         ; chuyển dữ liệu từ bảng vào ALOUT 01                     ; hiển thị đèn giao thôngCMP AL,08              ; Có phải dữ liệu cuối cùng của bảngJZ Reset                    ; Nếu cuối,  đến ResetINC BL                     ; BL chỉ đến vị trí kế tiếpMOV [59],BL           ; Lưu giá trị con trỏ lệnh vào RAMJMP StopReset:MOV BL,57             ; Ðến địa ch3 khởi điểm của bản dữ liệuMOV [59],BL          ; Lưu con trỏ lệnh vào ô nhớ 54 trên RAM Stop:popf                            ; phục nguyên trang thái thanh ghipop bl pop al IRET; --------------------------------------------------------------END; --------------------------------------------------------------

Lời giải phần bài tập tổng hợp

   

BÀI TẬP 1.1

        Ứng dụng vòng lập.

        CLO            ; --------------------------------------------------------

Start:           MOV    AL,84            OUT     01

LOOP1:

            INC    AL            CMP    AL,8a            JNZ    LOOP1            MOV    AL,88            OUT    01LOOP2:

            INC    AL            CMP    AL,8a            JNZ    LOOP2            MOV    AL,30            OUT     01LOOP3:

            INC    AL            CMP    AL,39            JNZ    LOOP3            MOV    AL,50            OUT     01LOOP4:

            INC    AL            CMP    AL,53            JNZ    LOOP4            JMP    StartEND

;-----------------------------------------------------------------------------------    

   

BÀI TẬP 1.2:

Sử dụng thủ tục định thời.

;chương trình hiển thị đèn giao thông 

CLO

Start:

MOV      AL,84                  ;đỏ 1 + xanh 2

OUT            01                    ;xuất ra port 1

MOV      AL,8                    ;trì hoãn 8s

CALL          30                    ;gọi thủ tục tại địa chỉ [30]

MOV      AL,88                   ;đỏ 1 + vàng 2

OUT            01               

MOV      AL,2                     ;trì hoãn 2s

CALL          30

MOV      AL,30                  ;xanh 1 + đỏ 2

OUT            01

MOV          AL,8                    ;trì hoãn 8s

CALL         30

MOV     AL,50                  ;vàng 1 + đỏ 2

OUT      01

MOV     AL,2                     ;trì hoãn 2s

CALL        30

JMP     Start                       ;nhảy về nhãn Start

;thủ tục trì hoãn được lưu ở địa chỉ [30]

ORG          30

PUSH       AL

PUSHF

Rep:

DEC          AL

JNZ          REP

POPF

POP          AL

RET

END

;------------------------------------------------------------------------------

 

BÀI TẬP 1.3:   

Sử dụng bảng dữ liệu.

Ta có thể quy ước :

Ðỏ 1 - Xanh 2 sáng : 1000 0100

Ðỏ 1 - Vàng 2 sáng : 1000 1000

Xanh 1 - Ðỏ 2 sáng : 0011 0000

Vàng 1 - Ðỏ 2 sáng : 0101 0000 

Chương trình:

       JMP     Start

            DB       84

     DB       88

     DB       30

     DB       50

Start:

     MOV       BL,02

Rep:

     MOV       AL,[BL]

     OUT         01

     CMP         AL,50

     JZ              Start

     INC          BL

     JMP         Rep

END

   

BÀI TẬP 2.2:

;GHI VÀO MÀN HÌNH VDU---------------------------------------------

CLO                                           ;đóng các cửa sổ khác lại

JMP         HERE                         ;nhảy qua bảng dữ liệu

DB         "HELLO WORLD"    ;nạp chuỗi ký tự vào RAM

DB           0        ;kết thúc chuỗi ký tự hiển thị đoạn văn bản

HERE:

MOV     CL,C0             ;định ra địa chỉ đầu tiên trên màn hình

MOV     BL,03              ;địa chỉ bắt đầu của đoạn văn bản

START:

MOV     AL,[BL]         ;đưa ký tự trong chuỗi vào AL

CMP         AL,0            ;kết thúc chuỗi ký tự chưa?

JZ             END            ;nếu đã kết thúc nhảy ra khỏi vòng lặp đến END

MOV     CL,[AL]          ;nếu chưa kết thúc lưu ký tự vừa hiển thị vào VDU

INC          CL                ;định ra vị trí kế cận ký tự vừa hiển thị xong

INC          BL                ;đưa ký tự kế tiếp trong chuỗi vào BL

JMP     START             ;trở về start

END1:

; ----- XOÁ MÀN HÌNH VDU -----------------------------------        MOV CL,C0          ;định ra địa chỉ đầu tiên trên màn hình VDU        MOV BL,0C           ; địa chỉ bắt đầu xoá  

        MOV AL,20             ; chèn khoảng trốngREP:        MOV [CL],AL          ; Xoá từng chữ

        INC CL         DEC BL                   ; Giảm dần BL        JNZ REP                 ; thoát khi xoá hoàn tất        JMP HERE             ; trở về lại từ đầu; -------------------------------------------------------------- END; -------------------------------------------------------------- 

  

BÀI TẬP 3.1:

Viết chương trình điều khiển động cơ bước quay thuận với mỗi bươc quay là 5 độ (quay 1/2 bước).

Start :

          MOV           AL,1

          OUT             05

          MOV           AL,3

          OUT              05

          MOV           AL,2

          OUT              05

          MOV          AL,06

          OUT              05

          MOV          AL,04

          OUT              05

          MOV           AL,0C

          OUT              05

          MOV             08

          OUT                05

          MOV            AL,09

          OUT                05         

          JMP               Start

          END�

Chương trình sẽ ngắn hơn khi sử dụng bảng dữ liệu.

BÀI TẬP 3.2:

Viết chương trình điều khiển động cơ bước quay thuận 90 độ; nghịch 35 độ sau đó dừng lại.

Giải tương tự như bài 3.1 nhưng dừng ở 1/2 bước cuối lúc quay nghịch 35 độ.

  

 

 BÀI TẬP 4.1:

            Ở đây ta sử dụng port 04, gửi giá trị FF đến thanh ghi AL để xác lập lại rắn. Lên, xuống bên trái và bên phải được điều khiển bởi 4 bit trái. Bốn bit phải điều khiển quãng đường di chuyển.

Chương trình:

ORG    30        ;bảng dữ liệu để rắn chạy trong ma trận: thiết bị lái

DB        4F       ;xuống 0B

DB        1D       ;phải 3

DB        8B       ;lên 8

DB        1D       ;phải 3

DB        4E        ;xuống 6

DB        1E        ;phải 3

DB        8E        ;lên 9

DB        2F        ;trái 5

DB        8C        ;lên 3

DB        1F         ;phải 8

DB        4E         ;xuống 0C

ORG     40          ;bảng dữ liệu để rắn chạy trong ;ma trận: khoảng cách

DB        0B         ;xuống 0B

DB        3            ;phải 3

DB        8            ;lên 8

DB        3            ;phải 3

DB        6            ;xuống 6

DB        3            ;phải 3

DB        9            ;lên 9

DB        5            ;trái 5

DB                3            ;lên 3

                        DB        8            ;phải 8

DB        0C         ;xuống 0C

START:

MOV      AL,FF

OUT             04

MOV      CL,30

MOV      DL,40

MORE:

 MOV      AL,[CL]

  MOV      BL,[DL]

  CMP        AL,0

  JZ            START

REP:

        OUT           04

        DEC           BL

        JNZ            REP

        INC           CL

        INC           DL

        JMP     MORE

END

 

 

BÀI TẬP 4.2

        Gợi ý lập trình tương tự bài tập 11.3, thay thế hai chương trình thành phần bằng chương trình điều khiển rắn trong mê cung và đóng điên lò sấy.

    

BÀI TẬP 5 

       Hãy viết chương trình đều khển thang máy theo các nút nhấn lên xuống có trong giao diện phần cứng ở port 06.

;Chương trình điều khiển thang máy

MOV     AL,0

OUT         06

LOOP:

IN             06                             ;kiểm tra thang máy tại đỉnh hầm thang máy

PUSH       AL

POP         BL

AND         BL,5                     ;kiểm tra động cơ và nút nhấn đi lên

CMP   &nbs

0