nghthien Tri Phủ
Tổng số bài gửi : 61 Experience : 86 Danh Vọng : 4
| Tiêu đề: Bài Hợp Ngữ Tuần 7-F109 Tue Mar 01, 2011 11:17 am | |
| Bài tập hợp ngữ tuần 7 chuyên về chuyển đổi số thập phân, thập lục, nhị phân. Bài 01: Chuyển đổi một chuỗi bit nhị phân thành số trong hệ thập phân.
Thuật giải: Nhập vào 1 chuỗi nhị phân, nhân các số nhị phân với mũ 2 tương ứng rồi cộng kết quả lại. - Code:
-
.model small .stack .data mess1 db 13,10, "Nhap vao 1 chuoi nhi phan: $" mess2 db 13,10, "So thap phan: $" messkt db 13,10, "Nhan 1 phim de ket thuc...!$" .code mov dx,seg mess1 mov ds,dx ;thong bao nhap N1: mov ah,9 lea dx,mess1 int 21h mov bx,0 ;xoa bit mov cx,0 ;xoa bit Nhap: mov ah,1 int 21h cmp al,13 ;kiem tra al=13 je kt cmp al,30h jb N1 cmp al,31h ja N1 sub al,30h mov bl,al push bx inc cx jmp Nhap kt: ;thong bao xuat mov ah,9 lea dx,mess2 int 21h ;Doi tu he 2 sang he 10 mov bx,0 mov si,0 Doi: pop dx cmp dx,0 je tiep ;neu dx=0 thi khong cong them call laymu ;goi ham lay mu add bx,ax tiep: inc si loop Doi mov ax,bx call xuatax ;goi ham xuatax ;thong bao ket thuc mov ah,9 lea dx,messkt int 21h mov ah,1 int 21h mov ah,4ch int 21h xuatax proc pop si mov bx,10 mov cx,0 chia: mov dx,0 div bx ;chia ax cho bx <=>ax=ax/bx, so du dat o dx push dx inc cx cmp ax,0 ;kiem ax>0 thi tiep tuc chia ja chia mov ah,2 xuatkqax: pop dx add dl,30h int 21h loop xuatkqax push si ret endp xuatax laymu proc mov ax,1 cmp si,0 ;kiem tra si=0 <=> tinh mu~=0 => tra ve ax=1 je s mov ax,2 ;kiem tra si=1 <=> tinh mu~=1 => tra ve ax=2 cmp si,1 je s push cx ;gan cx=dia chi lenh ke tiep mov cx,si dec cx nhanmu: ;vong lap tinh so mu~ mov dx,2 mul dx loop nhanmu pop cx ;dua dia chi lenh ke tiep vao stack s: ret laymu endp end
Bài 02: Chuyển đổi một số nguyên (1 chữ số) trong hệ thập phân sang hệ nhị phân
Thuật giải: Nhập vào 1 số thập phân, chia số đó cho 2, lưu phần dữ vào stack, thương tiếp tục chia, chia cho đến, sau đó giá trị trong stack rồi in ra - Code:
-
.model small .stack .data mess1 db 13,10, "Nhap vao 1 so thap phan(1 chu so): $" mess2 db 13,10, "So nhi phan: $" messkt db 13,10, "Nhan 1 phim de ket thuc...!$" .code mov dx,seg mess1 mov ds,dx ;thong bao nhap N1: mov ah,9 lea dx,mess1 int 21h mov bx,0 ;xoa bit mov cx,0 ;xoa bit Nhap: mov ah,1 int 21h cmp al,30h jb N1 cmp al,39h ja N1 sub al,30h mov bl,al ;thong bao xuat mov ah,9 lea dx,mess2 int 21h mov cx,2 mov ax,bx ;Doi tu he 10 sang he 2 mov si,0 Doi: mov dx,0 div cx ;chia ax cho cx<=>ax=ax/cx, so du dat o dx push dx ;dua dx vao stack inc si cmp ax,0 ja Doi mov cx,si ;xuat so he 2 mov ah,2 Xuat: pop bx add bx,30h mov dx,bx int 21h inc si loop Xuat
;thong bao ket thuc mov ah,9 lea dx,messkt int 21h mov ah,1 int 21h mov ah,4ch int 21h
end
Bài ở trên là đổi có 1 chữ số, Bài dưới là đổi nhiều chữ số. Tại em thấy trong phần nộp bài thầy ghi đổi 1 chữ số à, nên mới post 2 phần. - Code:
-
.model small .stack .data mess1 db 13,10, "Nhap vao 1 so thap phan: $" mess2 db 13,10, "So nhi phan: $" messkt db 13,10, "Nhan 1 phim de ket thuc...!$" .code mov dx,seg mess1 mov ds,dx ;thong bao nhap N1: mov ah,9 lea dx,mess1 int 21h mov bx,0 ;xoa bit mov cx,0 ;xoa bit Nhap: mov ah,1 int 21h cmp al,13 ;kiem tra nhap phim enter je kt cmp al,30h jb N1 cmp al,39h ja N1 sub al,30h mov cl,al mov ax,bx mov dx,10 mul dx ;nhan bx cho ax<=>ax=ax*dx add ax,cx ;cong them so moi vao mov bx,ax jmp Nhap kt: ;thong bao xuat mov ah,9 lea dx,mess2 int 21h mov cx,2 mov ax,bx ;Doi tu he 10 sang he 2 mov si,0 Doi: mov dx,0 div cx ;chia ax cho cx<=>ax=ax/cx, cx=2, so du dat o dx push dx ;dua dx vao stack inc si cmp ax,0 ja Doi mov cx,si ;xuat so he 2 mov ah,2 Xuat: pop bx add bx,30h mov dx,bx int 21h inc si loop Xuat
;thong bao ket thuc mov ah,9 lea dx,messkt int 21h mov ah,1 int 21h mov ah,4ch int 21h
end
Em thấy trong link nộp bài của thầy có để "Nộp bài tập 6 (F109)", nên post bài 6 luôn. Bài 06: Đổi 1 chuỗi bit nhị phân sang thập lục phân
Thuật giải: Phần nhị chuyễn đổi sang thập lục thi ngắt mỗi 4 số sẽ ra 1 số thập phân, nếu chuỗi số không chi hết cho 4 thi ngắt từ phải qua trái, cho đến chuỗi cuối. Ví dụ : 10101100=AC, chi tiết: 1010=A,1100=C. 10100011011=51B, chi tiết: 101=5,0001=1,1011=B - Code:
-
.model small .stack .data mess1 db 13,10, "Nhap vao 1 chuoi nhi phan: $" mess2 db 13,10, "So thap luc phan: $" messkt db 13,10, "Nhan 1 phim de ket thuc...!$" mangtl dw ? .code mov dx,seg mess1 mov ds,dx ;thong bao nhap N1: mov ah,9 lea dx,mess1 int 21h mov bx,0 ;xoa bit mov cx,0 ;xoa bit Nhap: mov ah,1 int 21h cmp al,13 ;kiem tra al=13 je kt cmp al,30h jb N1 cmp al,31h ja N1 sub al,30h mov bl,al push bx ;dua bx vao stack inc cx jmp Nhap kt: ;thong bao xuat mov ah,9 lea dx,mess2 int 21h ;Doi tu he 2 sang he sang tung so he 10 mov bx,0 mov si,0 mov di,0 Doi: pop dx ;lay gia tri trong stack ra gan = dx cmp dx,0 je tiep call laymu ;goi ham laymu add bx,ax tiep: inc si cmp si,4 ;kiem tra xem da du 4 so chua jb tiep2 mov si,0 cmp bx,10 ;kiem tra bx=10 jb so add bl,7 ;cong bx them 7 vi khi xuat ra ky tu ;chu hoa cach chu so 17 don vi so: add bl,30h mov mangtl[di],bx ;luu gia tri vao mang inc di mov bx,0 ;gan bx=0 bat dau tinh lai tiep2: loop Doi cmp si,0 ;kiem tra si=0 je ktdoi ;neu si=0 tuc la mang bit nhi phan chia het cho 4 ;neu chia het cho 4 thi ket thuc ;neu khong chia het cho 4 tuc la so cuoi chua duoc ;luu vao mangtl cmp bx,10 ;tiep tuc tinh so cuoi jb socuoi add bl,7 socuoi: add bl,30h mov mangtl[di],bx ;luu gia tri vao mang inc di mov bx,0 ktdoi: mov cx,di mov ah,2 xuattl: ;xuat so thap luc phan dec di ;giam di 1 don vi mov dx,mangtl[di] ;gan dl=mangtl[di] de in int 21h loop xuattl ;thong bao ket thuc mov ah,9 lea dx,messkt int 21h mov ah,1 int 21h mov ah,4ch int 21h laymu proc mov ax,1 ;gan ax=1 cmp si,0 ;kiem tra so mu~, neu si=0 thi tra ve ax=1 vi so mu si=0 je s mov ax,2 ;gan ax=1 cmp si,1 ;kiem tra so mu~, si=1 <=> ax^1=2 je s push cx ;gan cx=dia chi lenh ke tiep mov cx,si ;gan cx=si de tinh so mu dec cx nhanmu: ;vong lap tinh mu~ 2 mov dx,2 mul dx loop nhanmu pop cx ;dua dia chi lenh ke tiep vao stack s: ret ;ket thuc thu tuc laymu endp end
|
|