LTDKTB

Màu nền
Font chữ
Font size
Chiều cao dòng

Câu 1: Xác định giá trị thanh ghi cờ, AX và CX của một bộ vi xử lý 8088 sau khi bộ vi xử lý đó thực hiện lệnh trong các trường hợp sau

Theo đề bài ta có: 

Giá trị của AX = 111Fh, suy ra AH = 11h và AL = 1Fh 

Giá trị của CX = CDEBh, suy ra CH = CDh và CL = EBh 

Giá trị của Flag = 4321h hay là Flag = 0 1 0 0 0 0 1 1 0 0 1 0 0 0 0 1 

Ta biết thanh ghi cờ có 16bit, mỗi bit tương ứng là một cờ như là CF, PF, AF … 

Xác định giá trị của thanh ghi cờ nghĩa là ta xác định giá trị của từng cờ trong thanh ghi cờ. 

a. AND AL, CL 

Ta có AL = 1Fh và CL = EBh. Sau khi thực hiện lệnh AND AL,CL thì AL có giá 

trị mới là 0Bh (dạng nhị phân là 00001011).  

Giá trị của CL không thay đổi.  

Xét giá trị các cờ của thanh ghi cờ: 

CF = 0  (Vì kết quả thực hiện lệnh không có việc nhớ bit MSB). 

PF = 0 (Tổng các bit 1 trong byte thấp của kết quả là một số lẻ) 

ZF = 0 (Kết quả là 1 số khác 0) 

SF = 0 (vì MSB = 0, kết quả là số dương) 

OF = 0 (vì dấu của kết quả giống như dấu của 2 số hạng ban đầu) 

Thanh ghi cờ có giá trị mới là Flag = 0 1 0 0 0 0 1 1 0 0 1 0 0 0 0 0 

Do đó sau khi thực hiện lệnh thì giá trị chứa ở các thanh ghi như sau: 

Flag = 4320h, AX = 110Bh, CX = CDEBh 

b. NOT AH 

Chức năng lệnh NOT là đảo ngược từng bit một của toán hạng đích. 

Ta có AH = 11h hay viết dưới dạng nhị phân là 00010001. Thực hiện lệnh NOT 

AH thì AH có giá trị mới là EEh (dạng nhị phân: 11101110).  

Giá trị thanh ghi CX không thay đổi, vì lệnh chỉ tác động lên thanh ghi AH 

Xem xét từng cờ của thanh ghi cờ, ta nhận thấy giá trị của thanh ghi cờ cũng không 

thay đổi 

Do đó sau khi thực hiện lệnh thì giá trị chứa ở các thanh ghi như sau: 

Flag = 4321h, AX = EE1Fh, CX = CDEBh 

c. CMP AL, CL 

Chức năng lệnh CMP là so sánh hai toán hạng nguồn và toán hạng đích bằng cách 

lấy toán hạng đích trừ đi toán hạng nguồn. Nội dung của hai toán hạng đều không thay đổi 

sau khi thực hiện lệnh này. 

Ta có AL = 1Fh (dạng nhị phân là 00011111).  

          CL = EBh (dạng nhị phân là 11101011).  

                      00011111 

           -          11101011 

                      00010100 

Xem xét từng cờ của thanh ghi cờ, ta nhận thấy CF = 1 (vì phép trừ có mượn bit 

của MSB) và các cờ khác của thanh ghi cờ cũng không thay đổi. 

Giá trị thanh ghi CX không thay đổi. 

Do đó sau khi thực hiện lệnh thì giá trị chứa ở các thanh ghi như sau: 

Flag = 4321h, AX = 111Fh, CX = CDEBh 

d. INC AH 

Lệnh INC làm tăng giá trị của  toán hạng đích lên 1. 

Ta có AH = 11h (dạng nhị phân là 00010001). Sau khi thực hiện lệnh INC AH thì 

AH có giá trị mới là 12h (dạng nhị phân: 00010010).  

Giá trị thanh ghi CX không thay đổi, vì lệnh chỉ tác động lên thanh ghi AH 

Lệnh này không tác động đến cờ CF, nên giá trị CF vẫn là 1. 

PF = 1, vì có tổng số bit 1 trong byte thấp của kết quả là 1(là số lẻ) 

Thanh ghi cờ có giá trị mới là Flag = 0 1 0 0 0 0 1 1 0 0 1 0 0 1 0 1 

Do đó sau khi thực hiện lệnh thì giá trị chứa ở các thanh ghi như sau: 

Flag = 4325h, AX = 121Fh, CX = CDEBh 

e. DEC AH 

Lệnh DEC làm giảm giá trị của  toán hạng đích lên 1. 

Ta có AH = 11h. Sau khi thực hiện lệnh thì AH có giá trị mới là 10h.  

Giá trị thanh ghi CX không thay đổi, vì lệnh chỉ tác động lên thanh ghi AH 

Lệnh này không tác động đến cờ CF, nên giá trị CF vẫn là 1. Giá trị của PF vẫn là 0 

Thanh ghi cờ có giá trị không thay đổi 

Do đó sau khi thực hiện lệnh thì giá trị chứa ở các thanh ghi như sau: 

Flag = 4321h, AX = 101Fh, CX = CDEBh 

f. XCHG AH, BH 

Lệnh XCHG hoán vị giá trị giữa toán hạng nguồn và toán hạng đích. 

Ta có AH = 11h. Do BH không xác định, nên ta giả sử như BH = 00h. 

Sau khi thực hiện lệnh thì AH có giá trị mới là 00h .  

Giá trị thanh ghi CX không thay đổi, vì lệnh chỉ tác động lên thanh ghi AH 

Lệnh này không tác động đến các cờ của thanh ghi cờ, nên thanh ghi cờ có giá trị 

không thay đổi 

Do đó sau khi thực hiện lệnh thì giá trị chứa ở các thanh ghi như sau: 

Flag = 4321h, AX = 001Fh, CX = CDEBh

Câu 2. Trình bày vai trò của các thanh ghi con trỏ và chỉ số: IP, SP, SI và DI.

Các thanh ghi con trỏ và chỉ số là các thanh ghi 16 bit. Chúng thường được lưu địa chỉ lệch (offset) và  kết hợp với thanh ghi đoạn tương ứng  tạo thành cặp thanh ghi  chứa địa chỉ xác định của mã lệnh, mục dữ liệu, hoặc mục dữ liệu lưu trong stack.  Nhờ vào cặp thanh ghi này,  người ta có thể tính đia chỉ vật lý cụ thể  theo công thức sau:  

Địa chỉ vật lý  = địa chỉ đoạn  * 16 + địa chỉ lệch 

Dưới đây là các thanh ghi con trỏ và chỉ số: 

-  Thanh ghi con trỏ lệnh IP (Instruction Pointer): trỏ vào lệnh kế tiếp sẽ được thực hiện nằm trong đoạn mã do con trỏ CS trỏ tới. Địa chỉ đầy đủ của lệnh là CS:IP.  

-  Thanh ghi con trỏ cơ sở BP (Base Pointer):  trỏ vào một mục dữ liệu nằm trong đoạn ngăn xếp SS. Địa chỉ đầy đủ của mục dữ liệu là CS:IP.  

-  Thanh ghi con trỏ ngăn xếp SP (Stack Pointer):  trỏ vào đỉnh hiện thời ngăn xếp nằm trong đoạn ngăn xếp SS. Địa chỉ đầy đủ của đỉnh ngăn xếp là SS:SP. 

-  Thanh ghi chỉ số nguồn SI (Source Index):  trỏ vào một mục dữ liệu trong đoạn DS. Địa chỉ đầy đủ của mục dữ liệu là DS:SI.  

-  Thanh ghi chỉ số đích DI (Destination Index):  trỏ vào một mục dữ liệu trong đoạn DS. Địa chỉ đầy đủ của mục dữ liệu là DS:DI.

Câu 3: Viết chương trình có các chức năng sau:

Nhấn phím Ctrl+F8 thoát khỏi chương trình.

Nhấn phím Ctrl+F9 bật đèn Num Lock lên 1 giây rồi tắt.

Nhấn phím Ctrl+F10 bật đèn Caps Lock lên 1 giây rồi tắt.

Nhấn phím Ctrl+F11 bật đèn Scroll Lock lên 1 giây rồi tắt.

.Model Small

.Stack

.Data

            menu db 13,10,'Ctrl_F8 : Thoat chuong trinh'

            db 13,10,'Ctrl_F9 : Bat den NumLock len 1 giay roi tat'

            db 13,10,'Ctrl_F10 : Bat den CapsLock len 1 giay roi tat'

            db 13,10,'Ctrl_F11 : Bat den ScrollLock len 1 giay roi tat$'

            s1 db 13,10,'Bat den$'

            s2 db 13,10,'Tat den$'

.Code

    Print Macro s

            mov ah,09

            lea dx,s

            int 21h

    EndM

Begin:

            mov ax,@data

            mov ds,ax

            Print menu

        re:

            mov ah,01

            int 16h

            jz re

        lap:

            mov ah,02

            int 16h

            test al,00000100b

            jnz CtrlPress

            jmp lap

        CtrlPress:

            in al,60h

            cmp al,42h

            je F8

            cmp al,43h

            je F9

            cmp al,44h

            je F10

            cmp al,57h

            je F11

            jmp lap

        F9:

            mov al,0edh

            Call SendKb

            mov al,00000010b

            Call SendKb

            Print s1

            Call Wait1s

            mov al,0edh

            Call SendKb

            mov al,00000000b

            Call SendKb

            Print s2

            jmp lap

    F10:

            mov al,0edh

            Call SendKb

            mov al,00000100b

            Call SendKb

            Print s1

            Call Wait1s

            mov al,0edh

            Call SendKb

            mov al,00000000b

            Call SendKb

            Print s2

            jmp lap

    F8:

            jmp exit

    F11:

            mov al,0edh

            Call SendKb

            mov al,00000001b

            Call SendKb

            Print s1

            Call Wait1s

            mov al,0edh

            Call SendKb

            mov al,00000000b

            Call SendKb

            Print s2

            jmp lap

     exit:

            mov ax,4c00h

            int 21h

    SendKb Proc

            push ax

            push cx

            mov ah,al

            mov al,0adh

            out 64h,al

            mov cx,65535

        Waitnotfull:

            in al,64h

            test al,00000010b

            loopnz Waitnotfull

            mov al,ah

            out 60h,al

            mov cx,65535

        w: 

            loop w

            mov al,0aeh

            out 64h,al

            pop cx

            pop ax

    SendKb EndP

    Wait1s Proc

            push ax

            push cx

            push dx

            mov ah,86h

            mov cx,15

            mov dx,16960

            int 15h

            pop dx

            pop cx

            pop ax    

    Wait1s EndP

End Begin 

Câu 5: Viết chương trình nhập 3 ký tự từ bàn phím. Xuất 3 ký tự này ra màn hình theo chiều đứng từ trên xuống  bên  lề  trái.

.model small

.stack 100h

.data

thongbao1 db 'nhap chuoi, enter de ket thuc: $',10,13

thongbao2 db 13,10,'hien thi chuoi: $'

xuongdong db 13,10,'$'

str db 100 dup(?)

main proc

mov ax,@Data

mov ds,ax

mov es,ax

xor cx,cx

mov ah,9

lea dx,thongbao1

int 21h

cld

lea di,str

mov ah,1

nhaptiep:

int 21h

cmp al,13

je thoinhap

inc cx

jmp nhaptiep

thoinhap:

mov ah,9

lea dx,thongbao2

int 21h

lea si,str

lap:

mov ah,9

lea dx,xuongdong

int 21h

mov ah,2

lodsb

mov dl,al

int 21h

loop lap

mov ah,4ch

int 21h

main endp

end main

Câu 4 Viết chương trình in ra Rom-Bios màn hình dòng chữ 'Khoa CNTT Hoc vien BCVT’ vị trí bắt đầu tại dòng 10 cột 20 và màu tùy ý (In toàn chuỗi ở chế độ 80x25x16 màu).

.Model Small

.Stack

.Data

           s db 'Khoa CNTT Hoc vien BCVT

.Code

Begin:

           Mov ax,@Data

           Mov ds,ax

           ;Dua ve che do 80x25x16 mau

           Mov ah,0

           Mov al,3

           Int 10h

            Mov ax,0B800h         ;Nap dia chi segment cua Video-Ram o che do van ban     

           Mov es,ax 

            Lea si,s

            Mov di,(80*20+10)*2         ;hang 20 cot 10

            Mov cx,30

     Lap:

            Mov al,[si]                  ;al chua ki tu can xuat

            Mov ah,2Eh                ;nen xanh chu vang

            Mov Es:[di],ax

            add di,2

            inc si

            Loop Lap

           Mov ah,4ch                 ;Thoat khoi chuong trinh tro ve Dos

           Int 21h

End Begin

6. Viết chương trình nhập 2 chuỗi S1 và S2 từ bàn phím, mỗi chuỗi gồm 5 ký tự. Viết chương trình hoán chuyển nội dung 2 chuỗi S1 và S2. Hiển thị kết quả S1 và S2 ra màn hình.

.Model Small

.Stack

.Data

        S1 db 13,10,'Nhap chuoi thu 1:$'

        S2 db 13,10,'Nhap chuoi thu 2:$'

        Buf1 db 6,?,7 dup('$')  

        Buf2 db 6,?,7 dup('$')  

.Code

        Begin:

                Mov Ax,@Data

                Mov Ds,Ax

                ;Xuat Chuoi S1 Ra Man Hinh

                Mov Dx,Offset S1

                Mov Ah,09

                Int 21h

                ;Nhap chuoi Buf1

                Mov dx,offset Buf1

                Mov ah,0ah

                Int 21h

                ;Xuat Chuoi S2 Ra Man Hinh

                Mov Dx,Offset S2

                Mov Ah,09

                Int 21h

                ;Nhap chuoi Buf2

                Mov dx,offset Buf2

                Mov ah,0ah

                Int 21h

                Lea si,Buf1+2

                Lea di,Buf2+2

                Mov al,[si]

                Mov dl,[di]

                Mov [si],dl

                Mov [di],al

                Mov al,[si+1]

                Mov dl,[di+1]

                Mov [si+1],dl

                Mov [di+1],al

                Mov al,[si+2]

                Mov dl,[di+2]

                Mov [si+2],dl

                Mov [di+2],al

                Mov al,[si+3]

                Mov dl,[di+3]

                Mov [si+3],dl

                Mov [di+3],al

                Mov al,[si+4]

                Mov dl,[di+4]

                Mov [si+4],dl

                Mov [di+4],al

                ;Xuat Chuoi S1 Ra Man Hinh

                Mov Dx,Offset S1

                Mov Ah,09

                Int 21h

                ;Nhap chuoi Buf1

                Mov dx,offset Buf1 +2

                Mov ah,09

                Int 21h

                ;Xuat Chuoi S2 Ra Man Hinh

                Mov Dx,Offset S2

                Mov Ah,09

                Int 21h

                ;Nhap chuoi Buf2

                Mov dx,offset Buf2 +2

                Mov ah,09

                Int 21h

                ;Thoat khoi chuong trinh va tro va Dos

                Mov Ax,4c00h

                Int 21h

        End Begin

Câu 7: Viết chương trình bật đèn Scroll Lock liên tục Nhấn Ctrl F12 rồi tắt.

.Model Small

.Stack

.Data

            s1 db 13,10,'Den nhap nhay$'

            s2 db 13,10,'Thoat$'y

.Code

    Print macro s

            mov ah,09

            lea dx,s

            int 21h

   EndM

Begin:

            mov ax,@data

            mov ds,ax

            Print s1

    lap:

            mov al,0edh

            Call SendKb

            mov al,00000001b

            Call SendKb

            Call Wait1s

            mov al,0edh

            Call SendKb

            mov al,00000000b

            Call SendKb

            Call Wait1s

            mov ah,02

            int 16h

            test al,00000100b

            jz lap

            in al,60h

            cmp al,58h

            jne lap

    exit:

            Print s2

            mov ax,4c00h

            int 21h

    SendKb Proc

            push ax

            push cx

            mov ah,al

            mov al,0adh

            out 64h,al

            mov cx,65535

        Waitnotfull:

            in al,64h

            test al,00000010b

            loopnz Waitnotfull

            mov al,ah

            out 60h,al

            mov cx,65535

        w: 

            loop w

            mov al,0aeh

            out 64h,al

            pop cx

            pop ax

    SendKb EndP

    Wait1s Proc

            push ax

            push cx

            push dx

            mov ah,86h

            mov cx,0

            mov dx,16960

            int 15h

            pop dx

            pop cx

            pop ax

    Wait1s endp

End Begin 

Câu 8: Viết chương trình in ra Video-Ram màn hình dòng chữ 'Khoa CNTT Hoc vien BCVT’ vị trí bắt đầu tại dòng 10 cột 20 và màu tùy ý (In từng ký tự trong chuỗi ở chế độ 80x25x16 màu).

.Model Small

.Stack

.Data

            s db  'Khoa CNTT Hoc vien BCVT’

.Code

Begin:

            ; Khởi tạo đoạn chương trình

            Mov ax,@Data

            Mov ds,ax

            Mov es,ax    ; Es chứa địa chỉ đoạn Data

            ;Đưa về chế độ 80x25x16 màu

            Mov ah,0

            Mov al,3

            Int 10h

            ;Xuất toàn bộ chuỗi ra Rom- Bios màn hình

            Lea bp,s            ;Lấy địa chỉ offset của s lưu vào trong bp

            Mov ah,13h        

            Mov al,1            ; Lấy phục vụ con 1

            Mov cx,30         ; Xuất 30 ký tự

            Mov bh,0           ; Trang màn hình 0

            Mov bl,41h        ;Nền đỏ chữ xanh

            Mov dh,10         ; Dòng 10

            Mov dl,20          ; Cột 20

            Int 10h

            ; Thoát khỏi chương trình trở về Dos

            Mov ah,4ch

            Int 21h

End Begin

9.Trình bày vai trò của các thanh ghi đoạn: CS, DS, SS, và ES

Nhóm thanh ghi đoạn : (Segiment regiset)

Gồm 4 thanh ghi : CS, DS, ES, SS

a. Thanh ghi CS : (Code Segment)

Dùng để chứa địa chỉ Segment của đoạn mã của đoạn mã chương trình.

b. Thanh ghi DS : (Data Segment)

 Chứa địa chỉ Segment của đoạn dữ liệu

c. Thanh ghi ES :

 (Extra Segment) Chứa địa chỉ Segment của đoạn dữ liệu bổ sung. Như vậy nếu ta có hai đoạn dữ liệu thì một sẽ do thanh ghi DS và hai sẽ do thanh ghi ES quản lý

d. Thanh ghi SS (Stack Segment)

Dùng lưu địa chỉ Segment của đoạn Stack

Bốn thanh ghi này có thể truy xuất trên bốn đoạn khác nhau.

Như vậy một chương trình làm việc cùng một lúc tối đa là bốn đoạn.

Các thanh ghi đoạn 16 bit này chỉ ra địa chỉ đầu của bốn đoạn trong bộ nhớ, dung lượng lớn nhất của mỗi đoạn nhớ này là 64 Kbyte và tại một thời điểm nhất định bộ vi xử lý chỉ làm việc được với bốn đoạn nhớ 64 Kbyte này. Việc thay đổi giá trị của các thanh ghi đoạn làm cho các đoạn có thể dịch chuyển linh hoạt trong phạm vi không gian 1 Mbyte, vì vậy các đoạn này có thể nằm cách nhau khi thông tin cần lưu trong chúng đòi hỏi dung lượng đủ 64 Kbyte hoặc cũng có thể nằm trùm nhau do có những đoạn không cần dùng hết đoạn dài 64 Kbyte và vì vậy những đoạn khác có thể bắt đầu nối tiếp ngay sau đó. Điều này cũng cho phép ta truy nhập vào bất kỳ đoạn nhớ ( 64 Kbyte ) nào nằm trong toàn bộ không gian 1 Kbyte.Nội dung các thanh ghi đoạn sẽ xác định địa chỉ của ô nhớ nằm ở đầu đoạn. Địa chỉ này còn gọi là địa chỉ cơ sở. Địa chỉ của các ô nhớ khác nằm trong đoạn tính được bằng cách cộng thêm vào địa chỉ cơ sở một giá trị gọi là địa chỉ lệch hay độ lệch ( Offset ), gọi như thế vì nó ứng với khoảng lệch của toạ độ một ô nhớ cụ thể nào đó so với ô đầu đoạn.

Độ lệch này được xác định bởi các thanh ghi 16 bit khác đóng vai trò thanh ghi lệch( Offset register ). để xác định địa chỉ vật lý 20 bit của một ô nhớ nào đó trong một đoạn bất kỳ. CPU 8088 phải dùng đến 2 thanh ghi 16 bit ( một thanh ghi để chứa địa chỉ cơ sở, còn thanh kia chứa độ lệch ) và từ nội dung của cặp thanh ghi đótạo ra địa chỉ vật lý theo công thức sau:

Địachỉvậtlý=Thanhghiđoanx16+Thanhghilệch

Việc dùng 2 thanh ghi để ghi nhớ thông tin về địa chỉ thực chất để tạo ra một loại địa chỉ gọi là địa chỉ logic và được ký hiệu như sau:

Thanhghiđoạn: Thanhghilệch hay segment: offset.

Câu 10 Viết chương trình nhập một chuỗi ký tự từ bàn phím, sau đó xuất đảo chuỗi ra màn hình tại vị trí dòng 5 cột 20, nền xanh chữ vàng (Xuất ra màn hình ở chế độ Text 80x25x16 màu).

.Model Small

.Stack

.Data

           s1 db 'Nhap vao mot chuoi khong qua 100 ki tu:$'

            s2 db 13,10,'Chuoi dao vua nhap co nen xanh chu vang tai dong 20 cot 5.$'

            buf db 100,?, 101 dup('$')

.Code

Inchuoi Macro t

                        Lea dx,t

                        Mov ah,09h

                        Int 21h

            EndM

Begin:

           Mov ax,@Data

           Mov ds,ax

           ;Dua ve che do 80x25x16 mau

           Mov ah,0

           Mov al,3

           Int 10h

            Inchuoi s1

            Lea dx,buf                  ;Nhap vao mot chuoi

            Mov ah,0Ah

            Int 21h

            Inchuoi s2

            Mov ax,0B800h         ;Nap dia chi segment cua Video-Ram o che do van ban     

           Mov es,ax 

            Lea si,buf+1               

            Mov di,(80*20+5)*2            ;hang 20 cot 5

            Mov ch,0

            Mov cl,[si]                  ;Lay chieu dai chuoi de lap

            Inc si

     Lap:

            Mov al,[si]                  ;al chua ki tu can xuat

            Mov ah,1Eh                ;nen xanh duong chu vang

            Mov Es:[di],ax

            add di,2

            inc si

            Loop Lap

           Mov ah,4ch                 ;Thoat khoi chuong trinh tro ve Dos

           Int 21h

End Begin

Câu 11 Cho 1 chuỗi S dài 10 byte. Viết chương trình nhập 2 chuỗi S1 và S2 mỗi chuỗi gồm 5 ký tự.

.Model Small

.Stack

.Data

        S db 13,10,"Ket qua:$"

        S1 db 13,10,'Nhap chuoi thu 1:$'

        S2 db 13,10,'Nhap chuoi thu 2:$'

        Buf Db 11 dup('$')

        Buf1 db 6,?,7 dup('$')  

        Buf2 db 6,?,7 dup('$')  

.Code

        Begin:

                Mov Ax,@Data

                Mov Ds,Ax

                ;Xuat Chuoi S1 Ra Man Hinh

                Mov Dx,Offset S1

                Mov Ah,09

                Int 21h

                ;Nhap chuoi Buf1

                Mov dx,offset Buf1

                Mov ah,0ah

                Int 21h

                ;Xuat Chuoi S2 Ra Man Hinh

                Mov Dx,Offset S2

                Mov Ah,09

                Int 21h

                ;Nhap chuoi Buf2

                Mov dx,offset Buf2

                Mov ah,0ah

                Int 21h

                Lea si,Buf1+2

                Lea di,Buf

                Mov al,[si]

                Mov [di],al

                Mov al,[si+1]

                Mov [di+2],al

                Mov al,[si+2]

                Mov [di+4],al

                Mov al,[si+3]

                Mov [di+6],al

                Mov al,[si+4]

                Mov [di+8],al

                Lea si,Buf2+2

                Mov al,[si]

                Mov [di+1],al

                Mov al,[si+1]

                Mov [di+3],al

                Mov al,[si+2]

                Mov [di+5],al

                Mov al,[si+3]

                Mov [di+7],al

                Mov al,[si+4]

                Mov [di+9],al

                ;Xuat Chuoi S Ra Man Hinh

                Mov Dx,Offset S

                Mov Ah,09

                Int 21h

                ;Xuat Chuoi Buf Ra Man Hinh

                Mov Dx,Offset Buf

                Mov Ah,09

                Int 21h                   

                ;Thoat khoi chuong trinh va tro va Dos

                Mov Ax,4c00h

                Int 21h

         End Begin

Câu 12 Viết chương trình bật tất cả 3 đèn Scroll Lock, Num Lock, Caps Lock  lên 1 giây rồi tắt.

     Viết chương trình có các chức năng sau:

Nhấn phím Ctrl+Shift+F1 bật đèn Num Lock lên 1s rồi tắt.

Nhấn phím Ctrl+Shift+F2 bật đèn Scroll Lock lên 1s rồi tắt.

Nhấn phím Ctrl+Shift+F3 bật đèn Num Lock lên 1s rồi tắt.

Nhấn phím Ctrl+Shift+F4 thoát khỏi chương trình.

.Model Small

.Stack

.Data

            s1 db 13,10,'Bat den$'

            s2 db 13,10,'Tat den$'

.Code

Begin:

            mov ax,@data

            mov ds,ax

            mov al,0edh

            Call SendKb

            mov al,00000111b

            Call SendKb

            mov ah,09

            lea dx,s1

            int 21h

            Call Wait1s

            mov al,0edh

            Call SendKb

            mov al,00000000b

            Call SendKb

            mov ah,09

            lea dx,s2

            int 21h

            mov ax,4c00h

            int 21h

    SendKb Proc

            push ax

            push cx

            mov ah,al

            mov al,0adh

            out 64h,al

            mov cx,65535

        Waitnotfull:

            in al,64h

            test al,00000010b

            loopnz Waitnotfull

            mov al,ah

            out 60h,al

            mov cx,65535

        w:     

            loop w

            mov al,0aeh

            out 64h,al

            pop cx

            pop ax

    SendKb EndP

    Wait1s Proc

            push ax

            push cx

            push dx

            mov ah,86h

            mov cx,15

            mov dx,16960

            int 15h

            pop dx

            pop cx

            pop ax

    Wait1s endp

End Begin 

Câu 13 Viết chương trình cho dòng chữ 'Khoa CNTT Hoc vien BCVT’ chạy ngang qua màn hình từ trái qua phải (từ phải qua trái) và kết thúc khi có một phím bất kỳ được ấn.

.Model Small

.Stack

.Data

           s db 'Khoa CNTT Hoc vien BCVT’

.Code

Begin:

           Mov ax,@Data

           Mov ds,ax

           ;Dua ve che do 80x25x16 mau

           Mov ah,0

           Mov al,3

           Int 10h

Mov ax,0B800h         ;Nap dia chi segment cua Video-Ram o che do van ban                 

Mov es,ax 

            Mov di,(80*10)*2    ;hang 10 cot 0

            Mov bx,di                   ;bx giu vi tri cua di

     Chay:

            Lea si,s                       ; lay dia chi offset cua s

            Mov cx,25                  ;lap lai cho den den chieu dai cua chuoi (25 lan)

            Mov di,bx

            push bx

            Mov al,32                   ;al chua ki tu khoang trang

            Mov ah,0                    ;nen den chu den

            cmp di,(80*10)*2     ;So sanh de xoa bo phan tu dau hoac cuoi

            je Xoa

            Mov Es:[di-2],ax        ;Xoa ki tu truoc chuoi

            jmp Lap

     Xoa:          

            Mov Es:[(80*10+79)*2],ax             ;Xoa ki tu cuoi (tai cot 79)

     Lap:           

            Mov al,[si]                  ;al chua ki tu can xuat

            Mov ah,2Eh                ;nen xanh chu vang

            Mov Es:[di],ax

            add di,2           

            cmp di,(80*10+80)*2          ;so sanh de xuat ki tu ngay dau dong

            jb KDaudong1

            Mov di,(80*10)*2                ;Xuat lai ki tu ngay dau dong

      KDaudong1:       

            inc si

            Loop Lap

            pop bx

            add bx,2                      ;Xuat lai chuoi o vi tri ke tiep

            cmp bx,(80*10+80)*2         ;So sanh de xuat lai ngay dau dong

            jb KDaudong2

            Mov bx,(80*10)*2

      KDaudong2:

            call Delay                   ;Cho chuoi chay cham lai

            Mov ah,1                    ; Doc cho den khi vung dem ban phim khac rong

            Int 16h

            jz Chay

           Mov ah,4ch                 ;Thoat khoi chuong trinh tro ve Dos

           Int 21h

  Delay Proc

            push cx

            mov cx,0ffffh

            for1:

            push cx

                        mov cx,05ffh

                  for2:

                        loop for2        

            pop cx

            loop for1

            pop cx

            Ret

  Delay EndP

End Begin

14. Trình bày các thanh ghi đa năng: AX, BX,CX và DX

- AX (Accumulator) thanh chứa:  các kết quả của các phép toán thường được lưu vào 

thanh ghi này. Ngoài ra, AX còn là toán hạng ẩn cho 1 số phép toán như nhân (AX là 

thừa số) hoặc chia (AX là số bị chia).

-  BX (Base) thanh ghi cơ sở: thường được dùng để chứa các địa chỉ cơ sở.  

-  CX (Count) bộ đếm: CX thường dung để chứa số lần lặp trong trường hợp dùng lệnh LOOP. Ngoài ra, CL còn chứa số lần dịch chuyển, quay trái, quay phải của các toán hạng. 

- DX (Data) thanh ghi dữ liệu: DX thường được chứa địa chỉ offset của xâu kí tự khi có các thao tác nhập vào xâu hoặc in xâu.  DX (cùng với AX) còn tham gia chứa kết quả của phép nhân các số 16 bit hoặc làm số bị chia cho phép chia các số 16 bit. Ngoài ra, DX còn dùng để chứa địa chỉ của các cổng vào/ra trong trường hợp thực hiện các lệnh IN hoặc OUT.

15.Viết chương trình nhập 1 chuỗi tối đa 10 ký tự từ bàn phím. Hiển thị ký tự đầu và ký tự cuối của chuỗi ra màn hình

.Model Small

.Stack

.Data

        S db 'Nhap vao mot chuoi khong qua 10 ky tu:$'

        S1 db 13,10,'Ky tu dau:$'

        S2 db 13,10,'Ky tu cuoi:$'

        Buf Db 11,?,12 dup('$')

.Code

        Begin:

                Mov Ax,@Data

                Mov Ds,Ax

                ;Xuat Chuoi S Ra Man Hinh

                Mov Dx,Offset S

                Mov Ah,09

                Int 21h

                ;Nhap mot chuoi ky tu

                Mov dx,offset Buf

                Mov ah,0ah

                Int 21h

                Lea si,Buf+1

                xor cx,cx

                Mov cl,[si]    ; Lay chieu ddai thuc su cua chuoi

                ;Xuat Chuoi S1 Ra Man Hinh

                Mov Dx,Offset S1

                Mov Ah,09

                Int 21h

                ;Xuat ky tu dau

                Mov ah,2

                Mov dl,[si+1]

                Int 21h

                ;Xuat Chuoi S2 Ra Man Hinh

                Mov Dx,Offset S2

                Mov Ah,09

                Int 21h

                ;Xuat ky tu cuoi

                Add si,cx

                Mov ah,2

                Mov dl,[si]

                Int 21h

                ;Thoat khoi chuong trinh va tro va Dos

                Mov Ax,4c00h

                Int 21h

         End Begin

Câu 16 Viết chương trình nhập vào từ bàn phím một số nguyên dương một chữ số.  Xuống dòng, xuất ra màn hình một tam giác được tạo thành từ các ký tự *, có chiều cao là số vừa nhập vào. 

.MODEL SMALL 

.stack 100h  

.data  

   x   db          ? 

   CRLF DB 13,10,'$' 

   Mes1 Db 'Nhap vao so nguyen duong: $' 

   Mes2 Db 'Tam giac: $' 

   Mes3 DB '*$' 

.code  

START: 

   mov AX,@Data 

   mov DS,AX 

;Nhap chieu cao 

    mov ah,9h 

    lea dx,CRLF 

    int 21H 

    lea DX,Mes1 

    mov           ah, 9h 

    int    21h 

        mov      ah, 1h 

        int         21h 

        and al,0fh 

    xor cx,cx 

    mov cl,al 

    mov x,cl    

;Xuat hinh tam giac 

    mov ah,9h 

    lea dx,CRLF 

    int 21H 

    lea DX,Mes2 

    mov           ah, 9h 

        int         21h  

TAMGIAC: 

    mov ah,9h 

    lea dx,CRLF 

    int 21H 

    lea DX,Mes3 

    mov           ah, 2h 

        int         21h  

loop tamgiac 

;Thoat ve DOS 

mov ah,4CH 

int 21H 

END START 

Bạn đang đọc truyện trên: Truyen2U.Pro