You are on page 1of 4

Cao Phạm Hùng

CNKTD 1A

BÀI TẬP VI XỬ LÝ
Bài 1: Viết chương trình bằng ngôn ngữ Assembly cộng 2 giá trị thanh ghi BX, CX rồi
nhân đôi kết quả cuối cùng cất trong thanh ghi AX

Giải : MOV AX , BX
ADD AX , CX
SHL AX , 1

Bài 2 : Gán BX = І AX І
Giải : CMP AX , 0 ; So sánh AX > 0
JNL DUONG ; AX DUONG
NEG AX ; Nếu AX < 0 thì đảo dấu
DUONG : MOV BX , AX
NEXT: ; lối ra của cấu trúc.

Bài 3 : Gán cho CL giá trị bit dấu của AX

Giải : CMP AX , 0 ; AX > 0


JNS AM ; AX < 0
MOV CL , 1 ; CL=1 ( AX > 0)
JMP NEXT
AM : MOV CL , 0 ; CL=0 (AX < 0)
NEXT : ; lối ra của cấu trúc

Bài 4 : Nếu AX > 0 thì BH = 0 nếu AX < 0 thì BH = 1 ngược lại BH = 2

Giải : CMP AX , 0 ;Kiểm tra dấu của AX


JL AM ; AX < 0
JE KHONG ; AX = 0
JG DUONG ; AX > 0
DUONG : MOV BH , 0
JMP NEXT
AM : MOV BH , 1
JMP NEXT
KHONG : MOV BH , 2
NEXT :

Bài 5 : Đọc vùng nhớ bắt đầu tại địa chỉ 1000h vào thanh ghi AH, đến khi gặp ký tự ‘$’ thì
thoát
MOV BX , 1000h
Continued : CMP AH , ‘ $ ’
JZ NEXT
MOV AH , DS : [ BX ]
JMP Continued
NEXT :

Bài 6
a,
Label: ADD CX , AX
MOV BX , CX
INC CX
DEC AX
CMP AX , 0
JNZ Label
Stop:
b,
label : CMP AX , 100D
JAE STOP ;
ADD AX , BX
INC BX
JMP label
STOP:

c, MOV CX , 0
Label: CMP CX , 20
JA stop
ADD AX , BX
INC CX
JMP Label
Stop:

d, MOV CX , 23D
Label INC AX
INC BX
DEC CX
CMP CX , 0
JNZ Label
Stop:

e, CMP AX,0
INC CX
ADD BX,CX
INC AX
NEG AX
SUB BX,AX
Bài 7: Kiểm tra xem thanh ghi có độ dài 8bit có bao nhiêu bit có giá trị logic bằng 1
XOR CX,CX
MOV CL,1
Label: CMP CL,8
JA STOP
SHL AH,CL
CMP CF,1
JZ Label1
INC CL
JMP Label
Label1: INC CX
STOP:

Bài 8: Lệnh tính giá trị biểu thức a=2.(b+c) kết quả cất trong AX
MOV CX , c
MOV BX , b
MOV AX , BX
ADD AX , CX
SHL AX , 1

Bài 10: Xác định địa chỉ vật lý của ô nhớ có địa chỉ logic 0AB1h:CD20h

Ta có Địa chỉ vật lý = Segment x 16 + offset


Khi đó Địa chỉ vật lý = 0AB10h + CD20h = 17830h

Bài 11: Ô nhớ có địa chỉ vật lý 4A37Bh Xác định


a, địa chỉ offset của nó nếu địa chỉ đoạn là 40FFh

Ta có 4A37Bh = 40FFh x 16 + offset


4A37Bh = 0100 1010 0011 0111 1011
= 303995
40FFh = 0100 0000 1111 1111
= 16639
Ta được offset = 4A37Bh – 40FFh x 16
= 303995 – 16639 x 16
=37771 = 1001 0011 1000 1011 = 938Bh
b , điạ chỉ segment nếu địa chỉ offset là 123Bh

Ta có segment = (4A37Bh – 123Bh) / 16


Với 4A37Bh = 303995
123Bh = 4667
segment = (303995 – 4667) /16 = 18708
= 9228h

Bài :12 Hiển thị 1 dòng ký tự ‘$’ trên màn hình (80 ký tự)
MOV CX , 80 ; số lần hiển thị trong CX
MOV AH , 2 ; AH chứa số hiệu hàm hiển thị
MOV DL , ‘ $ ’ ; DL chứa ký tự ‘ $ ‘ cần hiển thị
PRINT: INT 21 h ; hiển thị
LOOP PRINT ; cả một dòng ký tự
OUT : : Lối ra của cấu trúc.

Bài 13: Đếm số ký tự nhập từ bàn phím,dừng lại khi gặp ký tự CR

XOR CX , CX ;Tổng số ký tự đọc dược lúc đầu là 0


MOV AH , 1 ;Hàm đọc ký tự từ bàn phím
Continued : INT 21H ; Đọc một ký tự , AL chứa mã ký tự
CMP AL , CR ; Đọc được CR?
JE OUT ; nếu đúng , ra.
INC CX ; nếu sai , thêm 1 ký tự vào tổng
JMP Continued ; đọc tiếp
OUT : ; Lối ra của cấu trúc

Bài 14 : Giải thích câu lệnh


a/ XOR AL , AL ;Xóa
MOV CX , 16 ; Số lần lặp để tại CX là 16
LẶP : INC AL ; tăng AL thêm 1
LOOP LẶP : Lặp lại 16 lần

b/ XOR AL , AL ; Xóa AL
MOV CX , 100 ;Số lần lặp để tại CX là 100
LẶP INC AL ;tăng AL thêm 1
CMP AL , 16 ;so sánh AL với 16
LOOPZ LẶP :lặp lại nếu AL <> 16

You might also like