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