Báo cáo thực hành lab5 vi xử lý vi điều khiển UIT

11 23 0
Báo cáo thực hành lab5 vi xử lý  vi điều khiển UIT

Đ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

báo cáo chi tiết thực hành lab 5 vi xử lý vi điều khiển ( cộng trừ hai số 32 bit nhập xuất ở dạng nhị phân trên emu8086) của trường đại học công nghệ thông tin đại học quốc gia thành phố Hồ Chí Minh đính kèm theo link google drive

PRACTICE EXERCISES OF THE MICROPROCESSORS & MICROCONTROLLERS Instructor: The Tung Than Student's name:Banh Tri Kiet Student code: 21522251 PRACTICE REPORT NO I Content II III Content Exercises IV References Code Giải thích model small stack 100h data Data khai báo biến Nhap1 db 'Nhap so thu nhat: $' Nhap2 db 'Nhap so thu hai: $' XuatTran db 'So da bi tran $' XuatTong db 'Tong hai so la: $' XuatHieu db 'Hieu hai so la: $' XuatAm db 'Ket qua bi am $' NumXL1 dd ? NumXL2 dd ? num1 dd ? Các số có dạng num2 dd ? Số thứ (num1(16bitcao),num2(16bitthap)) num3 dd ? Số thứ hai (num3(16bitcao),num4(16bitthap)) num4 dd ? sum1 dd ? sum2 dd ? tru1 dd ? tru2 dd ? CLRF db 13, 10, '$' Chứa ký tự xuống dòng code main proc mov ax, @data Hàm main Nạp data mov ds, ax mov ah, Hiển thị "Nhap so thu nhat = " lea dx, Nhap1 int 21h call inputBina Gọi hàm để nhập số thứ mov ah, Xuống dòng lea dx, CLRF int 21h call SoThuNhat Xử lý số vừa nhập mov ah, Hiển thị ‘Nhap so thu hai: ‘ lea dx, Nhap2 int 21h call inputBina Nhập số thứ hai call SoThuHai Gọi hàm xử lý số thứ hai mov ah, Xuống dòng lea dx, CLRF int 21h mov ah, Hiển thị ‘Tổng hai số’ lea dx, XuatTong int 21h call Sum Gọi hàm tính tổng mov ah, Xuống dòng lea dx, CLRF int 21h call outputBina Gọi hàm xuất tổng mov ah, Xuống dòng lea dx, CLRF int 21h mov ah, Hiển thị ‘Hieu hai so: ‘ lea dx, XuatHieu int 21h Xuống dòng mov ah, lea dx, CLRF int 21h call Tru Gọi hàm tính hiệu call outputTru Xuất hiệu main endp Kết thúc hàm main inputBina proc Hàm nhập batdau: mov ah, Nhập số int 21h mov bx,0 mov dx,0 mov cx,0 tieptuc: cmp al, '0' jnge KhongDung Kiểm tra số vừa nhập xem có khác nhảy đến hàm khơng cmp al, '1' jnle KhongDung add dx,1 Tăng dx để đếm số lần nhập and ax, 000fh Chuyển ax từ chuỗi thành số SHL bx,1 Dịch trái bx (bx chứa 16 bit cao) pushf Lưu lại cờ dịch add bx,ax Gán trọng số vừa nhập vào số thấp bx popf Lấy lại cờ JNO Next Kiểm tra xem có tràn số bx không ( tức bx chứa đủ 16bit chưa) mov ax,0 Nếu chưa tràn tiếp tục nhập đủ nhảy đến hàm check reset ax jmp check ret Xử lý nhập số lớn 16 bit Hàm để xử lý số 16 bit haiso: Kiểm tra số vừa nhập xem có khác hay khơng cmp al, '0' jnge KhongDung cmp al, '1' jnle KhongDung and ax, 000fh Đổi kí tự vừa nhập thành số check: Dịch trái cx ( cx chứa 16 bit thấp) SHL cx,1 Cộng giá trị vừa nhập vào cx add cx,ax mov ah, Nhập ký tự int 21h Tăng giá trị dx lên add dx,1 cmp al, 13 ; da enter chua? Kiểm tra phím nhấn phải nút enter khơng Nếu khơng xử lý tiếp jne haiso sub dx,1 mov NumXL2,dx ret Nếu phải trừ dx ( enter khơng tính ) Lưu số lượng số nhập vào NumXL2 Next: Xử lý nhập 16 bit cao mov ah, Kiểm tra vừa nhập phải enter int 21h cmp al, 13 ; da enter chua? jne tiepTuc Khơng tiếp tục sub dx,1 Phải trù dx mov NumXL2,dx Lưu độ dài số NUMXL2 ret KhongDung: mov ah, Nếu nhập sai định dạng Thì nhập lại từ đầu mov dl, 0dh int 21h mov dl, 0ah int 21 jmp batdau inputBina endp Kết thúc hàm nhập SoThuNhat proc Hàm xử lý số thứ (Vì nhập x bit hàm nhập lưu số dạng 16 bit cao x-16 bit thấp nên t cần đưa lại x-16 bit cao 16 bit thấp) MOV num2,cx Lưu bit thấp vào num2 MOV NumXL1,bx Lưu 16 bit cao vào num XL1 cmp NumXL2,16 Kiểm tra số vừa nhập có lớn 16 bit hay khơng JLE Nếu khơng lớn nhảy tới hàm sub NumXL2,16 Khơng trừ numxl2 cho 16 again1: cmp NumXL2,0 So sánh numxl2 chưa JNE Dichbit1 Nếu chưa dịch bit add num2,bx Nếu cộng bx vào num kết thúc ret Dichbit1: ROL bx,1 Dịch trái bx với biến cờ nhớ JC setbit1 Nếu cờ nhảy tới setbit1 tiếp tục and bx,0FFFEh Cho bit có trọng số thấp bx =0 SHL num1,1 Dịch trái num1 sub NumXL2,1 Giảm biến đếm số lần lặp jmp again1 Lặp tiếp setbit1: Hàm setbit1 and bx,0FFFEh Cho trọng số thấp bx SHL num1,1 Dịch trái num1 cộng thêm add num1,1 sub NumXL2,1 Giảm biến đếm jmp again1 Lặp lại do: Nếu trừ bị âm numxl2=0 mov NumXL2,0 Nhảy vào vòng lặp jmp again1 SoThuNhat endp Kết thúc hàm xử lý ;ham so thu hai Giải thích hàm xử lý tổng quát: Ta đếm xem số bit ghi chứa bit thấp bit Sau ta dịch số bit cao số lần tương ứng lấy số dư sau lần dịch vào số bit cao(num1) Sau dịch đủ số lần ta cộng kết số bit cao (bx) vào cx ta 16 bit thấp x-16 bit cao SoThuHai proc MOV num4,cx MOV NumXL1,bx cmp NumXL2,16 JLE do2 sub NumXL2,16 again2: cmp NumXL2,0 JNE Dichbit2 add num4,bx Hàm xử lý số thứ tương tự xử lý số thứ ret Dichbit2: SHR cx,1 ROL bx,1 ;and bx,0FFFEh JC setbit2 and bx,0FFFEh SHL num3,1 sub NumXL2,1 jmp again2 setbit2: and bx,0FFFEh SHL num3,1 add num3,1 sub NumXL2,1 jmp again2 do2: mov NumXL2,0 jmp again2 SoThuHai endp Kết thúc hàm xử lý số thứ hai Sum proc Hàm tính tổng mov cx,num4 Cx chứa num4 adc cx,num2 Cộng có dư vào num2 jc du Nếu có dư nhảy tới hàm dư mov sum2,cx Khơng lưu giá trị vừa nhập vào sum có 16 bit thấp ( sum2) mov bx,num3 Bx chứa num3 adc bx,num1 Cộng có dư với num1( 16 bit cao) jc tran Nếu tràn nhảy tới hàm tràn mov sum1,bx Khơng tràn lưu giá trị vào sum1 kết thúc ret du: mov sum2,cx Hàm dư tương tự cộng thêm mov bx,num3 dư số từ bit thấp sang adc bx,num1 jc tran Nếu tràn xử lý tràn mov sum1,bx ret tran: Tràn mov sum1,bx Hiển thị thông báo số bị tràn mov ah, lea dx, XuatTran int 21h Ký trự xuống dòng mov ah, lea dx, CLRF int 21 ret Sum endp Kết thúc hàm Tru proc Hàm xử lý trừ Mov cx,num2 sub cx,num4 Lấy num2 trừ num4 jnc trutiep Nếu số khơng âm trừ tiếp add num3,1 Nếu âm cộng cho số bị trừ thêm trutiep: Trừ tiếp mov Tru2,cx Lưu cx vào tru2( cx vừa tính phía trên) mov bx,num1 Lấy num1 trừ num3 sub bx,num3 jc am Nếu kết âm nhảy tới hàm âm mov Tru1,bx Lưu kết vào tru1 ret am: Hiển thị thông báo kết số âm (dạng bù 2) mov Tru1,bx mov ah, lea dx, XuatAm int 21h ret Tru endp Kết thúc hàm trừ ;ham xuat outputBina proc mov cx,16 Hàm xử lý tổng Lưu 16 vào cx để lặp lại 16 lần mov ah,2 lapdau: Lặp 16 bit cao mov bx,sum1 and bx,32768 And số lớn sum1 với cmp bx,0 Kiểm tra có hay khơng je sokhong Nếu cos số khơng cịn khơng số mov dl,'1' int 21h jmp tiep2 sokhong: mov dl,'0' int 21h tiep2: Tiếp tục SHL sum1,1 Dịch trái để lấy số tiếp theo( hiển thị số từ trái sang) Loop lapdau Kiểm tra cx chưa tiếp tục lặp mov cx,16 Thực tương tự 16 bit số thấp mov ah,2 lap: mov bx,sum2 and bx,32768; and so lon nhat cua num1 vs cmp bx,0 je sokhonghai mov dl,'1' int 21h jmp tiep sokhonghai: mov dl,'0' int 21h tiep: SHL sum2,1 Loop lap ret outputBina endp outputTru proc mov cx,16 mov ah,2 lapdau1: mov bx,tru1 and bx,32768; and so lon nhat cua num1 vs cmp bx,0 je sokhong1 mov dl,'1' int 21h jmp tiep3 Hàm xử lý xuất trừ thực tương tự hàm xử lý xuất tổng sokhong1: mov dl,'0' int 21h tiep3: SHL tru1,1 Loop lapdau1 mov cx,16 mov ah,2 lap1: mov bx,tru2 and bx,32768; and so lon nhat cua num1 vs cmp bx,0 je sokhonghai1 mov dl,'1' int 21h jmp tiep1 sokhonghai1: mov dl,'0' int 21h tiep1: SHL tru2,1 Loop lap1 outputTru endp Kết thúc hàm xuất hiệu Kết thúc chương trình end Link google drive: https://drive.google.com/drive/folders/1Tr4h7NmKC1Q85pgF3vVI4dI1GU6I_x1?usp=sharing

Ngày đăng: 25/06/2023, 13:11

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

  • Đang cập nhật ...

Tài liệu liên quan