Đồ Á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 22 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 33 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 44 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 6nhay3: 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 7int 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 8dec 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 9mov [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 10int 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 13add 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 1410 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 15int 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 17dec 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 1811 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 21bang49: ;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 2312 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 24tb2 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 25cmp 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 2613 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