33
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

Bài tap ASM tong hop

Embed Size (px)

Citation preview

Page 1: Bài tap ASM tong hop

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 lieuNhapKyTu:  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 KyTuKhacChuSo:  MOV DX, OFFSET LaChuSo  MOV AH, 9  INT 21h  JMP XuatKyTuKyTuKhac:  MOV DX, OFFSET KoLaChuSo  MOV AH, 9  INT 21h  JMP NhapKyTuXuatKyTu:  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 ASSEMBLER1. 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. 1ECDFh2. Xác định địa chỉ vật lý của các địa chỉ sau:a. 1234h:1234h b. 1111h:ABCDh c. AAAAh:BBBBh3. 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,1000hMOV BL,7MOV BH,0F0hAND BH,AH

Page 2: Bài tap ASM tong hop

MOV WORD PTR DS:[1000h],0F0hMOV BYTE PTR DS:[1002h],0FhMOV AX,DS:[1001h]MOV AL,DS:[1002h]b. MOV AX,1234hMOV BX,0AAAAhMOV CH,ALMOV CL,AHMOV DS:[1000h],AXMOV DS:[1002h],BXc. MOV AX,12hMOV DS:[1001h],AXMOV BX,AXADD BH,10hMOV DS:[1002h],BH4. 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ã ASCIIGiảicode segmentassume cs:code, ds:codeorg 100hbegin:mov cx, 255mov al,0lap:mov ah,2mov dl,alinc dlint 21hloop lapmov ax, 4c00hint 21hcode endsend 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.

Page 3: Bài tap ASM tong hop

Giải

code segmentassume cs:code, ds:codeorg 100hbegin:mov ah,1int 21hcmp al,27 ;so sanh ky tu nhap vao voi ky tu 27 la ma ESCje thoat  ;neu la ma ESC thi thoat khoi chuong trinhjmp begin ;neu khac ma ESC thi quay lai tu dauthoat:mov ax, 4c00hint 21hcode endsend 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 segmentassume cs:code, ds:codeorg 100hbegin:mov ah,1int 21hmov bl,alcmp 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 trinhja thoatjmp beginthoat:mov ax, 4c00hint 21hcode endsend 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 segmentassume cs:code, ds:codeorg 100hbegin:mov ax, 0b800hmov ds, ax

Page 4: Bài tap ASM tong hop

mov al,3mov ah,00000100bd=12c=40mov si,(d*80+c)*2mov [si],axmov ax, 4c00hint 21hcode endsend 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 segmentassume cs:code, ds:codeorg 100hbegin:mov ax, 0b800hmov ds, axmov al,3mov ah,00000100bd=12c=40mov si,(d*80+c)*2mov [si],ax

lap:mov ah,7  ;nhap ky tu tu ban phim khong hien len man hinhint 21hcmp al,'l';so sanh neu dung thi thuc hien lenh traije traicmp al,'r'je phaicmp al,'u'je trencmp al,'d'je duoijmp thoat

trai:mov al,3mov ah,4mov [si],0720h      ;xoa ky tu vua dich chuyensub si,2mov [si],axjmp lap

Page 5: Bài tap ASM tong hop

phai:mov al,3mov ah,4mov [si],0720h      ;xoa ky tu vua dich chuyenadd si,2mov [si],axjmp lap

tren:mov al,3mov ah,4mov [si],0720h      ;xoa ky tu vua dich chuyensub si,160mov [si],axjmp lap

duoi:mov al,3mov ah,4mov [si],0720h      ;xoa ky tu vua dich chuyenadd si,160mov [si],axjmp lap

thoat:mov ax, 4c00hint 21hcode endsend 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 segmentassume cs:code,ds:codeorg  100hbegin:        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'

Page 6: Bài tap ASM tong hop

        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]

Page 7: Bài tap ASM tong hop

        mov ax,4c00h        int 21hcode endsend 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.datathongbao1 db 'nhap chuoi, enter de ket thuc: $',10,13thongbao2 db 13,10,'hien thi chuoi: $'xuongdong db 13,10,'$'str db 100 dup(?)main procmov ax,@Datamov ds,axmov es,axxor cx,cxmov ah,9lea dx,thongbao1int 21hcldlea di,strmov ah,1nhaptiep:int 21hcmp al,13je thoinhapstosbinc cxjmp nhaptiepthoinhap:mov ah,9lea dx,thongbao2int 21hlea si,strlap:mov ah,9lea dx,xuongdongint 21hmov ah,2lodsb

Page 8: Bài tap ASM tong hop

mov dl,alint 21hloop lapmov ah,4chint 21hmain endpend main

Interupt:(ngắt):int 10h  :Ngắt làm việc của bios về màn hìnhint 11h  : Bios về cấu hìnhint 13h  :Bios về ổ đĩaint 14h  : Bios về giao diện cổng nối tiếpint 16h  : Bios liên quan đến bàn phímint 17h  :Máy inint 19h  :Khởi động hệ thốngint 20h  :Ngắt của Dos kết thúc chương trình trở về hệ điều hànhint 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 ALmov ah,1int 21h;In ký tự có trong DLmov ah,2int 21h;Nhập một ký tự từ bàn phím không hiển thị lên màn hìnhmov ah,7int 21h;In chuỗi ký tự khai báo trướcmov ah,9mov dx,offset db(chuỗi)int 21h;Thoát về hệ điều hànhmov ax,4c00hint 21h

Bảng mầu:

     Maøu :    - Ñòa chæ maøn hình maøu : B800 : 0000   

Page 9: Bài tap ASM tong hop

    - 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ø

Page 10: Bài tap ASM tong hop

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

Page 11: Bài tap ASM tong hop

                        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

.DATAA DB "MOI NHAP : $"B DB 13,10,"XUAT : $"C DB 40,?,40 DUP(?).CODEMAIN PROCMOV AX,@DATAMOV DS,AXMOV AH,9LEA DX,AINT 21HMOV AH,0AHINT 21HLEA DX,BMOV AH,9INT 21HMOV CL,C[1] MOV CH,0 MOV BX,2 HOA:MOV AL,C[BX] JL INRACMP AL,'Z'JG INRAAND AL,0DFH INRA:MOV AH,2MOV DL,AL INT 21HADD BX,1LOOP HOAMOV AH,4CHINT 21HMAIN ENDPEND MAIN

Page 12: Bài tap ASM tong hop

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:$'

.CodeMain ProcMov ax,@DataMov ds,axMov ah,9Lea dx,Msg1int 21hMov ah,1Int 21h jmp tiep Nhaplai: Mov ah,2Mov dl,0DHint 21hMov dl,0AHint 21h

Mov ah,9Lea dx,Msg2int 21h

Mov ah,1Int 21h 

tiep: cmp al,'0'jl Nhaplaicmp al,'9'Jg NhaplaiMov bl,al

Mov ah,2Mov dl,0DHint 21hMov dl,0AHint 21h

Mov ah,9Lea dx,Msg3Int 21h

Page 13: Bài tap ASM tong hop

Mov ah,2Mov dl,blInt 21h

Mov ah,4chInt 21hMain EndpEnd 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:$'

.CodeMain ProcMov ax,@DataMov ds,axMov ah,9Lea dx,sint 21hMov ah,1Int 21hjmp tiep

Nhapso: Mov ah,2Mov dl,0DHint 21hMov dl,0AHint 21h

Mov ah,9Lea dx,s1int 21h

Mov ah,1Int 21h 

tiep:cmp al,'0'

Page 14: Bài tap ASM tong hop

jb Nhapsocmp al,'9'Ja NhapsoMov bl,al

Mov ah,2Mov dl,0DHint 21hMov dl,0AHint 21h

Mov ah,9Lea dx,s2Int 21h

Mov ah,2Mov dl,blInt 21h

Mov ah,2Mov dl,0DHint 21hMov dl,0AHint 21h

Xor bl,bl

Mov ah,9Lea dx,s3int 21hMov ah,1Int 21hjmp tiep1 

Nhapchu: Mov ah,2Mov dl,0DHint 21hMov dl,0AHint 21h

Mov ah,9Lea dx,s4int 21h

Mov ah,1Int 21h 

tiep1:cmp al,'a'jb Nhapchucmp al,'z'Ja NhapchuMov bl,al

Page 15: Bài tap ASM tong hop

Mov ah,2Mov dl,0DHint 21hMov dl,0AHint 21h

Mov ah,9Lea dx,s5Int 21h

Mov ah,2Mov dl,blInt 21h

Call VEDOS

Main EndpVEDOS ProcMov ah,4chInt 21hVEDOS EndpEnd 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, 0dockitu: mov ah, 1 int 21h cmp al,13

Page 16: Bài tap ASM tong hop

jnz luukitu jnz dockitu jz xulychuoiluukitu: mov [si], al inc si inc di jmp dockituxulychuoi: ;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 sohexadodaichuoi: 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

Page 17: Bài tap ASM tong hop

int 21hmain endp

taohexa proc push ax push bx push cx push dx jmp lapgaploi: 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, 57hluuhex: sub ah, al mov [si], ah inc si loop lap

pop dx pop cx pop bx pop ax rettaohexa endpend main

.model small

.stack

Page 18: Bài tap ASM tong hop

.datamsg db 'Nhap so n = $'n db ?kq db 13,10,'Ket qua la: $'coso dw 0ah .codemain procmov ax,@datamov ds,axmov ax,02hint 10h

lea dx,msg ;in ra 'Nhap so n = 'mov ah,9int 21h

mov ah,1 ;nhap soint 21h and al,0fh ;chuyen thanh somov n,al ;luu vao n

;Tinh toan BX xor bx,bx ;lam sach thanh ghixor dx,dx

xor ah,ah ;ah=0 de gan ax cho dxmov dx,ax ;lay dx lam bien trung gian lap: cmp dx,0ah ;so sanh DX voi 10je thoat inc dx ;tang dx len 1add bx,dx ;cong don vao bx jmp lap

;In ra man hinh thoat: mov ax,bxxor cx,cxdayvaostack:Xor dx,dxdiv cosopush dxinc cxcmp ax,0jne dayvaostack

lea dx,kqmov ah,97. 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 21hprint:

Page 19: Bài tap ASM tong hop

pop dxor dl,30hmov ah,2int 21hloop print 

mov ah,4chint 21hmain endpend

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.datamsg 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

.codemain procmov ax,@datamov ds,axmov ah,02hint 10h;-------------------------------------------------;Nhap so nho hon 8 lap: lea dx,msgmov ah,9int 21h

mov ah,1int 21hand al,0fhmov n,al

cmp n,8ja nhaplaimov dl,2mov ax,1jmp tinhnhaplai:lea dx,msg2 mov ah,9int 21h

Page 20: Bài tap ASM tong hop

lea dx,xuongdongint 21h jmp lap ;------------------------------------------------- ;Tinh giai thua tinh: cmp dl,nje inramhmul dlinc dljmp tinh;in ra hinhinramh:xor cx,cx dayvaostack:xor dx,dxdiv cosopush dxinc cxcmp ax,0jne dayvaostack

lea dx,msg3mov ah,9int 21h 

print:pop dxor dl,30hmov ah,2int 21hloop print 

mov ah,4chint 21hmain endpend 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

.datamsg 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

Page 21: Bài tap ASM tong hop

main procmov ax,@datamov ds,ax

lea dx,msgmov ah,9int 21h

lea dx,msgamov ah,9int 21h

mov ah,1int 21hand al,0fhmov a,al

lea dx,msgbmov ah,9int 21h

mov ah,1int 21hand al,0fhmov b,al

cmp a,aljae abjbe ba

ab:lea dx,msgkqmov ah,9int 21h

mov dl,'0'add dl,amov ah,2int 21h

ba: lea dx,msgkqmov ah,9int 21h

mov dl,'0'add dl,bmov ah,2int 21h

mov ah,4chint 21h main endpend

Page 22: Bài tap ASM tong hop

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.datas1 db 'nhap mot ky tu : $'msg db 10,13,'$'

.codemain procmov ax,@datamov ds,ax

;nhap mot ky tumov ah,9lea dx,s1int 21h

mov ah,1int 21h;chuyen ky tu vua nhap vao blmov bl,al

;xuong dongmov ah,9lea dx,msgint 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 domov ah,2mov dl,blint 21hinc bl;tang bl len 1 don vijmp inkytuthoat:mov ah,2mov dl,'z'int 21hmov ah,4chint 21hmain endpend

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.

Page 23: Bài tap ASM tong hop

;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.datas1 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 : $'

.codemain procmov ax,@datamov 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 dongmov ah,9lea dx,msgint 21h

;in chuoi kqmov ah,9lea dx,kqint 21h

mov al,ch1mov cl,ch2mov bx,'0' ;bx luc dau =0demkytu:inc alcmp al,clje thoatinc bx jmp demkytuthoat:

mov ah,2mov dx,bxint 21hmov ah,4chint 21hmain endpend

Page 24: Bài tap ASM tong hop

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.datas1 db 'doc so he 2 (16b) : $'msg db 10,13,'day so nhi fan vua nhap la: $' .codemain procmov ax,@datamov ds,axxor bx,bxmov ah,1tiep:int 21hcmp al,13je thoidocand al,0fh ; doi ma ra soshl bx,1 ;dich trai bx de lay cho luu bit vua nhapor bl,al ;chen bit vua doc vao bljmp tiepthoidoc:mov cx,16 ;cx chua so bit cua bx;xuongdongmov ah,9 lea dx,msgint 21hmov ah,2 print:xor dl,dlrol bx,1adc dl,30h int 21hloop printmov ah,4chint 21hmain endpend

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.datas1 db 'nhap mot ky tu : $'msg db 10,13,'$'

Page 25: Bài tap ASM tong hop

.codemain procmov ax,@datamov ds,ax

;nhap mot ky tumov ah,9lea dx,s1int 21h

mov ah,1int 21h;chuyen ky tu vua nhap vao blmov bl,al

;cl luc ky tu amov cl,'a'

;xuong dongmov ah,9lea dx,msgint 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 domov ah,2mov dl,clint 21hinc cl;tang cl len 1 don vijmp inkytuthoat:mov ah,2mov dl,blint 21hmov ah,4chint 21hmain endpend

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: $'

Page 26: Bài tap ASM tong hop

chuoi db 80 dup('?')

.codemain procmov ax,@datamov ds,ax mov es,ax;---------------------------------------------------------lea dx,msg ;'Nhap vao mot chuoi: 'mov ah,9int 21h

lea di,chuoicall nhapchuoi 

;--------------------------------------------------------- lea dx,msg2mov ah,9h int 21h

lea si,chuoi call xuatchuoi 

;--------------------------------------------------------- mov ah,4chint 21hmain endp nhapchuoi proc ;doc vao mot chuoi ky tu ket thuc bang enter;bx chua so ky tu doc dcpush di ;DI chua offset cua chuoicld ;dinh huong tien de cat xor bx,bxmov ah,1 ; chuan bi docdoctiep:int 21hcmp al,13je thoi: ;neu dung thi thoi ko doc nua cmp al,8 ;co backspace kojne luudec di ;lui con tro(di=di-1)dec bx ;bot mot ky tujmp doctiepluu:stosb ;cat ky tuinc bx ;tang so ky tu da doc len 1jmp doctiepthoi:pop di ;lay lai con troret nhapchuoi endpxuatchuoi proc 

Page 27: Bài tap ASM tong hop

mov cx,bx ;dua so ky tu vao vong lap for: lodsb ; chuyen ky tu vao almov dl,al ;dua vao dlmov ah,2 ;hien thiint 21h loop for retxuatchuoi 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.datas1 db 'so nho nhat nam trong thanh thanh ghi ax $'s2 db 'so nho nhat nam trong thanh thanh ghi bx $' .codemain procmov ax,@datamov ds,ax

mov ax,'8';gia su thanh ghi ax luu gia tri 8mov bx,'6';gia su thanh ghi ax luu gia tri 6

cmp ax,bxjb kl1jmp kl2kl1: mov ah,9lea dx,s1int 21h

kl2: mov ah,9lea dx,s2int 21hmov ah,4chint 21hmain endpend

Page 28: Bài tap ASM tong hop