Assembly so sánh 2 xâu kí tự năm 2024
Contents 1; (asembly) Hiển thị lời chào Tiếng Anh và Tiếng Việt trên emu8086 ............................................... 8 2: (asembly) Nhập 1 ký tự và xuất ra màn hình trên emu8086 .............................................................. 9
12ỔNG CÁC CHỮ SỐ ..................................................................................................................... 25 13, BCNN: ................................................................................................................................ 27 14ổng chia hết cho 7:.......................................................................................................................... 30 15ổng 2 số kiểu word ........................................................................................................................ 33 Kiến thức : Cấu trúc chương trình dạng EXE:* .Model HUY INIT Cấu trúc bài làm đi thi : ;nhap chuoi truoc , in thong bao và in chuoi sau .model small .stack 100 .data tb1 DB 10,13, & str DB 100 dup(& mov ah,9 ;in mot xau ky tu lea dx,tb1 ; int 21h ;in ra ;nhap chuoi ky tu mov ah,10 ; 10=0ah lea dx,str ; tro den dia chi dau str int 21h mov ah,9 ;in mot xau ky tu lea dx,tb2 ; int 21h ;in ra call xuatchuoi mov ah,4CH int 21h main endp xuatchuoi proc HUY INIT nhập vào một phím Ngắt loại 2 Hiện một kí tự lên màn hình Hiện một ký tự có mã ASCII là giá trị của DL lên màn hình MOV DL, 30h; (30h là mã ASCII của ‘0’) INT 21H; => màn hình sẽ in ra ký tự ‘0’ Ngắt loại 9 Hiện xâu ký tự Hiện xâu ký tự có địa chỉ lệch là giá trị của DX tb BD ‘co lam thi moi co an$’; MOV AH, 9; LEA DX, tb; INT 21H; => màn hình in ra xâu tb (ko hiện ký tự ‘$’) Ngắt chương trình Dừng chương trình Dừng chương trình Hàm 0Ah AH= Nhập một xâu kí tự vào một biến đệm cho trước trong chương trình, biến này phải được chỉ bởi cặp thanh ghi DS:DXà biến đệm phải có dạng như sau: -Byte 0: chứa số kí tự tối đa của xâu nhập vào -Byte 1: chứa một trị không (= 0) -Byte 2, byte 3, byte 4, ... chứa một trị rỗng (để trống), để chứa các kí tự sẽ được nhập vào sau này (khi chương trình thực hiện). Để có được một biến như trên chương trình phải khai báo biến (tên biến là Xau_Nhap) như sau: Xau_Nhap DB 256, 0, 256 Dup (‘ ‘) Như vậy Xau_Nhap là một biến kiểu byte, gồm 258 byte. Byte đầu tiên (byte) chứa trị 256, byte 1 chứa trị 0, 256 byte tiếp theo chứa kí tự trống, được sử HUY INIT dụng để chứa các kí tự sẽ được nhập sau này. Xau_Nhap chứa tối đa 256 kí tự. Cũng có thể sử dụng hàm 0Ah/21h để nhập một xâu kí tự vào vùng nhớ có địa chỉ xác định trong bô nhớ. Sử dụng: Vào: Ah = 0Ah DS:DX = <Địa chỉ Segment:Offset của xâu nhập> Ra: DS:DX không thay đổi Biến đệm bây giờ có dạng như sau: HUY INIT ngược lại thì : SI ← SI – 2 Nếu [Toán hạng nguồn] là toán hạng 16 bít thì lệnh sẽ lấy giá trị của cặp thanh ghi Dx:Ax (số bị chia) chia cho [Toán hạng nguồn] (số chia), kết quả thương số chứa trong thanh ghi Ax, số dư chứa trong thanh ghi Dx. Nếu ph攃Āp chia cho 0 xảy ra hay thương số vượt quá giới hạn của thanh HUY INIT ghi AL (chia 8 bít) hay Ax (chia 16 bít) thì CPU sẽ phát sinh lỗi “Divice overflow”. Asembly, bai tap assembly, assembly,emu8086, lập trình hợp ngữ , kien truc may tinh, ktvxl, vi xu li, kien truc vi xu li 1; (asembly) Hiển thị lời chào Tiếng Anh và Tiếng Việt trên emu ;in 2 chuoi .Model Small ; chung trinh nay chon bo nho small .Stack 100 ; kich thuoc ngan xep la 100 bytes .Data ;cac dong duoi data la khai bao CRLF DB 13, 10, & HUY INIT TBao1 db "Hay nhap mot ky tu: $" ;khoi tao xau TBao2 db 13,10,"Ky tu da nhap: $" output db? ;khoi tao bien KyTu khong co gia tri ban dau* .code main proc Mov ax,@data ;khoi dau thanh ghi DS Mov ds,ax ;tro thanh ghi ds ve dau doan data ;in ra man hinh xau TBao Lea dx, TBao1 ;dua con tro toi dia chi cua TBao Mov ah, 9 ;su dung ham ngat 9 cua ngat INT 21h int 21h ;nhap vao 1 ki tu tu ban phim * Mov ah, 1 ;su dung ham ngat 1 cua ngat INT 21h Int 21h Mov output, al;gan gia tri vua nhap (duoc luu o AL) vao bien KyTu ;in ra man hinh xau TBao lea dx, TBao mov ah, 9 HUY INIT int 21h ;hien thi ky tu da nhap Mov ah, 2 ;su dung ham ngat 2 cua ngat INT 21h Mov dl, output ;Hien thi ra man hinh ky tu da luu o DL Int 21h ;ve dos Mov ah, 4Ch Int 21h main endp End ;nhap ky tu truoc sau do in chuoi và ky tu hoa sau .MODEL SMALL .STACK 100h tb2 DB 13,10,& Char DB ?,& HUY INIT .code main proc mov ax, @data mov ds,ax ;khoi tao thanh ghi ds ;nhap chuoi ky tu mov ah,10 ; 10=0ah lea dx,str ; tro den dia chi dau str int 21h mov ah,9 ;in mot xau ky tu lea dx,tb1 ; int 21h ;in ra ;dua dx chi ve phan tu thu 2 cua mang la ; ky tu dau tien duoc nhap vao lea dx,str +2 ;256,5,h,e,l,l,o int 21h ;in na mov ah,4CH int 21h main endp end HUY INIT ;Nhap chuoi: LEA DX, str ;tro den dia chi chuoi str MOV AH, 10 ; nhap xau ngat 10 INT 21H ;In thong bao 1 MOV AH, 9 LEA DX, tb1 ;hien xau tb INT 21H CALL inthuong ;hien xau str chu thuong ;In chuoi in hoa: MOV AH, 9 LEA DX, tb2 ;hien thong bao tb INT 21H CALL inhoa MOV AH, 4ch INT 21H main endp inthuong proc LEA SI, str+2 ; Lap1: ;1 xau : kiem tra tung ky tu mot MOV DL, [SI] CMP DL, & HUY INIT int 21h ;in chuoi tb2 ra man hinh lea dx, tb mov ah, int 21h ;vd 123456789 =>len=9 256,9,1,2,3.... mov cl,[str + 1] ;chuyen chieu dai chuoi vua nhap vao cl lea si,[str + 2] ;dua si chi ve phan tu thu 2 cua mang la ky tu dau tien duoc nhap vao Lap:;day cac ky tu vao ngan xep push [si];dua phan tu ma si dang chi den vao dau ngan xep inc si ;increase :tang gi tri cua si len 1 loop Lap mov cl, [str + 1];chuyen chieu dai chuoi vua nhap vao cl Lap2: ;lay du lieu tu ngan xep pop dx ;lay gia tri tren dinh ngan xep dua vao dx mov ah,2 ;in ki tu vua lay ra man hinh int 21h Loop Lap ; tro ve DOS dùng hàm 4 CH cua INT 21H MOV AH, 4CH INT 21H main endp end ;enter là 13 , esc là 27 .Model small .Stack 100h .Data str db 50 dup (& HUY INIT main proc mov ax,@Data mov ds,ax ;khoi tao thanh ghi ds mov cx,0;gan gia tri cho thanh ghi cx= START: inc cx;increase tang cx len 1 mov ah,1 ;nhap 1 ki tu int 21h cmp al,& end:;ket thuc mov ah,2 ;in ky tu mov dl,0; in dau cach int 21h dec cx;decrease:tru cx di 1 pop dx;lay phan tu o dinh ngan xep dua vao dx mov ah,2 ;in ky tu int 21h cmp cx,1;so sanh cx voi 1 jne end;jump not equal :nhay den & HUY INIT MOV DS,AX ;khoi tao thanh ghi ds LEA DX,tb1 ;xuat chuoi tb MOV AH, INT 21h LEA DX,s MOV AH,10 ;nhap chuoi s INT 21h LEA DX,tb MOV AH,9 ;xuat chuoi tb INT 21h ;Tinh chieu dai chuoi mov ax, MOV AL,s+1 ;Chuyen chieu dai chuoi vao ax al= MOV CX,0 ;Khoi tao bien dem cx=0(count) MOV BX,10 ;khoi tao so chia ;123 push 3 2 1 =>pop 1 2 3 LapDem1:; day cac so vao ngan xep MOV DX,0 ;khoi tao phan du bang 0 DIV BX ; chia 10 PUSH DX ; lay dx la phan du day vao ngan xep INC CX ;tang cx len 1 don vi CMP AX,0 ;so sanh ax phan thuong khac 0 thi tiep tuc vong lap JNZ LapDem1 ;jump not zezo ;xuat chieu dai chuoi LapDem2: ; lay cac so tu ngan xep ra POP DX ;Chua so du trong phep chia HUY INIT ADD DX,& MOV AH,4ch INT 21h END MAIN End ;Nhap vao so va tinh giai thua .model small .stack 100 .data muoi dw 10 TB1 db 10,13,& mov ah,1 ;nhap 1 ky tu tu ban phim int 21h sub al,& lea dx,TB1 ; in chuoi tb mov ah, int 21h ;1234 mov ax,1;khoi tao ket qua ban dau = mov bx,1 ;bien tang |