Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 28 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
28
Dung lượng
206,84 KB
Nội dung
Bài 1: Viết chương trình hợp ngữ dạng .EXE thực hiện nhập vào từ bàn phím một ký tự, nếu không phải là ký tự số thì nhập lại. Sau đó nhiển thị ký tự vừa nhập trên dòng tiếp theo. .MODEL SMALL .STACK 100h .DATA MoiNhap DB 'Nhap mot ky tu so n = ' , '$' KoLaChuSo DB 'Ko phai , hay nhap lai ' , 13,10, '$' LaChuSo DB 'Dung roi, so vua nhap la ' , 13,10, '$' .CODE MOV AX, @Data ; Dua cac du lieu MOV DS, AX ; vao phan doan du lieu NhapKyTu: MOV DX, OFFSET MoiNhap ; Xuat mot chuoi tro boi DX MOV AH, 9 ; bang chuc nang thu 9 INT 21h ; cua ngat 21h DOS MOV AH, 1 ; Nhap mot ky tu vao AL INT 21h ; bang chuc nang 1 cua ngat 21h DOS CMP AL, '0' ; Kiem tra co phai chu so hay ko JB KyTuKhac CMP AL, '9' JA KyTuKhac ChuSo: MOV DX, OFFSET LaChuSo MOV AH, 9 INT 21h JMP XuatKyTu KyTuKhac: MOV DX, OFFSET KoLaChuSo MOV AH, 9 INT 21h JMP NhapKyTu XuatKyTu: MOV AH, 2 ; Xuat mot ky tu bang INT 21h ; chuc nang 2 cua ngat 21h DOS MOV AH, 4Ch ; Ket thuc chuong trinh va tra INT 21h ; ve DOS bang chuc nang 4Ch END BÀITẬP ASSEMBLER 1. Xác định địa chỉ offset của các ô nhớ có địa chỉ vật lý sau, biết rằng địa chỉ segment là 1ACDh: a. 1FFFFh b. 20000h c. 2ABCDh d. 1ECDFh 2. Xác định địa chỉ vật lý của các địa chỉ sau: a. 1234h:1234h b. 1111h:ABCDh c. AAAAh:BBBBh 3. Xác định nội dung của các thanh ghi AX, BX và các ô nhớ 1000h, 1001h, 1002h, 1003h sau khi thực thi các đoạn chương trình sau: a. MOV AX,1000h MOV BL,7 MOV BH,0F0h AND BH,AH MOV WORD PTR DS:[1000h],0F0h MOV BYTE PTR DS:[1002h],0Fh MOV AX,DS:[1001h] MOV AL,DS:[1002h] b. MOV AX,1234h MOV BX,0AAAAh MOV CH,AL MOV CL,AH MOV DS:[1000h],AX MOV DS:[1002h],BX c. MOV AX,12h MOV DS:[1001h],AX MOV BX,AX ADD BH,10h MOV DS:[1002h],BH 4. Viết chương trình xuất 10 chuỗi “Hello” ra màn hình tại dòng thứ 10, cột 10. 5. Viết chương trình nhập chuỗi từ bàn phím cho đến khi nhập ký tự ‘T’ thì xuất chuỗi nhập ra màn hình và kết thúc chương trình. 6. Viết chương trình thực hiện chuyển đổi một chuỗi ký tự trong bộ nhớ từ chữ thường thành chữ hoa và in chuỗi đã chuyển đổi lên màn hình. 7. Viết chương trình thực hiện in các ký tự chứa tại ô nhớ 1000h – 3000h theo thứ tự ngược lại. 8. Viết chương trình thực hiện chuyển đổi số nhị phân chứa trong thanh ghi DX thành số BCD chứa trong thanh ghi AX. Nếu kết quả chuyển đổi lớn hơn 16 bit thì giá trị trong thanh ghi AX là FFFFh. 9. Viết chương trình so sánh 2 arrray 8 bit A và B, mỗi array có 100 phần tử chứa từ địa chỉ 1000h (array A) và 2000h (array B). Nếu 2 array này giống nhau thì lưu vào ô nhớ 3000h giá trị FFFFh. Ngược lại thì lưu vào ô nhớ 3000h địa chỉ đầu tiên của phần tử trong array A khác với phần tử trong array B. Bài 1: In ra màn hình 255 ký tự mở rộng có trong bảng mã ASCII Giải code segment assume cs:code, ds:code org 100h begin: mov cx, 255 mov al,0 lap: mov ah,2 mov dl,al inc dl int 21h loop lap mov ax, 4c00h int 21h code ends end begin Bài 2: Nhập ký tự từ bàn phím nếu gặp phím ESC có mã là "27" thì thoát khỏi chương trình. Giải code segment assume cs:code, ds:code org 100h begin: mov ah,1 int 21h cmp al,27 ;so sanh ky tu nhap vao voi ky tu 27 la ma ESC je thoat ;neu la ma ESC thi thoat khoi chuong trinh jmp begin ;neu khac ma ESC thi quay lai tu dau thoat: mov ax, 4c00h int 21h code ends end begin Bài 3: Viết chương trình nhập vào từ bàn phím nếu ký tự không nằm trong khoảng từ "A" lớn đến "Z" lớn thì thoát khỏi chương trình. Giải code segment assume cs:code, ds:code org 100h begin: mov ah,1 int 21h mov bl,al cmp bl,'A';so sanh A lon den Z lon jb thoat ;neu khac khoang A lon den Z lon cmp bl,'Z';thi thoat khoi chuong trinh ja thoat jmp begin thoat: mov ax, 4c00h int 21h code ends end begin Bài 4: Viết chương trình in ra hình trái tim mầu đỏ nền đen ở tâm màn hình. Giải: code segment assume cs:code, ds:code org 100h begin: mov ax, 0b800h mov ds, ax mov al,3 mov ah,00000100b d=12 c=40 mov si,(d*80+c)*2 mov [si],ax mov ax, 4c00h int 21h code ends end begin Bài 5: Viết chương trình in ra màn hình trái tim mầu đỏ nền đen và dùng các phím (t,r,,u,d) để điều khiển trái tim dịch sang(trái, phải, trên, dưới) Giải: code segment assume cs:code, ds:code org 100h begin: mov ax, 0b800h mov ds, ax mov al,3 mov ah,00000100b d=12 c=40 mov si,(d*80+c)*2 mov [si],ax lap: mov ah,7 ;nhap ky tu tu ban phim khong hien len man hinh int 21h cmp al,'l';so sanh neu dung thi thuc hien lenh trai je trai cmp al,'r' je phai cmp al,'u' je tren cmp al,'d' je duoi jmp thoat trai: mov al,3 mov ah,4 mov [si],0720h ;xoa ky tu vua dich chuyen sub si,2 mov [si],ax jmp lap phai: mov al,3 mov ah,4 mov [si],0720h ;xoa ky tu vua dich chuyen add si,2 mov [si],ax jmp lap tren: mov al,3 mov ah,4 mov [si],0720h ;xoa ky tu vua dich chuyen sub si,160 mov [si],ax jmp lap duoi: mov al,3 mov ah,4 mov [si],0720h ;xoa ky tu vua dich chuyen add si,160 mov [si],ax jmp lap thoat: mov ax, 4c00h int 21h code ends end begin Bài 6: Viết chương trình hiển thị dòng chữ "KHOA TIN HOC" có mầu đỏ nền đen rồi xuống dòng và đảo ngược dòng chữ đó. Giải code segment assume cs:code,ds:code org 100h begin: mov ax,0b800h mov ds,ax d=5 c=10 mov al,'K' mov ah,65 mov di,(d*80+c)*2 mov [di],ax mov al,'H' mov ah,58 mov[di+2],ax mov al,'O' mov ah,24 mov[di+4],ax mov al,'A' mov ah,30 mov[di+6],ax mov al,' ' mov ah,00 mov[di+8],ax mov al,'T' mov ah,65 mov[di+10],ax mov al,'I' mov ah,40 mov[di+12],ax mov al,'N' mov ah,12 mov[di+14],ax mov ah,1 int 21h d=5 c=10 push[di] push[di+2] push[di+4] push[di+6] push[di+8] push[di+10] push[di+12] push[di+14] d=6 c=10 mov si,(d*80+c)*2 pop[si] pop[si+2] pop[si+4] pop[si+6] pop[si+8] pop[si+10] pop[si+12] pop[si+14] mov ax,4c00h int 21h code ends end begin viết chương trình nhập vào một chuỗi > in ra chuỗi vừa nhập dưới dạng 1 ký tự trên 1 dòng. ;chuong trinh nhap vao mot chuoi, hien thi theo hang doc .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 stosb 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 Interupt:(ngắt): int 10h :Ngắt làm việc của bios về màn hình int 11h : Bios về cấu hình int 13h :Bios về ổ đĩa int 14h : Bios về giao diện cổng nối tiếp int 16h : Bios liên quan đến bàn phím int 17h :Máy in int 19h :Khởi động hệ thống int 20h :Ngắt của Dos kết thúc chương trình trở về hệ điều hành int 21h :Ngắt cảu Dos chứa các hàm của Dos Một số hàm sử dụng ngắt int 21h. ;Nhập một ký tự từ bàn phím chứa trong AL mov ah,1 int 21h ;In ký tự có trong DL mov ah,2 int 21h ;Nhập một ký tự từ bàn phím không hiển thị lên màn hình mov ah,7 int 21h ;In chuỗi ký tự khai báo trước mov ah,9 mov dx,offset db(chuỗi) int 21h ;Thoát về hệ điều hành mov ax,4c00h int 21h Bảng mầu: Màu : - Đòa chỉ màn hình màu : B800 : 0000 - Mỗi ký tự trên màn hình được biểu diễn bằng 2 byte Byte thấp : chứa ký tự cần in ra Byte cao : chứa màu nền và màu ký tự đó Nó được đònh dạng như sau : 7 6 5 4 3 2 1 0 B/I H G B I R G B B / I : nằm ở bit thứ 7 H : nằm ở bit thứ 6 G : nằm ở bit thứ 5 B : nằm ở bit thứ 4 H, G ,B : màu nền I : nằm ở bit thứ 3 R : nằm ở bit thứ 2 G : nằm ở bit thứ 1 B : nằm ở bit 0 I ,R ,G ,B : màu chử I : intensity ( cường độ , độ sáng ) 0 :tối và 1 : sáng B : blinking ( chớp nháy ) 0 : không nháy và 1 :nháy Bit 7( B / I ) : vừa làm nhiệm vụ cho nhấp nháy chữ hay tăng giảm độ sáng cho màu nền. I R G B MÀU I R G B MÀU 0 0 0 0 đen 1 0 0 0 đen nhạt 0 0 0 1 xanh dương 1 0 0 1 da trời 0 0 1 0 xanh lá cây 1 0 1 0 xanh nhạt 0 0 1 1 cyan 1 0 1 1 cyan sáng 0 1 0 0 đỏû 1 1 0 0 đỏ sáng 0 1 0 1 tím 1 1 0 1 tím cà 0 1 1 0 nâu 1 1 1 0 vàng 0 1 1 1 xám đậm 1 1 1 1 trắng Cách nhớù màu : 0 1 2 3 4 5 6 7 đen xanh dương xanh lá cây cyan đỏ tím nâu xá m - Muốn chử sáng : cộng thêm số 8 cho màu chử - Muốn nền sáng / chử nháy cộng thêm số 8 cho màu nền CÔNG THỨC : Màu nền * 16 + màu chữ Ví dụ : Chữ A có màu xanh dương trên nền đỏ A : 65 đổi sang hệ thập phân là : 1000000 Ta lấy 1000000 + 1 = 01000001 Trong đó 0100 là nền đỏ và 0001 là chử A màu xanh dương . Công thức tính đòa chỉ offset của ký tự cần xuất ra màn hình ( dòng * 80 + cột) * 2 Ví du ï : Viết chương trình in chử A tại dòng 5 cột 10 có [...]... dx, chao int 21h mov si, offset sohexa mov di, 0 dockitu: mov ah, 1 int 21h cmp al,13 jnz luukitu jnz dockitu jz xulychuoi luukitu: mov [si], al inc si inc di jmp dockitu xulychuoi: ;kiem tra chuoi co hop le mov si, offset sohexa ;goi ham taohexa, chuoi nam o SI, do dai chuoi nam trong CX mov cx, di call taohexa mov ah, 9 lea dx, CRLF int 21h lea dx, ketqua int 21h mov si, offset sohexa dodaichuoi: