Bài tập ASM tổng hợp

BÀI TẬ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.

doc28 trang | Chia sẻ: lvcdongnoi | Lượt xem: 4062 | Lượt tải: 1download
Bạn đang xem trước 20 trang tài liệu Bài tập ASM tổng hợp, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
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ÀI TẬ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:      Maøu :     - Ñòa chæ maøn hình maøu : B800 : 0000        - Moãi kyù töï treân maøn hình ñöôïc bieåu dieãn baèng 2 byte       Byte thaáp  :   chöùa kyù töï caàn in ra       Byte cao    :    chöùa maøu neàn vaø maøu kyù töï ñoù        Noù ñöôïc ñònh daïng nhö sau :       7   6  5  4 3 2 1  0 B/I H G B I R G B       B / I   : naèm ôû bit thöù 7       H     : naèm ôû bit    thöù  6       G     :  naèm ôû bit   thöù  5       B     :  naèm ôû bit  thöù   4       H, G ,B : maøu neàn       I     :   naèm ôû bit thöù 3       R    :   naèm ôû bit thöù 2       G    :    naèm ôû bit  thöù  1      B    :   naèm ôû bit  0      I ,R ,G ,B : maøu chöû      I : intensity (  cöôøng ñoä , ñoä saùng )   0 :toái  vaø 1 : saùng      B : blinking ( chôùp nhaùy  )   0 : khoâng nhaùy vaø 1 :nhaùy      Bit 7( B / I )  : vöøa laøm nhieäm vuï cho nhaáp nhaùy chöõ hay taêng   giaûm ñoä saùng cho maøu neàn. I R G B     MAØU I R G B      MAØU 0 0 0 0      ñen 1 0 0 0     ñen nhaït 0 0 0 1   xanh döông 1 0 0 1     da trôøi 0 0 1 0    xanh laù caây 1 0 1 0    xanh nhaït 0 0 1 1         cyan 1 0 1 1     cyan saùng 0 1 0 0    ñoûû 1 1 0 0     ñoû saùng 0 1 0 1      tím 1 1 0 1     tím caø 0 1 1 0     naâu 1 1 1 0     vaøng 0 1 1 1   xaùm ñaäm 1 1 1 1     traéng     Caùch nhôùù maøu :     0    1     2    3            4      5      6      7    ñen xanh döông xanh laù caây cyan    ñoû    tím naâu   xaùm     - Muoán  chöû saùng : coäng theâm soá 8 cho maøu chöû     - Muoán neàn saùng / chöû nhaùy coäng theâm soá 8 cho maøu neàn        COÂNG THÖÙC : Maøu neàn * 16 + maøu chöõ               Ví duï :                          Chöõ  A coù maøu xanh döông treân neàn ñoû                          A : 65 ñoåi sang heä thaäp phaân  laø : 1000000               Ta laáy   1000000  + 1 = 01000001                            Trong ñoù 0100 laø neàn  ñoû vaø 0001 laø  chöû  A maøu               xanh döông  .     Coâng thöùc tính ñòa chæ offset cuûa kyù töï caàn xuaát ra maøn hình (  doøng *  80   +  coät)   * 2               Ví duï :                           Vieát chöông trình  in chöû A taïi doøng 5 coät 10 coù                 maøu xanh döông neàn ñoû                         Code   segment                         Assume  CS : code , DS : code                                        Org  100h                         Begin                                      MOV   AX, 0B800h                                    MOV   DS, AX                                    MOV   AL, 'A'                                    MOV   AH, 65                                     doøng = 5                                     coät = 10                                   MOV  BX , ( doøng * 80 + coät  )   *  2                                   MOV  [ BX ], AX                       Code Ends                                 End Begin  ;Viet Chuong trinh nhap vao 1 chuoi ki tu thuong in ra chuoi ki tu hoa .MODEL SMALL .STACK 100H .DATA A DB "MOI NHAP : $" B DB 13,10,"XUAT : $" C DB 40,?,40 DUP(?) .CODE MAIN PROC MOV AX,@DATA MOV DS,AX MOV AH,9 LEA DX,A INT 21H MOV AH,0AH INT 21H LEA DX,B MOV AH,9 INT 21H MOV CL,C[1] MOV CH,0 MOV BX,2 HOA: MOV AL,C[BX] JL INRA CMP AL,'Z' JG INRA AND AL,0DFH INRA: MOV AH,2 MOV DL,AL INT 21H ADD BX,1 LOOP HOA MOV AH,4CH INT 21H MAIN ENDP END MAIN 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 đó hiển thị ký tự vừa nhập trên dòng tiếp theo. Bài 1: .model small .stack 100h .Data  Msg1 db 'Nhap vao mot ki tu la so:$' Msg2 db 'Ki tu vua nhap khong phai la so, moi ban nhap lai:$' Msg3 db 'So ban vua nhap la:$' .Code Main Proc Mov ax,@Data Mov ds,ax Mov ah,9 Lea dx,Msg1 int 21h Mov ah,1 Int 21h  jmp tiep  Nhaplai:  Mov ah,2 Mov dl,0DH int 21h Mov dl,0AH int 21h Mov ah,9 Lea dx,Msg2 int 21h Mov ah,1 Int 21h  tiep:  cmp al,'0' jl Nhaplai cmp al,'9' Jg Nhaplai Mov bl,al Mov ah,2 Mov dl,0DH int 21h Mov dl,0AH int 21h Mov ah,9 Lea dx,Msg3 Int 21h Mov ah,2 Mov dl,bl Int 21h Mov ah,4ch Int 21h Main Endp End Main 2.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 2 ký tự trong đó phải có 1 ký tự là số, 1 ký tự là chữ in thường. Bài 2: .model small .stack 100h .Data  s db 'Nhap vao mot ki tu la so:$' s1 db 'Ki tu vua nhap khong phai la so, moi ban nhap lai:$' s2 db 'So ban vua nhap la:$' s3 db 'Nhap vao mot chu in thuong:$' s4 db 'Nhap sai, xin nhap lai:$' s5 db 'Chu ban vua nhap:$' .Code Main Proc Mov ax,@Data Mov ds,ax Mov ah,9 Lea dx,s int 21h Mov ah,1 Int 21h jmp tiep Nhapso:  Mov ah,2 Mov dl,0DH int 21h Mov dl,0AH int 21h Mov ah,9 Lea dx,s1 int 21h Mov ah,1 Int 21h  tiep: cmp al,'0' jb Nhapso cmp al,'9' Ja Nhapso Mov bl,al Mov ah,2 Mov dl,0DH int 21h Mov dl,0AH int 21h Mov ah,9 Lea dx,s2 Int 21h Mov ah,2 Mov dl,bl Int 21h Mov ah,2 Mov dl,0DH int 21h Mov dl,0AH int 21h Xor bl,bl Mov ah,9 Lea dx,s3 int 21h Mov ah,1 Int 21h jmp tiep1  Nhapchu:  Mov ah,2 Mov dl,0DH int 21h Mov dl,0AH int 21h Mov ah,9 Lea dx,s4 int 21h Mov ah,1 Int 21h  tiep1: cmp al,'a' jb Nhapchu cmp al,'z' Ja Nhapchu Mov bl,al Mov ah,2 Mov dl,0DH int 21h Mov dl,0AH int 21h Mov ah,9 Lea dx,s5 Int 21h Mov ah,2 Mov dl,bl Int 21h Call VEDOS Main Endp VEDOS Proc Mov ah,4ch Int 21h VEDOS Endp End main viết chương trình nhập vào số hệ thập lục phân chuyển thành nhị phân in ra màn hình  .model small .stack 100 .data CRLF db 13,10,'$' chao db 'Nhap vao so hexa: $' ketqua db 'So nhi phan tuong ung la: $' loi db 'So ban nhap khong phai hexa $' sohexa db 100 dup(0) .code main proc mov ax, @data mov ds, ax mov ah, 9 lea 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: mov al, [si] mov cx,4 lap: push ax and al, 8h cmp al, 8h jne conlai mov dl, 31h jmp ketif conlai: mov dl, 30h ketif: mov ah, 2 int 21h pop ax shl al, 1 loop lap inc si dec di jnz dodaichuoi ;thoat khoi dos mov ah, 4ch int 21h main endp taohexa proc push ax push bx push cx push dx jmp lap gaploi: mov ah, 9 lea dx, loi int 21h mov ah, 4ch int 21h mov ah,[si] cmp ah, 30h jb gaploi cmp ah, 39h ja kiemtrahex mov al, 30h jmp luuhex kiemtrahex: cmp ah, 61h jb gaploi cmp ah, 66h ja gaploi mov al, 57h luuhex: sub ah, al mov [si], ah inc si loop lap pop dx pop cx pop bx pop ax ret taohexa endp end main .model small .stack .data msg db 'Nhap so n = $' n db ? kq db 13,10,'Ket qua la: $' coso dw 0ah  .code main proc mov ax,@data mov ds,ax mov ax,02h int 10h lea dx,msg ;in ra 'Nhap so n = ' mov ah,9 int 21h mov ah,1 ;nhap so int 21h  and al,0fh ;chuyen thanh so mov n,al ;luu vao n ;Tinh toan BX  xor bx,bx ;lam sach thanh ghi xor dx,dx xor ah,ah ;ah=0 de gan ax cho dx mov dx,ax ;lay dx lam bien trung gian  lap:  cmp dx,0ah ;so sanh DX voi 10 je thoat  inc dx ;tang dx len 1 add bx,dx ;cong don vao bx  jmp lap ;In ra man hinh  thoat:  mov ax,bx xor cx,cx dayvaostack: Xor dx,dx div coso push dx inc cx cmp ax,0 jne dayvaostack lea dx,kq mov ah,9 7. 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 1 số tự nhiên N (N <10), tính tổng các số nguyên từ N đến 10 và lưu kết quả vào thanh ghi BX. int 21h print: pop dx or dl,30h mov ah,2 int 21h loop print  mov ah,4ch int 21h main endp end 10. Viết chương trình hợp ngữ dạng .EXE thực hiện nhập vào một số tự nhiên N<8, tính N! và lưu kết;nhap vao so n<8 ;tinh giai thua n ;luu vao bx in ra man .model small .stack .data msg db 'Nhap vao mot so n<8 :$' n db ? msg2 db 13,10,'Ban vua nhap sai. Nhap lai$' xuongdong db 13,10,'$' msg3 db 13,10,'Ket qua la: $' coso dw 10 .code main proc mov ax,@data mov ds,ax mov ah,02h int 10h ;------------------------------------------------- ;Nhap so nho hon 8  lap:  lea dx,msg mov ah,9 int 21h mov ah,1 int 21h and al,0fh mov n,al cmp n,8 ja nhaplai mov dl,2 mov ax,1 jmp tinh nhaplai: lea dx,msg2  mov ah,9 int 21h lea dx,xuongdong int 21h  jmp lap  ;-------------------------------------------------  ;Tinh giai thua  tinh:  cmp dl,n je inramh mul dl inc dl jmp tinh ;in ra hinh inramh: xor cx,cx  dayvaostack: xor dx,dx div coso push dx inc cx cmp ax,0 jne dayvaostack lea dx,msg3 mov ah,9 int 21h  print: pop dx or dl,30h mov ah,2 int 21h loop print  mov ah,4ch int 21h main endp end quả vào BX. 3. Viết chương trình hợp ngữ dạng .EXE thực hiện nhập vào 2 số tự nhiên nhỏ hơn 10. Tìm số lớn nhất trong 2 số và in kết quả ra màn hình trên dòng tiếp theo. .model .stack .data msg db 'Nhap vao mot 2 so nho hon 10',13,10,'$'  msga db 'a= $' msgb db 13,10,'b= $' a db ? msgkq db 13,10,'So lon nhat la: $' b db ? .code main proc mov ax,@data mov ds,ax lea dx,msg mov ah,9 int 21h lea dx,msga mov ah,9 int 21h mov ah,1 int 21h and al,0fh mov a,al lea dx,msgb mov ah,9 int 21h mov ah,1 int 21h and al,0fh mov b,al cmp a,al jae ab jbe ba ab: lea dx,msgkq mov ah,9 int 21h mov dl,'0' add dl,a mov ah,2 int 21h ba:  lea dx,msgkq mov ah,9 int 21h mov dl,'0' add dl,b mov ah,2 int 21h mov ah,4ch int 21h  main endp end 6. 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 chữ cái in thường ch và in ra các chữ cái in thường từ ch đến ‘z’. ;Viet ct nhap vào tu bàn phím mot chu cái in thuong ch ; in ra các chu cai in thuong tu ch den ‘z’. .model small .stack 100h .data s1 db 'nhap mot ky tu : $' msg db 10,13,'$' .code main proc mov ax,@data mov ds,ax ;nhap mot ky tu mov ah,9 lea dx,s1 int 21h mov ah,1 int 21h ;chuyen ky tu vua nhap vao bl mov bl,al ;xuong dong mov ah,9 lea dx,msg int 21h inkytu: cmp bl,'z';so sanh xem ky tu vua nhap voi ky tu 'z' je thoat;neu = thi nhay den thoat ;neu ko = thi in ky tu do mov ah,2 mov dl,bl int 21h inc bl;tang bl len 1 don vi jmp inkytu thoat: mov ah,2 mov dl,'z' int 21h mov ah,4ch int 21h main endp end 9. Cho trước 2 chữ cái in hoa ch1 và ch2 (ch1<ch2), viết chương trình hợp ngữ dạng .EXE thực hiện đếm số chữ cái trong đoạn từ ch1 dến ch2 và lưu kết quả vào thanh ghi BX. ;cho truoc 2 chu cai in hoa ;viet ct dem so chu cai trong doan tu ch1 den ch2 va luu vao thanh ghi bx .model small .stack 100h .data s1 db 'nhap mot chu cai: $' ch1 db ? ch2 db ? dem db ? msg db 10,13,'$' kq db 'so chu cai trong doan tu ch1 den ch2 la : $' .code main proc mov ax,@data mov ds,ax mov ch1,'A';luu ky tu 'A' vao ch1 mov ch2,'E';luu ky tu 'E' vao ch2 ;trong doan tu 'A' den 'E' co 3 ky tu la B C D ;xuong dong mov ah,9 lea dx,msg int 21h ;in chuoi kq mov ah,9 lea dx,kq int 21h mov al,ch1 mov cl,ch2 mov bx,'0' ;bx luc dau =0 demkytu: inc al cmp al,cl je thoat inc bx jmp demkytu thoat: mov ah,2 mov dx,bx int 21h mov ah,4ch int 21h main endp end 11. Viết chương trình hợp ngữ dạng .EXE thực hiện in dạng biểu diễn nhị phân của thanh ghi BX. ;Viet chuong trinh in dang bieu dien nhi phan cua thanh ghi BX .model small .stack 100h .data s1 db 'doc so he 2 (16b) : $' msg db 10,13,'day so nhi fan vua nhap la: $' .code main proc mov ax,@data mov ds,ax xor bx,bx mov ah,1 tiep: int 21h cmp al,13 je thoidoc and al,0fh ; doi ma ra so shl bx,1 ;dich trai bx de lay cho luu bit vua nhap or bl,al ;chen bit vua doc vao bl jmp tiep thoidoc: mov cx,16 ;cx chua so bit cua bx ;xuongdong mov ah,9  lea dx,msg int 21h mov ah,2 print: xor dl,dl rol bx,1 adc dl,30h int 21h loop print mov ah,4ch int 21h main endp end 5. 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 chữ cái in thường ch và in ra các chữ cái in thường từ ‘a’ đến ch. ;Viet ct nhap vào tu bàn phím mot chu cái in thuong ch ; in ra các chu cai in thuong tu 'a' den ch. .model small .stack 100h .data s1 db 'nhap mot ky tu : $' msg db 10,13,'$' .code main proc mov ax,@data mov ds,ax ;nhap mot ky tu mov ah,9 lea dx,s1 int 21h mov ah,1 int 21h ;chuyen ky tu vua nhap vao bl mov bl,al ;cl luc ky tu a mov cl,'a' ;xuong dong mov ah,9 lea dx,msg int 21h inkytu: cmp bl,cl;so sanh xem ky tu vua nhap voi ky tu 'a' je thoat;neu = thi nhay den thoat ;neu ko = thi in ky tu do mov ah,2 mov dl,cl int 21h inc cl;tang cl len 1 don vi jmp inkytu thoat: mov ah,2 mov dl,bl int 21h mov ah,4ch int 21h main endp end gồi suốt buổi chiều giờ mới xong bài 19 Cho một xâu S gồm các chữ cái in thường, viết chương trình hợp ngữ dạng .EXE tạo ra xâu S1 là xâu chứa các chữ cái in hoa của xâu S và in xâu S1 ra màn hình. ;nhap mot xau ky tu thuong ;in ra man hinh xau chu hoa .model small .stack 100h .data  msg db 'Nhap vao mot chuoi: $' msg2 db 13,10,'Chuoi vua nhap la: $' chuoi db 80 dup('?') .code main proc mov ax,@data mov ds,ax  mov es,ax ;--------------------------------------------------------- lea dx,msg ;'Nhap vao mot chuoi: ' mov ah,9 int 21h lea di,chuoi call nhapchuoi  ;---------------------------------------------------------  lea dx,msg2 mov ah,9h  int 21h lea si,chuoi  call xuatchuoi  ;---------------------------------------------------------  mov ah,4ch int 21h main endp  nhapchuoi proc  ;doc vao mot chuoi ky tu ket thuc bang enter ;bx chua so ky tu doc dc push di ;DI chua offset cua chuoi cld ;dinh huong tien de cat  xor bx,bx mov ah,1 ; chuan bi doc doctiep: int 21h cmp al,13 je thoi: ;neu dung thi thoi ko doc nua  cmp al,8 ;co backspace ko jne luu dec di ;lui con tro(di=di-1) dec bx ;bot mot ky tu jmp doctiep luu: stosb ;cat ky tu inc bx ;tang so ky tu da doc len 1 jmp doctiep thoi: pop di ;lay lai con tro ret  nhapchuoi endp xuatchuoi proc  mov cx,bx ;dua so ky tu vao vong lap  for:  lodsb ; chuyen ky tu vao al mov dl,al ;dua vao dl mov ah,2 ;hien thi int 21h  loop for  ret xuatchuoi endp  end 13. Cho trước 2 số tự nhiên trong 2 thanh ghi AX và BX, viết chương trình hợp ngữ dạng .EXE kiểm tra số lớn nhất nằm trong thanh ghi nào? 12. Cho trước 2 số tự nhiên trong 2 thanh ghi AX và BX, viết chương trình hợp ngữ dạng .EXE kiểm tra số nhỏ nhất nằm trong thanh ghi nào? ;cho 2 so tu nhien trong 2 thanh ghi ax bx ;viet ct kiem tra so nho nhat nam trong thanh ghi nao .model small .stack 100h .data s1 db 'so nho nhat nam trong thanh thanh ghi ax $' s2 db 'so nho nhat nam trong thanh thanh ghi bx $' .code main proc mov ax,@data mov ds,ax mov ax,'8';gia su thanh ghi ax luu gia tri 8 mov bx,'6';gia su thanh ghi ax luu gia tri 6 cmp ax,bx jb kl1 jmp kl2 kl1:  mov ah,9 lea dx,s1 int 21h kl2:  mov ah,9 lea dx,s2 int 21h mov ah,4ch int 21h main endp end

Các file đính kèm theo tài liệu này:

  • docBài tập ASM tổng hợp.doc