Download as pdf or txt
Download as pdf or txt
You are on page 1of 4

2.

Viết chương trình nhận từng byte dữ liệu từ cổng có địa chỉ 10h và gửi ra cổng
có địa chỉ 20h

a.Cho tới khi gặp byte dữ liệu =00000000 thì dừng

b.Cho tới khi gặp 2 byte dữ liệu liên tiếp = 0 thì dừng.

n1:

IN AL, 10h ; Nhận 1 byte dữ liệu từ cổng có địa chỉ 10h

CMP AL, 0 ; So sánh nội dung AL (byte dữ liệu nhận được) với 0

JZ n2 ; Nhảy tới nhãn “n2” nếu cờ Z=1 (byte dl nhận được =0)

OUT 20h, AL ; Gửi nội dung AL ra cổng có địa chỉ 20h nếu cờ Z=0

; (byte dữ liệu nhận được khác 0)

JMP n1 ; Nhảy tới nhãn “n1”

n2:

MOV BL, AL ; cất nội dung của AL (byte dl nhận được bằng 0) vào BL

IN AL, 10h ; nhận byte dữ liệu từ cổng có địa chỉ 10h

CMP AL, 0 ; So sánh nội dung AL (byte dl nhận được ) với 0

JZ thoat ; Nhảy tới nhãn “thoat” nếu cờ Z=1 (byte dl nhận được =0)

MOV DL, AL ; Chuyển nội dung AL (byte dl khác 0 vừa nhận) vào DL

MOV AL, BL ; Chuyển nội dung BL(byte dữ liệu bằng 0) vào AL

OUT 20h , AL; Gửi nội dung AL ra cổng có địa chỉ 20h

MOV AL, DL ; Chuyển nội dung DL vào AL

OUT 20h, AL ; Gửi nội dung AL ra cổng có địa chỉ 20h

JMP n1 ; Nhảy tới nhãn “n1”

thoat:
3.Viết chương trình nhận 1 byte dữ liệu từ cổng có địa chỉ 10h và kiểm tra bit D7.

Nếu D7=1 thì gửi nội dung ô nhớ có địa chỉ 1000Ah =1000h*16+0Ah ra
cổng có địa chỉ 20h

Nếu D7=0 thì gửi nội dung ô nhớ có địa chỉ 1000Bh ra cổng có địa chỉ
30h

Giải:

1 0 0 0 0 0 0 0

MOV AX, 1000h ; Nội dung thanh ghi AX=1000h

MOV DS, AX ; Nội dung DS = nội dung AX =1000h

IN AL, 10h ; Nhận 1 byte dữ liệu từ cổng có địa chỉ 10h

AND AL, 80h ; AND n.dung AL với giá trị 80h (giữ lại bit D7,

; xóa các bit còn lại)

CMP AL, 80h ; So sánh ndung AL với 80h (kiểm tra bit D7)

JZ Guira20h ; Nhảy tới nhãn “guira20h” nếu cơ Z=1 (D7=1)

MOV AL, [0Bh] ; Chuyển n.dung ô nhớ có đ/c 1000Bh vào AL

OUT 30h, AL ; và gửi ra cổng có địa chỉ 30h

JMP thoat ; Thoát khỏi đoạn chương trình

Guira20h:

MOV AL, [0Ah] ; Chuyển n.dung ô nhớ có đ/c 1000Ah vào AL

OUT 20h, AL ; và gửi ra cổng có địa chỉ 20h

thoat:
5. Viết chương trình assembly nhập vào từ bàn phím các số (có một chữ số) cho tới
khi nhấn phím ESC thì dừng. Hiển thị lên màn hình giá trị MAX

ASCII
MAIN proc

MOV AH, 1

INT 21h ; Nhập số thứ nhất.

CMP AL, 1bh ; Ký tự vừa nhập có phải ‘ESC’?

JZ thoat ; Nếu đúng, thoát khỏi chương trình.

MOV DL, AL ; Chuyển số vừa nhập vào DL (chứa giá trị MAX).

nhaptiep:

INT 21h ; Nhập số tiếp theo

CMP AL, 1bh ; Ký tự vừa nhập có phải ‘ESC’?

JZ hienthi ; Nếu đúng, nhảy tới “hienthi” để hiển thị g.trị MAX

CMP DL,AL ; So sánh DL>=AL?

JNC nhan1 ; Nếu DL>=AL, giữ nguyên DL

XCHG DL,AL ; Nếu DL<AL, chuyển AL vào DL

Nhan1:

JMP nhaptiep ; Tiếp tục nhập và so sánh.

hienthi:

MOV AH,2

INT 21h ; Hiển thị giá trị MAX lên màn hình

thoat:

MOV AH, 4Ch

INT 21h

MAIN Endp
END MAIN

Viết chương trình Assembler thực hiện công việc sau: nhập vào từ bàn phím lần lượt các
ký tự “a,b,c,d,e”, sau đó hiển thị lên màn hình theo thứ tự ngược lại.

MAIN proc

MOV CX, 5 ; CX=5 (số ký tự cần nhập)

MOV AH,1

nhaptiep:

INT 21h ; Chờ nhập ký tự vào từ bàn phím

PUSH AX ; và cất mã ASCII của ký tự vừa nhập vào Stack.

LOOP nhaptiep ; Quay về “nhaptiếp” để nhập k.tự tiếp theo nếu CX  0

MOV CX,5 ; CX=5 (số ký tự cần hiển thị)

hienthi:

POP AX ; Lấy mã ASCII của ký tự vừa nhập vào AL từ Stack

MOV DL,AL ; và chuyển vào DL

MOV AH,2

INT 21h ; Hiển thị ký tự lên màn hình

LOOP h_thi ; Quay về “hienthi” để h.thị ký tự tiếp theo nếu CX  0

MOV AH,4Ch

INT 21h

MAIN Endp

END MAIN

You might also like