1. Trang chủ
  2. » Giáo án - Bài giảng

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

53 1,4K 7

Đ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

Thông tin cơ bản

Định dạng
Số trang 53
Dung lượng 702,16 KB

Nội dung

Đồ Á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

Trang 1

Đồ Án Lập Trình Hệ Thống Bài tập 1 và đáp án

(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

Đáp án:

;Nhap 1 ky tu dung int 21h ngat 7

;Luu ky tu vao bien

;Xuat ky tu vua nhap dung int 21h ngat 2

.model small

.stack 100h

.data

nhap db "Nhap ky tu: $"

xuat db 10,13,"Ky tu vua nhap: $";10,13 xuong dong

Trang 2

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

Đáp án:

;Nhap 1 ky tu dung int 21h ngat 7

;Khong luu ky tu vao bien

;Xuat ky tu vua nhap dung int 21h ngat 2

.model small

.stack 100h

.data

nhap db "Nhap ky tu: $"

xuat db 10,13,"Ky tu vua nhap: $"

Trang 3

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

nhap db "Nhap ky tu: $"

truoc db 10,13,"Ky tu truoc: $"

sau db 10,13,"Ky tu sau: $"

Trang 4

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 <tên_đã_nhập>

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

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 ra nhap:

lea dx,nhap mov ah,9 int 21h

;nhap chuoi ten:

mov ah, 10 lea dx,ten int 21h

;in ra xuat:

mov ah,9 lea dx,xuat int 21h

;in ra ten;

lea dx,ten+2 int 21h

;ket thuc chuong trinh:

mov ah, 4ch int 21h end

Trang 5

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!”

Đáp án:

xuat macro gd ;dinh nghia macro xuat xuat ra chuoi gd

lea dx,gd ;dx luu dia chi chuoi gd

mov ah,9 ;in chuoi co dia chi tai dx

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 ra gm

jmp thoat nhay2:

xuat ga ;in ra ga jmp thoat

Trang 6

nhay3: xuat ge ;in ra ge thoat: mov ah, 4ch int 21h

end

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

;in ra s:

lea dx,s mov ah,9 int 21h

;xuong dau dong:

mov ah,2 mov dl,10 int 21h mov dl,13 int 21h

;in ra cac ki tu tu al den 'z':

prin:

mov ah,2 mov dl,c ;in c int 21h

mov dl,' ' ;in khoang trong

Trang 7

int 21h inc c ;tang al cmp c,'z' ;so sanh c voi 'z' jna prin ;c<='z' thi quay lai in tiep mov ah, 4ch

int 21h end

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

Đáp án:

;Nhap chuoi khong dung 21h ngat 10

;In ra chuoi nhan duoc

;Dem va in ra so ki tu cua chuoi

;in ra 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

Trang 8

dec di ;dung!lui con 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 ra c mov dx,offset c mov ah,9 int 21h

;in ra 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 thanh 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 0

jnz chuyen ;neu chua bang thi quay lai

;sau do 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]

Trang 9

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 ra dem

mov ah,9 lea dx,dem int 21h ;ket thuc chuong trinh:

mov ah, 4ch int 21h end

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

Đáp án:

;Nhap chuoi bat ki

;Thay ki tu hoa bang ki tu thuong, in ra

;Thay ki tu thuong bang ki tu hoa, in ra

Trang 10

int 21h

;ham doi ki tu hoa thanh ki tu thuong:

lea si,s+2 ;si tro den phan tu dau tien cua s(bo qua 2 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' ;kiem tra xem co phai ki tu hoa khong

jb boqua1 ;

cmp [di],'Z' ;

ja boqua1 ;neu khong thi bo qua

add [di],32 ;neu phai thi doi thanh ki tu thuong

;ham doi ki tu thuong thanh ki tu hoa:

lea si,s+2 ;si tro den phan tu dau tien cua s(bo qua 2 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 thanh ki tu hoa

Trang 11

;Nhap 2 chuoi so s1, s2 roi chuyen thanh so N1,N2

;tinh tong N=N1+N2 roi chuyen N sang chuoi S

Trang 12

;chuyen chuoi S1 sang so N1:

lea di,s1+2 ;di tro den phan tu dau tien cua s1(bo qua 2 phan tu dau tien)

lap1:

mov ax,N1 ;ax=N1

mov bx,10 ;bx=10

mul bx ;nhan ax*bx tich luu vao dxax

;o day chi xet so word nen luon co dx=0

mov N1,ax ;N1=ax

mov bl,[di] ;luu ki tu s1[di] vao bl

sub bl,48 ;chuyen ki tu sang so bang cach -48

add N1,bx ;cong them bl vao N1, o day bl<10 nen bx=bl

inc di ;tang di

cmp [di],13 ;gap enter chua?

jnz lap1 ;neu chua tiep tuc lap1

;chuyen chuoi S2 sang so N2:

lea di,s2+2 ;di tro den phan tu dau tien cua s2(bo qua 2 phan tu dau tien)

lap2:

mov ax,N2 ;ax=N2

mov bx,10 ;bx=10

mul bx ;nhan ax*bx tich luu vao dxax

;o day chi xet so word nen luon co dx=0

mov N2,ax ;N2=ax

mov bl,[di] ;luu ki tu s2[di] vao bl

sub N2,48 ;chuyen ki tu sang so bang cach -48

add N2,bx ;cong them bl vao N2, o day bl<10 nen bx=bl

inc di ;tang di

cmp [di],13 ;gap enter chua?

jnz lap2 ;neu chua tiep tuc lap2

;N=N1+N2

mov ax,N1

Trang 13

add ax,N2

mov N,ax

;chuyen N sang chuoi tem theo chieu nguoc lai

lea si,tem ;si tro den dia chi cua tem

mov ax,N ;ax=N

chuyen:

mov dx,0 ;gan dxax=ax bang cach cho dx=0

mov bx,10 ;so chia bx=10

div bx ;thuc hien phep chia dxax/bx thuong luu vao ax

mov [si],dl ;luu so du dx vao tem[si]

;dao chuoi tem ta co chuoi S

lea di,s ;di tro toi phan tu dau tien cua s

dao:

dec si ;giam si

mov bl,[si] ;bl=tem[si]

mov [di],bl ;gan s[di]=bl

inc di ;tang di

cmp si,offset tem ;si tro den phan tu dau tien cua tem?

jnz dao ;neu chua tiep tuc thuc hien

Trang 14

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à

;Nhap 2 so nguyen duong A,B

;Khong dung lenh div,mul tinh va in ra ket qua A/B, A*B

Trang 15

int 21h

;chuyen chuoi x thanh so A:

lea di,x+2 ;di tro den phan tu dau tien cua x(bo qua 2 phan tu dau)

mov ax,0 ;khoi tao ax=0

lap1:

;nhan ax cho 10

mov cx,10 ;lap 10 lan

mov bx,ax ;bx=ax

mov ax,0 ;khoi tao ax=0

Ax10: ;

add ax,bx ;ax=ax+bx

loop Ax10 ;cx>0 thi tiep tuc lap1

mov bl,[di] ;luu ki tu x[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 ;cong bx vao ax

inc di ;di tro den phan tu tiep theo

;chuyen chuoi y thanh so B:

lea di,y+2 ;di tro den phan tu dau tien cua y(bo qua 2 phan tu dau)

mov ax,0 ;khoi tao ax=0

lap2:

;nhan ax cho 10

mov cx,10 ;lap 10 lan

mov bx,ax ;bx=ax

mov ax,0 ;khoi tao ax=0

Bx10: ;

add ax,bx ;ax=ax+bx

loop Bx10 ;cx>0 thi tiep tuc lap1

mov bl,[di] ;luu ki tu y[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 ;cong bx vao ax

inc di ;di tro den phan tu tiep theo

Trang 16

;Thuc hien A/B duoc thuong la C

mov C,0 ;khoi tao thuong C=0

mov ax,A ;ax=A

chia:

cmp ax,B ;so sanh ax voi B

jb thoat1 ;neu ax<B thi thoat1

sub ax,B ;neu khong tru ax di B

inc C ;tang C

jmp chia ;nhay den nhan chia

thoat1:

;Thuc hien A*B duoc tich la D

mov ax,0 ;khoi tao tich ax=0

mov cx,B ;cx=B, lap B lan

nhan:

add ax,A ;ax=ax+A

loop nhan ;cx>0 thi lap tiep

mov D,ax ;gan D=ax

;chuyen so C sang chuoi tem theo thu tu nguoc:

lea si,tem ;si tro den phan tu dau tien cua tem

mov ax,C ;ax=C

Cchia10: ;thuc hien phep chia ax/10

mov bx,0 ;thuong luu vao bx

mov [si],al ;luu so du ax vao tem[di]

;do ax<10 nen al=ax

add [si],48 ;chuyen so sang ki tu bang cach +48

mov ax,bx ;gan ax= thuong

inc si ;si tro den phan tu tiep theo cua tem

cmp ax,0 ;

jnz Cchia10 ;neu thuong >0 thuc hien lap tiep

;dao chuoi tem roi luu vao s1

lea di,s1 ;di tro den phan tu dau tien cua s1

dao1:

Trang 17

dec si ;si tro den phan tu lien truoc

mov bl,[si] ;bl=tem[si]

mov [di],bl ;s1[di]=bl

;chuyen so D sang chuoi tem theo thu tu nguoc

lea si,tem ;si tro den phan tu dau tien cua tem

mov ax,D ;ax=D

Dchia10: ;thuc hien phep chia ax/10

mov bx,0 ;thuong luu vao bx

mov [si],al ;luu so du ax vao tem[di]

;do ax<10 nen al=ax

add [si],48 ;chuyen so sang ki tu bang cach +48

mov ax,bx ;gan ax= thuong

inc si ;si tro den phan tu tiep theo cua tem

cmp ax,0 ;

jnz Dchia10 ;neu thuong >0 thuc hien lap tiep

;dao chuoi tem roi luu vao s2

lea di,s2 ;di tro den phan tu dau tien cua s2

dao2:

dec si ;si tro den phan tu lien truoc

mov bl,[si] ;bl=tem[si]

mov [di],bl ;s2[di]=bl

Trang 18

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

;Nhap 2 so nhi phan 16 bit A,B

;In ra ket qua o dang nhi phan A+B, A-B, A and B, A or B

Trang 19

;thuc hien A+B luu ket qua vao s1

;truoc tien sao chep chuoi y vao s1

lea si,y+2 ;si tro den dau chuoi y

lea di,s1 ;di tro den dau chuoi s1

mov cx,16 ;lap 16 lan

lea si,x+17 ;si tro den cuoi chuoi x

lea di,s1+15 ;di tro den cuoi chuoi s1

mov cx,16 ;lap 16 lan

mov bl,0 ;bl bien nho

sub al,48 ;al=bl+x[si]-48+s1[di]-48

;x[si]-48 de chuyen ki tu sang so

Trang 20

;s1[di]-48 de chuyen ki tu sang so

bang3: ;neu al=3

mov [di],'1' ;gan s1[di]=1

mov bl,1 ;va so du bl=1

jmp thoat1

bang2: ;neu al=2

mov [di],'0' ;gan s1[di]=0

mov bl,1 ;va so du bl=1

jmp thoat1

bang1: ;neu al=1

mov [di],'1' ;gan s1[di]=1

;thuc hien A-B luu ket qua vao s2

;truoc tien sao chep chuoi y vao s1

lea si,y+2 ;si tro den dau chuoi y

lea di,s2 ;di tro den dau chuoi s2

mov cx,16 ;lap 16 lan

lea si,x+17 ;si tro den cuoi chuoi x

lea di,s2+15 ;di tro den cuoi chuoi s2

mov cx,16 ;lap 16 lan

mov bl,0 ;bl bien nho

lap2:

mov al,[si] ;

add al,48 ;

Trang 21

bang49: ;neu al=49

mov [di],'1' ;gan s2[di]=1

mov bl,0 ;va so du bl=0

jmp thoat2

bang48: ;neu al=48

mov [di],'0' ;gan s2[di]=0

mov bl,0 ;va so du bl=0

jmp thoat2

bang47: ;neu al=47

mov [di],'1' ;gan s2[di]=1

;thuc hien A and B luu ket qua vao s3:

;truoc tien sao chep chuoi y vao s3

lea si,y+2 ;si tro den dau chuoi y

lea di,s3 ;di tro den dau chuoi s3

mov cx,16 ;lap 16 lan

;sau do lay x and s3

lea si,x+2 ;si tro den dau chuoi x

lea di,s3 ;di tro den dau chuoi s3

mov cx,16 ;lap 16 lan

lap3:

cmp [si],'0'

jz gan3

Trang 22

;thuc hien A or B luu ket qua vao s4:

;truoc tien sao chep chuoi y vao s4

lea si,y+2 ;si tro den dau chuoi y

lea di,s4 ;di tro den dau chuoi s4

mov cx,16 ;lap 16 lan

lea si,x+2 ;si tro den dau chuoi x

lea di,s4 ;di tro den dau chuoi s4

mov cx,16 ;lap 16 lan

Trang 23

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

;In ra ma ascii hex,thap phan,nhi phan

prin macro s ;macro in ra xau s

Trang 24

tb2 db 10,13,"Ma Ascii dang Dec:$"

tb3 db 10,13,"Ma Ascii dang Bin:$"

;chuyen ma ascii cua c sang hex luu vao s1:

;truoc tien chuyen sang xau tem voi thu tu nguoc lai

mov al,c ;al=c

lea si,tem ;si tro den phan tu dau tien cua tem

mov bl,16 ;so chia bl=16

lap1:

mov ah,0 ;gan ax=al bang cach cho ah=0

div bl ;ax/bl luu thuong vao al

mov [si],ah ;luu so du ah vao tem[si]

add [si],48 ;chuyen so thanh ki tu bang cach +48

cmp [si],'9' ;so sanh tem[si] voi '9'

ja he16 ;neu lon hon nhay den he16

cmp al,0 ;so sanh al voi 0

jnz lap1 ;al!=0 thi lap tiep

;sau do dao xau tem roi luu vao s1

lea di,s1 ;di tro den phan tu dau tien cua s1

dao1:

dec si ;giam si

mov bl,[si] ;bl=tem[si]

mov [di],bl ;s1[di]=bl

inc di ;tang di

Trang 25

cmp si,offset tem ;si tro den phan tu dau cua chuoi tem chua?

jnz dao1 ;neu chua thi quay lai dao1 tiep

;chuyen ma ascii cua c sang thap phan, luu vao s2

;truoc tien chuyen sang xau tem voi thu tu nguoc lai

mov al,c ;al=c

lea si,tem ;si tro den phan tu dau tien cua tem

mov bl,10 ;so chia bl=10

lap2:

mov ah,0 ;gan ax=al bang cach cho ah=0

div bl ;chia ax/bl luu thuong vao al

mov [si],ah ;luu so du vao tem[si]

add [si],48 ;chuyen so sang ki tu bang cach +48

inc si ;tang si

cmp al,0 ;

jnz lap2 ;al!=0 quay lai lap2

;sau do dao xau tem roi luu vao s2

lea di,s2 ;di tro den phan tu dau tien cua s2

dao2:

dec si ;giam si

mov bl,[si] ;bl=tem[si]

mov [di],bl ;s2[di]=bl

inc di ;tang di

cmp si,offset tem ;si tro ve dau chuoi tem chua?

jnz dao2 ;neu chua lap tiep

;chuyen ma ascci cua c sang nhi phan, luu vao s3

mov al,c ;al=c

lea di,s3+7 ;di tro den phan tu cuoi cung cua s3

mov bl,2 ;so chia bl=2

lap3:

mov ah,0 ;gan ax=al bang cach cho ah=0

div bl ;ax/bl

mov [di],ah ;luu so du ah vao s3[di]

add [di],48 ;chuyen so thanh ki tu bang cach +48

Trang 26

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

Đáp án

;Nhap 2 so A,B o dang hex

;Tinh va in ra ket qua o dang nhi phan 16 bit

;cac phep A+B, A-B, A and B, A or B

prin macro s ;macro prin in ra chuoi s

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

TỪ KHÓA LIÊN QUAN

w