Bài tập mẫu môn lập trình hệ thống Assembly (ASM)

administrator

Administrator
Staff member
Chương trình tham khảo 1.

Chương trình 1: Viết chương trình Assembly thực hiện các chức năng
sau (các chức năng của chương trình được gọi thông qua menu):
1. Đặt lại ngày, tháng năm cho tệp (tên tệp nhập vào từ bàn phím).
2. Tìm và hiện các số nguyên có 3 chữ số thỏa mãn điều kiện: Tổng
lập phương của từng chữ số bằng chính số đó.
3. Hiển thị thông tin địa chỉ các cổng LPT?
4. Thông tin nhóm
5. Thoát chương trình

PHP:
include mylib1.asm
.Model small
.Stack 100h
.Data
    ;---khai bao phan gioi thieu chuong trinh----------------
    t0 db 13,10,13,10,13,10,13,10,'          * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *'
       db 13,10,'          *                  Vien dai hoc mo Ha Noi                   *'
       db 13,10,'          *                 KHOA CONG NGHE THONG TIN                  *'
       db 13,10,'          *       BAI TAP LON MON HOP NGU & LAP TRINH HE THONG        *'
       db 13,10,'          *                       DE TAI SO 09                        *'
       db 13,10,'          *               ----------------------------                *'
       db 13,10,'          *                                                           *'
       db 13,10,'          *  Giao vien huong dan:            Nhom 09-10B4:            *'
	   db 13,10,'          *  Pham Cong Hoa                   Nguyen Cao Tu            *'
	   db 13,10,'          *                                  Bui Truong Duc Cong      *'
	   db 13,10,'          *                                  Hoang Gia Linh           *'
	   db 13,10,'          *                                  Le Xuan Hao              *'
	   db 13,10,'          *                                                           *'
	   db 13,10,'          * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *$ '
	t1 db 13,10,13,10,'          An phim bat ky de vao menu chuong trinh!$'
	t2 db 13,10,'          An ESC de thoat!$'
	t3 db 13,10,13,10,'          An phim bat ky de ra menu chuong trinh!$' 
	
	;---khai bao phan menu chuong trinh----------------------
	m0 db 13,10,13,10,13,10,13,10,'         ------MENU------------------------------------------------------'
	   db 13,10,'        |1 ... Dat lai ngay, thang nam cho tep bat ki                    |'                    
	   db 13,10,'        |                                                                |'
	   db 13,10,'        |2 ... Tim va hien cac so nguyen co 3 chu so thoa man dieu kien: |'
	   db 13,10,'        |      Tong lap phuong cua tung chu so bang chinh so do          |'
	   db 13,10,'        |                                                                |'
	   db 13,10,'        |3 ... Hien thi thong tin dia chi cac cong LPT                   |'
	   db 13,10,'        |                                                                |'
	   db 13,10,'        |4 ... Thong tin nhom                                            |'
	   db 13,10,'        |                                                                |'
	   db 13,10,'        |5 ... Thoat chuong trinh                                        |'
	   db 13,10,'         ----------------------------------------------------------------$'         
	   
    ;---khai bao phan thoi gian ---------------------
    sTime1 db 13,10,'      DAT LAI NGAY, THANG, NAM CHO TEP'
		 db 13,10,' -----------------------------------------------$'
	sTime2 db 13,10,' Nhap ten tep: $'
	sTime3 db 13,10,' Nhap ngay, thang, nam $'     
	sTime31 db 13,10,' Nhap ngay: $'
	sTime32 db 13,10,' Nhap Thang: $'
	sTime33 db 13,10,' Nhap Nam: $'		
	sTime4 db 13,10,' Bam phim bat ky de ve man hinh chuc nang$'   
	sTime5 db 13,10,' Dat thoi gian cho file thanh cong$'
	sTime6 db 13,10,' Loi nhap ngay$'
	sTime7 db 13,10,' Loi nhap thang$'	
	sLoi db 13,10,' Khong tim thay file, vui long kiem tra lai !$'
	buff db 30
	       db ?
	file_name db 30 dup(?)
	the_tep dw ?                    
    
    ;---khai bao phan tim 3 so-----------------------------
    s db 13,10,'Cac so tim duoc la:$'
    s1 db '   $'
    n dw ?
    t dw ?
    k dw ? 
     
    ;---khai bao phan LPT----------
    m1 db 13,10,' So luong cong LPT co trong may tinh la: $'
    m2 db 13,10,' Dia chi cac cong LPT la: $'
    m3 db '  $'
    
    ;---khai bao phan thong tin nhom-------------------------
    n0 db 13,10,13,10,'         THONG TIN NHOM 09'
       db 13,10,'         -------------------------'
       db 13,10,13,10,'   1. Nguyen Cao Tu'
       db 13,10,'      +Email: @gmail.com'
       db 13,10,'      +SDT: xxxxxxxxxxxx'
       db 13,10,13,10,'   2. Bui Truong Duc Cong'
       db 13,10,'      +Email: congbui192@gmail.com'
       db 13,10,'      +SDT: 0982622588'
       db 13,10,13,10,'   3. Hoang Gia Linh'
       db 13,10,'      +Email: @gmail.com'
       db 13,10,'      +SDT: xxxxxxxxxxxx'
       db 13,10,13,10,'   4. Le Xuan Hao'
       db 13,10,'      +Email: @gmail.com'
       db 13,10,'      +SDT: xxxxxxxxxxxx$'
    ;--------------------------------------------------------  
    
.Code
Class10b4:
    mov ax,@data
    mov ds,ax 
;============================================================
;Gioi thieu
    Gioithieu:
        Xoa_man_hinh
        Hien_xau t0
        Hien_xau t1
        Hien_xau t2
        mov ah,1
        int 21h
        cmp al,27
        jne Menu
    Ve_dos
;============================================================
;Menu chuong trinh
    Menu:
        Xoa_man_hinh
        Hien_xau m0
        mov ah,1
        int 21h
    Chucnang1:
        cmp al,'1'
        jne Chucnang2
        Call Time
        jmp Menu 
    Chucnang2:
        cmp al,'2'
        jne Chucnang3
        Call Baso
        jmp Menu
    Chucnang3:  
        cmp al,'3'
        jne Chucnang4
        Call LPT
        jmp Menu 
    Chucnang4:
        cmp al,'4'
        jne Chucnang5
        Call Nhom
        jmp Menu
    Chucnang5:
        cmp al,'5'
        jne Gioithieu
    ve_dos
;============================================================
;Sua thoi gian tep    
TIME PROC
        Xoa_man_hinh   
        Hien_xau sTime1
        Hien_xau sTime2 
        lea dx,buff
    	call GET_FILE_NAME    ; xem trong lib3.asm
    	lea dx,file_name
    	mov al,2
    	mov ah,3dh	;chuc nang mo tep
    	int 21h
    	jnc TDATE
    	Hien_xau sLoi
    	jmp Thoat
TDATE:  
    	mov the_tep,ax
    	mov bx,ax
    	mov al,0
    	mov ah,57h	; Ham ngat thoi gian
    	int 21h 

     	Hien_xau sTime31   	; Nhap ngay
        xor bx,bx  
        cmp ax,30
        jmp Loingay
        call nhap_so_n	;xem trong mylib2.asm
        xor ah,ah
        or bx,ax	;+ vao bx 

        
     	Hien_xau sTime32    ; Nhap Thang
        call nhap_so_n
        xor ah,ah
        mov cl,5
        shl ax,cl
        or bx,ax      
        
      	Hien_xau sTime33   ; Nhap Nam    
        call nhap_so_n
        sub ax,1980	     ; tru nam nhap cho 1980. Vi may tinh luu tu 1980
        mov cl,9
        shl ax,cl
        or bx,ax
        
        mov dx,bx	;chuyen gia tri nhap -> dx
        mov bx,the_tep
        mov al,1
        mov ah,57h	;chuc nang set date
        int 21h    
    	Hien_xau sTime5 ; Thong bao thanh cong 
   Loingay:
        Hien_xau sTime6
   Loithang:       
        Hien_xau sTime7  
   Thoat:
	    Hien_xau t3    ; Thoat khoi chuong tirnh
	    mov ah,1
	    int 21h


	    RET
TIME ENDP    

;============================================================
;Tim 3 so
    Baso PROC
        Xoa_man_hinh
        Hien_xau s
        mov n,100           
    Lap:
        mov bx,10       
        mov cx,0        
        mov ax,n
        mov t,0        
    Lap1:
        and dx,0        
        div bx    
        push dx
        inc cx       
        and ax,ax       
        jz Tiep1        
        jmp Lap1
    Tiep1:
        mov ax,0
    Tinh:
        pop ax
        mov k,ax
        mul k
        mul k
        add t,ax
        Loop Tinh
    Sosanh:
        mov ax,t
        cmp ax,n
        jne Lap2
        mov ax,n
        call Hien_so_n
        Hien_xau s1 
    Lap2:
        mov ax,n
        cmp ax,999
        jge ThoatBaso
        inc n
        jmp Lap
                      
    ThoatBaso:
        Hien_xau t3
        mov ah,1       
        int 21h
        RET
    Baso ENDP
         
;============================================================
;Kiem tra cong LPT
    LPT PROC
	    Xoa_man_hinh
	    int 11h
	    mov al,ah
	    mov cl,6
	    shr al,cl
	    Hien_xau m1
	    jz LPT3
    
    LPT1:
	    xor ah,ah
	    mov cx,ax
	    call Hien_so_n
        Hien_xau m2
	    xor ax,ax
	    mov es,ax
	    mov bx,408h
	    jz LPT2
    LPT2:
	    Hien_xau m3
	    mov ax,es:[bx]
	    call HIEN_HEXA
	    add bx,2
	    loop LPT2
	    jmp ThoatLPT
    LPT3:
        xor ah,ah
	    call Hien_so_n
    ThoatLPT:
	    Hien_xau t3
	    mov ah,1
	    int 21h
	    RET
    LPT ENDP

;============================================================
;Thong tin nhom
    Nhom PROC
    Xoa_man_hinh
    Hien_xau n0
    Hien_xau t3
    mov ah,1
    int 21h
    RET
    Nhom ENDP
;============================================================
include mylib2.asm  
include LIB3.asm
END Class10b4


Chương trình 2: Viết chương trình liên kết giữa ngôn ngữ C/C++ và
Assembly với sự phân công công việc như sau:
Ngôn ngữ C/C++:
- Nhập từ bàn phím 2 số nguyên a và b (giả thiết a<b).
- Gọi hàm đếm số lượng các số nguyên tố nằm giữa a và b do
assembly viết.
Ngôn ngữ ASM:
- Viết hàm đếm số lượng các số nguyên tố nằm giữa a và b do
C/C++ truyền qua.


Dùng tlink để dịch 2 cái này vs nhau nhé.

Dema.asm
PHP:
include mylib1.asm
.model large
.stack 100h
.data
	s1 db 13,10,'So luong so nguyen to la:$'
	i dw ?
	k dw ?
	n dw ?
	extrn _a:word,_b:word
.code
public _demnguyento
_demnguyento proc
	mov ax,@data
	mov ds,ax
	mov ax,_a
	mov bx,_b
	cmp ax,bx  ; so sanh ax vs bx
	jl Tiep0 ; neu ax nho hon bx thi nhay den Tiep0
	xchg ax,bx  ; doi cho ax vs bx
	Tiep0:
	    mov k,0  ; k la so luong so nguyen to
	    sub bx,ax
	    mov cx,bx
	    dec cx  ; tru cx di 1 don vi, cx se la so lan lap.  
	    mov n,ax    
	    inc n   ; tang n len 1 don vi  ; n = 2
	Tiep:
	    mov i,1 
    L1: 
        mov ax,n    
        inc i  ; tang i len 1 don vi    
        cmp ax,i						; kiem tra ax va i. neu ax=2 thi nhay den L2
        jne L2  ; Nhay den l2 neu ax khong bang i
        inc k      ; tang k len 1 don vi
        jmp L3	; Nhay den L3, tinh so tiep theo
    L2:  
        mov dx,0  ; xoa gia tri dx (de chuan bi thuc hien phep chia)
        div i  ; chia dx cho i
        cmp dx,0 ; neu du 0, thi nhay den L3 kiem tra phan tu tiep theo
        je L3
        jmp L1
    L3:      
        inc n
        Loop Tiep   
	
	Ketluan:
	
	Hien_xau s1
	mov ax,k
	
		mov bx,10
		and cx,0        
		and ax,ax
		jns Hienchuso
    
		push ax         
		mov al,'-'      
		mov ah,0eh
		int 10h
		pop ax          
		neg ax          
    
		Hienchuso:
			and dx,0        
			div bx          
			add dx,30h      
			push dx         
			inc cx         
			and ax,ax       
			jz Hien
			jmp Hienchuso
		Hien:  
			pop ax
			mov ah,0eh  ; hien 1 ky tu ra man hinh
			int 10h   
			loop Hien
ret
_demnguyento endp
include mylib2.asm
end

demc.c
PHP:
#include<stdio.h>
#include<conio.h>
extern void demnguyento();
int a,b;
void main()
{	clrscr();
	printf("Nhap a=");
	scanf("%d",&a);
	printf("\nNhap b=");
	scanf("%d",&b);
	demnguyento();
	getch();
}

Thử viện và demo chương trình sau khi đã dịch các bạn dow file đính kèm.
 

administrator

Administrator
Staff member
Upload thêm một số đề ASM của FITHOU (cái này sẽ ko share bài giải :D)

[gdoc]0B_BzhhE4URWAelJ1bV9mby0yV3c[/gdoc]
Hướng dẫn DOWNLOAD tài liệu: Bấm chuột trái vào tài liệu, sau đó nhấn tổ hợp phím "CTRL + S".
 

amen_boy

Thanh Niên Xóm
Chào anh!
Anh giúp em làm bài này với. Em mới học NNHT mà thầy cho làm bài tập nhưng em không biết phải là thế nào.
Đề: Nhập số Hexa rồi chuyển chuỗi vừa nhập thành số nhị phân và loại bỏ số không vô ích. Nhập chữ hoa hay chữ thường điều được.Xử lý lỗi nếu kí tự nhập vào khác từ 0..9 và A..F thì báo lỗi và thoát.
Gợi ý: Ở đây ta xây dựng Buffer nhâp 1 chuỗi dài 32 kí tự hexa. Sử dụng Swicth case để chuyển, lấy kí tự đầu so sánh. Nếu là 1 thì 0001, nếu là 2 thì là 0010....
VD: Nhập: 19AD5E -> 000110011010110101011110
sau khi loại bỏ số không vô ích: 110011010110101011110
Nhờ anh giúp đỡ.huhu
 

administrator

Administrator
Staff member
Bạn học FITHOU không nhỉ? Nếu có lấy sách của thầy Đặng Thành Phu, mình nhớ có bài này. Còn mình môn này cũng kém, học xong cũng ko dùng đến. Giờ chả nhớ thêm đc gì
 

amen_boy

Thanh Niên Xóm
Nhờ làm bài tập cơ bản viết bằng code Assembly

Bạn học FITHOU không nhỉ? Nếu có lấy sách của thầy Đặng Thành Phu, mình nhớ có bài này. Còn mình môn này cũng kém, học xong cũng ko dùng đến. Giờ chả nhớ thêm đc gì

Không phải bạn ơi mình học trường khác. Nến bạn có bạn gửi cho mình tham khảo với. cảm ơn bạn nhiều lắm!:happy:
 

jindo9312

Thanh Niên Xóm
anh giúp em bài này với
Viết chương trình liên kết giữa ngôn ngữ C/C++ và
Assembly với sự phân công công việc như sau:
Ngôn ngữ C/C++:
- Nhập từ bàn phím một mảng n số nguyên.
- Gọi hàm tìm phần tử xuất hiện nhiều nhất trong mảng do assembly
viết (nếu có nhiều phần tử thỏa mãn thì chỉ cần hiện một phần tử
bất kỳ trong nhóm đó).
Ngôn ngữ ASM:
- Viết hàm tìm phần tử xuất hiện nhiều nhất trong mảng do C/C++
truyền qua.


Bài 2 đề 10 đó a
 
Bên trên