Đáp án 20 bài tập lập trình hệ thống

53 1.3K 7
Đáp án 20 bài tập lập trình hệ thống

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

Đồ Án Lập Trình Hệ Thống Bài Tập 1 (Assembly) 1. Viết chương trình sử dụng hàm 7, ngắt 21h để nhận 1 ký tự từ bàn phím, dùng 1 biến để lưu trữ ký tự nhận được (do sinh viên tự đặt tên biến), sau đó sử dụng hàm 2, ngắt 21h để in ra màn hình ký tự nhận được đang lưu trong biến ấy. Chương trình phải có đủ các câu thông báo nhập và xuất. Ví dụ: Hay go 1 phim: B Ky tu nhan duoc la: B 2. Làm lại chương trình bài 1 sao cho không cần sử dụng biến để lưu trữ ký tự mà kết quả chạy chương trình vẫn không thay đổi. 3. Viết chương trình nhận 1 ký tự từ bàn phím, sau đó in ra màn hình ký tự kế trước và kế sau của ký tự vừa nhập Ví dụ: Hay go 1 phim: B Ky tu ke truoc : A Ky tu ke sau : C 4. Viết chương trình cho phép nhập từ bàn phím tên của 1 người, sao đó in ra màn hình chuỗi có dạng như sau: Xin chao Ví dụ: Khi chạy chương trình, nhập vào là: Nguyen Van A Chuỗi in ra màn hình sẽ là: Xin chao Nguyen Van A 5. Viết chương trình cho nhập 1 ký tự từ màn hình và xuất câu thông báo tương ứng sau: - Nếu ký tự nhập là ‘S’ hay ‘s’ thì in ra “Good morning!” - Nếu ký tự nhập là ‘T’ hay ‘t’ thì in ra “Good Afternoon!” - Nếu ký tự nhập là ‘C’ hay ‘c’ thì in ra “Good everning!” 6. Viết chương trình nhập từ bàn phím 1 ký tự thường. Sau đó in ra màn hình lần lượt các ký tự từ ký tự nhận được đến ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''z'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' sao cho giữa các ký tự có 1 khoảng trống. 7. Không dùng hàm 0Ah/21h, hãy dùng lệnh lặp để viết chương trình nhập vào 1 chuỗi ký tự. Sau khi nhập xong đếm xem chuỗi có bao nhiêu ký tự. In ra màn hình chuỗi nhận được và số ký tự có trong chuỗi. Ví dụ: S = "Hello world !" ==> Số kí tự trong chuỗi là 13. 8. Viết chương trình cho phép nhập vào một chuỗi bất kỳ. Sau đó: - Đổi tất cả ký tự thường thành ký tự hoa và in ra màn hình. - Đổi tất cả ký tự hoa thành ký tự thường và in ra màn hình. Ví dụ: S = ‘weLcOme To AssEmblY’ In ra: welcome to assembly - WELCOME TO ASSEMBLY 9. Nhập vào 2 chuỗi số, đổi 2 chuỗi thành số, sau đó cộng hai số, đổi ra chuỗi và xuất chuỗi tổng. Ví dụ: S1 = "123" => N1 = 123 S2 = "456" => N2 = 456 N = N1 + N2 = 123 + 456 = 579 => S = "579" (xuất S ra màn hình) 10. Nhập 2 số nguyên dương A, B. Tính A/B, A*B (không dùng lệnh DIV, MUL) và in ra màn hình kết quả. Ví dụ: A=18, B=3 Tính A/B: 18 - 3 - 3 - 3 - 3 - 3 - 3 = 0, vậy A/B = 6 (tổng trừ B cho đến khi A = 0). Tính A*B = 18 + 18 + 18 = 54 11. Viết chương trình nhập 2 số nhị phân 16 bit A và B. Sau đó in ra màn hình các kết quả ở dạng nhị phân: A + B, A – B, A and B, A or B. Ví dụ: Nhập số nhị phân A: 10101010 Nhập số nhị phân B: 01010101 A + B = 11111111 A – B = 01010101 A and B = 00000000 A or B = 11111111 12. Viết chương trình nhập 1 ký tự từ bàn phím, sau đó in ra màn hình mã ASCII của ký tự nhận được ở dạng thập lục phân, thập phân và nhị phân. Ví dụ: Nhập 1 ký tự: A Mã ASCII dạng Hex: 41h Mã ASCII dạng Dec: 65 Mã ASCII dạng Bin: 01000001b 13. Viết lại chương trình bài 11 nhưng 2 số A và B được nhập theo dạng thập lục phân. Các kết quả được in ra màn hình ở dạng nhị phân. 14. Viết lại chương trình bài 11 nhưng 2 số A và B được nhập theo dạng thập phân. In các kết quả ở dạng thập phân: A + B, A – B. 15. Viết chương trình tính giai thừa n! Với n là số nguyên dương nhập từ bàn phím. In kết quả ra màn hình ở dạng thập phân. Cho biết, khả năng của 8086 tính được n lớn nhất là bao nhiêu? 16. Viết chương trình tính ước số chung lớn nhất của 2 số a và b! Với a, b là số nguyên dương nhập từ bàn phím. In kết quả ra màn hình ở dạng thập phân. 17. Viết chương trình nhập 1 chuỗi ký tự. In chuổi dã nhập theo thứ tự ngược. Chương trình có dạng. Nhập ký tự: abcdef Chuổi ngược: fedcba 18. Nhập vào một dãy số, tính trung bình cộng của dãy số đó. Nhập vào dãy số: 1 3 5 6 8 Trung bình cộng: (1+3+5+6+8)/5 = 4 19. Nhập vào một số, tính tổng các chữ số của một số Nhập vào số: 1234 Tổng các chữ số: 10 20. Nhập vào n, kiểm tra n có phải là số hoàn hảo. Số hoàn hảo là số có tổng các ước số tự nhiên không kể chính nó bằng nó Ví dụ: 6 = 1 + 2 + 3 => 6 là số hoàn hảo

Trần Văn Dương (sưu tầm) – Trường ĐH Bách Khoa Đà Nẳng Đồ Án Lập Trình Hệ Thống Bài tập đáp án (Assembly) Viết chương trình sử dụng hàm 7, ngắt 21h để nhận ký tự từ bàn phím, dùng biến để lưu trữ ký tự nhận (do sinh viên tự đặt tên biến), sau sử dụng hàm ngắt 21h để in hình ký tự nhận lưu biến Chương trình phải có đủ câu thơng báo nhập xuất Ví dụ: Hay go phim: B Ky tu nhan duoc la: B Đáp án: ;Nhap ky tu dung int 21h ngat ;Luu ky tu vao bien ;Xuat ky tu vua nhap dung int 21h ngat model small stack 100h data nhap db "Nhap ky tu: $" xuat db 10,13,"Ky tu vua nhap: $";10,13 xuong dong c db ? code mov ax,@data mov ds,ax ;in chuoi nhap lea dx,nhap mov ah,9;9 xuat xau ki tu int 21h ;nhap ki tu mov ah,7;7 nhap xau int 21h ;luu ki tu vao c mov c,al ;in chuoi xuat lea dx,xuat mov ah,9 int 21h ;in ki tu c mov ah,2;2 xuat ki tu mov dl,c int 21h mov ah, 4ch int 21h end Trần Văn Dương (sưu tầm) – Trường ĐH Bách Khoa Đà Nẳng Làm lại chương trình cho không cần sử dụng biến để lưu trữ ký tự mà kết chạy chương trình không thay đổi Đáp án: ;Nhap ky tu dung int 21h ngat ;Khong luu ky tu vao bien ;Xuat ky tu vua nhap dung int 21h ngat model small stack 100h data nhap db "Nhap ky tu: $" xuat db 10,13,"Ky tu vua nhap: $" code ;khoi tao ds mov ax,@data mov ds,ax ;in chuoi nhap lea dx,nhap mov ah,9 int 21h ;nhap ki tu mov ah,7 int 21h ;luu ki tu vao bl mov bl,al ;in xuat lea dx,xuat mov ah,9 int 21h ;in ki tu mov ah,2 mov dl,bl int 21h ;thoat chuong trinh: mov ah, 4ch int 21h end Trần Văn Dương (sưu tầm) – Trường ĐH Bách Khoa Đà Nẳng Viết chương trình nhận ký tự từ bàn phím, sau in hình ký tự kế trước kế sau ký tự vừa nhập Ví dụ: Hay go phim: B Ky tu ke truoc : A Ky tu ke sau : C Đáp án: ;Nhap ky tu ;Xuat ky tu vua truoc, sau ky tu vua nhap model small stack 100h data nhap db "Nhap ky tu: $" truoc db 10,13,"Ky tu truoc: $" sau db 10,13,"Ky tu sau: $" c db ? code ;khoi tao ds mov ax,@data mov ds,ax ;in nhap lea dx,nhap mov ah,9 int 21h ;nhap ki tu mov ah,1 int 21h mov c,al; luu ki tu vao c ;in truoc lea dx,truoc mov ah,9 int 21h dec c; giam c di mov ah,2 mov dl,c int 21h add c,2; tang c them lea dx,sau mov ah,9 int 21h mov ah,2;in c mov dl,c int 21h mov ah, 4ch int 21h end Trần Văn Dương (sưu tầm) – Trường ĐH Bách Khoa Đà Nẳng Viết chương trình cho phép nhập từ bàn phím tên người, in hình chuỗi có dạng sau: Xin chao Ví dụ: Khi chạy chương trình, nhập vào là: Nguyen Van A Chuỗi in hình là: Xin chao Nguyen Van A Đáp án ;Nhap chuoi ;Xuat "Xin chao"+chuoi model small stack 100h data nhap db "Nhap ten: $" xuat db 10,13,"Xin chao $" ten db 80,0,80 dup("$") code ;khoi tao ds: mov ax,@data mov ds,ax ;in nhap: lea dx,nhap mov ah,9 int 21h ;nhap chuoi ten: mov ah, 10 lea dx,ten int 21h ;in xuat: mov ah,9 lea dx,xuat int 21h ;in ten; lea dx,ten+2 int 21h ;ket thuc chuong trinh: mov ah, 4ch int 21h end Trần Văn Dương (sưu tầm) – Trường ĐH Bách Khoa Đà Nẳng Viết chương trình cho nhập ký tự từ hình xuất câu thơng báo tương ứng sau: - Nếu ký tự nhập „S‟ hay „s‟ in “Good morning!” - Nếu ký tự nhập „T‟ hay „t‟ in “Good Afternoon!” - Nếu ký tự nhập „C‟ hay „c‟ in “Good everning!” Đáp án: xuat macro gd ;dinh nghia macro xuat xuat chuoi gd lea dx,gd ;dx luu dia chi chuoi gd mov ah,9 ;in chuoi co dia chi tai dx int 21h endm ;ket thuc macro model small stack 100h data c db 'a' nhap db "Nhap ki tu: $" gm db 10,13,"Good morning!$" ga db 10,13,"Good Afternoon!$" ge db 10,13,"Good evening!$" code mov ax,@data mov ds,ax lea dx,nhap mov ah,9 int 21h mov ah, int 21h mov c,al cmp c,'S' jz nhay1 cmp c,'s' jz nhay1 cmp c,'T' jz nhay2 cmp c,'t' jz nhay2 cmp c,'C' jz nhay3 cmp c,'c' jz nhay3 jmp thoat ;nhay toi thoat nhay1: xuat gm ;in gm jmp thoat nhay2: xuat ga ;in ga jmp thoat Trần Văn Dương (sưu tầm) – Trường ĐH Bách Khoa Đà Nẳng nhay3: xuat ge ;in ge thoat: mov ah, 4ch int 21h end Viết chương trình nhập từ bàn phím ký tự thường Sau in hình ký tự từ ký tự nhận đến 'z' cho ký tự có khoảng trống Đáp án: ;Nhap ki tu thuong ;In cac ki tu cho den 'z', cac ki tu cach khang model small stack 100h data s db 10,13,"Nhap ki tu thuong: $" c db ? code ;khoi tao ds: mov ax,@data mov ds,ax nhap: ;in s: lea dx,s mov ah,9 int 21h ;nhap ki tu: mov ah, ;tu dong luu ki tu vua nhap vao al int 21h ; ;kiem tra ki tu thuong hay khong: cmp al,'a' jb nhap ;neu al'z' nhap lai ;luu ki tu vao c mov c,al ;xuong dau dong: mov ah,2 mov dl,10 int 21h mov dl,13 int 21h ;in cac ki tu tu al den 'z': prin: mov ah,2 mov dl,c ;in c int 21h mov dl,' ' ;in khoang Trần Văn Dương (sưu tầm) – Trường ĐH Bách Khoa Đà Nẳng int 21h inc c ;tang al cmp c,'z' ;so sanh c voi 'z' jna prin ;c Số kí tự chuỗi 13 Đáp án: ;Nhap chuoi khong dung 21h ngat 10 ;In chuoi nhan duoc ;Dem va in so ki tu cua chuoi model small stack 100h data s db "Nhap chuoi: $" x db "==>So ki tu chuoi la $" c db 100 dup ("$") tem db "$$$$" dem db "$$$$" code ;khoi tao ds va es mov ax,@data mov ds,ax mov es,ax ;in s lea dx,s mov ah,9 int 21h ;nhap lan lan cac ki tu lea di,c ;di tro den dia chi cua c xor bx,bx ;dem so ki tu chuoi, ban dau =0 mov ah,1 int 21h nhap: cmp al,13 ;enter? jz thoat ;dung!thoat cmp al,8 ;backspace? jnz luu ;khong!luu ki tu vao chuoi Trần Văn Dương (sưu tầm) – Trường ĐH Bách Khoa Đà Nẳng dec di ;dung!lui tro chuoi dec bx ;giam bo dem so ki tu jmp doc ;doc ki tu khac luu: mov [di],al inc di inc bx doc: int 21h jmp nhap thoat: mov [di],'$' ;xuong dong: mov ah,2 mov dl,10 int 21h ;in c mov dx,offset c mov ah,9 int 21h ;in x mov dx,offset x int 21h ;ham convert bx sang chuoi dem: ;truoc tien convert bx sang chuoi tem voi thu tu nguoc lea di,tem ;di tro den phan tu dau tien cua tem mov ax,bx ;gan ax=bx chuyen: mov bl,10 ;so chia bl=10 div bl ;chia ax/bl thuong luu vao al mov [di],ah ;gan so du ah cho tem[di] add [di],48 ;chuyen so ki tu bang cach +48 inc di ;tang di mov ah,0 ;gan ax=al bang cach cho ah=0 cmp al,0 ;so sanh thuong al voi jnz chuyen ;neu chua bang thi quay lai ;sau dao nguoc chuoi tem,luu vao dem lea si,dem ;si tro den phan tu dau tien cua dem dao: dec di ;giam di mov bl,[di] ;bl=tem[di] Trần Văn Dương (sưu tầm) – Trường ĐH Bách Khoa Đà Nẳng mov [si],bl ;dem[si]=bl inc si ;tang si cmp di,offset tem ;di tro den phan tu dau tien cua tem chua? jnz dao ;neu chua thi tiep tuc dao ;in dem mov ah,9 lea dx,dem int 21h ;ket thuc chuong trinh: mov ah, 4ch int 21h end Viết chương trình cho phép nhập vào chuỗi Sau đó: - Đổi tất ký tự thường thành ký tự hoa in hình - Đổi tất ký tự hoa thành ký tự thường in hình Ví dụ: S = „weLcOme To AssEmblY‟ In ra: welcome to assembly - WELCOME TO ASSEMBLY Đáp án: ;Nhap chuoi bat ki ;Thay ki tu hoa bang ki tu thuong, in ;Thay ki tu thuong bang ki tu hoa, in model small stack 100h data tb db "Nhap chuoi: $" s db 100,0,100 dup ("$") s1 db 100 dup ("$") s2 db 100 dup ("$") x1 db 10,13,'$' x2 db " - $" code ;khoi tao ds va es mov ax,@data mov ds,ax mov es,ax ;in chuoi tb lea dx,tb mov ah,9 int 21h ;nhap chuoi s lea dx,s mov ah,10 Trần Văn Dương (sưu tầm) – Trường ĐH Bách Khoa Đà Nẳng int 21h ;ham doi ki tu hoa ki tu thuong: lea si,s+2 ;si tro den phan tu dau tien cua s(bo qua phan tu dau tien) lea di,s1 ;di tro den phan tu dau tien cua s1 lap1: mov bl,[si] ;gan s1[i]=bl mov [di],bl ;s[i]=bl cmp [di],'A' jb boqua1 cmp [di],'Z' ja boqua1 add [di],32 boqua1: inc di inc si ;kiem tra xem co phai ki tu hoa khong ; ; ;neu khong thi bo qua ;neu phai thi doi ki tu thuong ;tang tro phan tu moi chuoi ; cmp [si],13 ;neu chua gap enter thi lap jnz lap1 ; ;ham doi ki tu thuong ki tu hoa: lea si,s+2 ;si tro den phan tu dau tien cua s(bo qua phan tu dau tien) lea di,s2 ;di tro den phan tu dau tien cua s2 lap2: mov bl,[si] ;gan s2[i]=bl mov [di],bl ;s[i]=bl cmp [di],'a' ;kiem tra xem co phai ki tu thuong khong jb boqua2 ; cmp [di],'z' ; ja boqua2 ;neu khong thi bo qua sub [di],32 ;neu phai thi doi ki tu hoa boqua2: inc di inc si ;tang tro phan tu moi chuoi ; cmp [si],13 ;neu chua gap enter thi lap jnz lap2 ; ;in chuoi ki tu thuong: mov ah,9 lea dx,x1 int 21h Trần Văn Dương (sưu tầm) – Trường ĐH Bách Khoa Đà Nẳng 15 Viết chương trình tính giai thừa n! Với n số nguyên dương nhập từ bàn phím In kết hình dạng thập phân Cho biết, khả 8086 tính n lớn bao nhiêu? Đáp án: ;tinh giai thua n! n>0 model large stack 100h data tb db "Nhap so nguyen duong n:$" n_str db 6,0,6 dup ("$") ngt_str db 1000 dup("$") nho dw diachi dw du dw muoi dw 10 muoiba dw 13 ngt db 1,999 dup (13) ;mang luu cac chu so cua n! theo thu tu nguoc tem db 1000 dup (13) ;mang tam luu gia tri cua ngt tb1 db 10,13,"n!=$" kl db 10,13,"Tren LY THUYET,vi dung mang de thuc hien phep nhan" kl1 db 10,13,"nen co the tinh giai thua cua so nguyen duong n bat ki!$" code ;khoi tao ds va es mov ax,@data mov ds,ax mov es,ax ;in tb mov ah,9 lea dx,tb int 21h ;nhap n_str mov ah,10 lea dx,n_str int 21h ;chuyen chuoi n_str sang so n va luu vao cx: lea di,n_str+2 ;di tro den phan tu dau tien cua n_str mov ax,0 ;khoi tao ax=0 chuyen: mul muoi ;ax*10,luu tich vao dxax ;chi xet n word nen luon co dx=0 mov bl,[di] ;luu ki tu n_str[di] vao bl sub bl,48 ;chuyen ki tu sang so bang cach -48 mov bh,0 ;gan bx=bl bang cach cho bh=0 add ax,bx ;ax=ax+bx inc di ;tang di Trần Văn Dương (sưu tầm) – Trường ĐH Bách Khoa Đà Nẳng cmp [di],13 jnz chuyen mov cx,ax ;gap ki tu cret(co ma ascii=13)? ;neu chua thi quay lai chuyen ;tinh n! mov ax,1 ;ax=1 while: mov bx,ax cmp cx,1 ja hon1 jmp endwhile ;cx

Ngày đăng: 15/12/2018, 00:06

Từ khóa liên quan

Tài liệu cùng người dùng

Tài liệu liên quan