Tải bản đầy đủ (.pdf) (27 trang)

HỆ VI XỬ LÝ VÀ MÁY TÍNH

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (652.36 KB, 27 trang )

TRƯỜNG ĐẠI HỌC MỎ-ĐỊA CHẤT
BỘ MƠN TỰ ĐỘNG HĨA

BÀI TẬP LỚN

HỆ VI XỬ LÝ VÀ MÁY TÍNH
Giảng viên: T.S Nguyễn Đức Khốt
Sinh viên: Nguyễn Quang Vũ
MSV: 1221060497
Lớp: Tự động hóa A- K57
Nhóm : 5

Hà Nội, 12/2014

1

NGUYỄN QUANG VŨ _ 1221060497


Bài 1 Viết chương trình thực hiện các cơng việc sau:
Hiển thị kí tự ”!”
Đọc hai chữ số thập phân có tổng nhỏ hơn 10
Hiển thị các số đó và thơng báo tổng của hai số đó


Lưu đồ:



C:


#include <stdio.h>
#include <conio.h>
int main()
{
char c='!';
int a=2,b=3,s;
printf("%c",c);
s=a+b;
printf("\n%d %d. Tong la: %d",a,b,s);
getchar();
return 0;
}

2

NGUYỄN QUANG VŨ _ 1221060497


 ASM:
.model small
.stack 100h
.data
a db 3
b db 5
msg db 10,13,'tong cua chung la: $'
.code
main proc
mov ax,@data
mov ds,ax
mov ah,2

mov dl,21h ;hien dau !
int 21h
mov dl,0ah ; xuong dong
int 21h
mov dl,0dh ; ve dau dong
int 21h
mov bl,a ;doc so a
mov bh,b ;doc so b
mov cl,bh
add cl,bl
add cl,30h
add bh,30h
add bl,30h
mov ah,2
mov dl,bl ;in so a
int 21h
mov dl,20h ; dau cach
int 21h
mov dl,bh ;in so b
int 21h
mov dl,20h ; dau cach
int 21h
lea dx,msg ;hien thong bao tong
mov ah,9
int 21h
mov ah,2
mov dl,cl ;in tong
int 21h
;ket thuc
mov ah,4ch

int 21h
main endp
end main

3

NGUYỄN QUANG VŨ _ 1221060497


Bài 2 Viết chương trình thực hiện các cơng việc sau:
Hiển thị thông báo nhập số liệu
Nhập vào 3 chữ cái đầu tương ứng với: Họ, Tên đệm, Tên
Hiển thị lên màn hình
 Lưu đồ:

 C:
#include <stdio.h>
#include <conio.h>
int main()
{
char ho,dem,ten;
printf("Nhap chu cai dau tuong ung Ho, Dem, Ten: ");
scanf("%c %c %c",&ho ,&dem, &ten);
printf("\nVua nhap vao: %c %c %c",ho,dem,ten);
getch();
return 0;
}
 ASM:
.model small
.stack 100h

.data
msg1 db 'nhap vao cac chu cai dau tuong ung voi ho, ten dem, ten $'
msg2 db 10,13,'ban vua nhap $'
ho db ?
tendem db ?
ten db ?
.code
main proc
mov ax,@data
mov ds,ax
lea dx,msg1
mov ah,9

4

NGUYỄN QUANG VŨ _ 1221060497


int 21h
mov ah,1
int 21h
mov ho,al
mov ah,1
int 21h
mov tendem,al
mov ah,1
int 21h
mov ten,al
lea dx,msg2
mov ah,9

int 21h
;dau cach
mov ah,2
mov dl,20h
int 21h
mov ah,2
mov dl, ho
int 21h
;dau cach
mov ah,2
mov dl,20h
int 21h
mov ah,2
mov dl,tendem
int 21h
;dau cach
mov ah,2
mov dl,20h
int 21h
mov ah,2
mov dl,ten
int 21h
mov ah,4ch
int 21h
main endp
end main

5

NGUYỄN QUANG VŨ _ 1221060497



Bài 3 Viết một chương trình đọc một chữ số Hex rồi hiển thị chúng dưới dạng nhị phân
 Lưu đồ:

6

NGUYỄN QUANG VŨ _ 1221060497


 C:
#include <stdio.h>
#include <conio.h>
int main()
{
char h='a';
if(h>=0x61 && h<=0x66)
{
h=h-0x57;
}
if(h>=0x41 && h<=0x46)
{
h=h-0x37;
}
if(h>=0x30 && h<=0x39)
{
h=h-0x30;
}
int c;
char a[3],b[3];

b[0]=h;
for (c=0;c<4;c++){
a[c]=b[c]%2;
b[c+1]=b[c]/2;
}
printf("\n ma nhi phan la:");
for(c=0;c<4;c++){
printf("%c",a[3-c]+0x30);
}
getchar();
return 0;
}
 ASM:
.model small
.stack 100h
.data
a db 'a'
tb1 db 10,13,'bieu dien dang nhi phan la: $'
.code
main proc
mov ax,@data
mov ds,ax
mov al,a
thuong:
cmp al,61h
jb hoa
cmp al,66h
ja ket_thuc
sub al,57h
hoa:


7

NGUYỄN QUANG VŨ _ 1221060497


cmp al,41h
jb so
cmp al,46h
ja ket_thuc
sub al,37h
so:
cmp al,30h
jb kiem_tra
cmp al,39h
ja ket_thuc
sub al,30h
kiem_tra:
cmp al,15h
ja ket_thuc
mov bx,2
and ax,0ffh
mov cx,0
bieu_dien:
xor dx,dx
div bx
push dx
inc cx
cmp ax,0
jne bieu_dien

cmp cx,4
jne bieu_dien
mov ah,9
lea dx,tb1
mov ah,2
nhi_phan:
pop dx
add dx,30h
int 21h
loop nhi_phan
ket_thuc:
mov ah,4ch
int 21h
main endp
end main

8

NGUYỄN QUANG VŨ _ 1221060497


Bài 4 Viết chương trình chuyển đổi Hexa sang Ascii và ngược lại của toán hạng kiểu byte, word,
double word
 Hexa sang Ascii
 Kiểu Byte
 Lưu đồ:



C:

#include <stdio.h>
#include <conio.h>
#include <string.h>
int chuyen_hexa_sang_thap_phan(char s[100]);
int hexa_to_dec(char s[100])
{
strupr(s);
int trong_so=1,i,so,temp=0;
for (i=strlen(s)-1;i>=0;i--)
{
switch (s[i])
{
case 'A':
case 'B':
case 'C':
case 'D':
case 'E':
case 'F':
so=s[i]-0x37;
break;
case '0':
case '1':
case '2':
case '3':
case '4':
case '5':
case '6':
case '7':

9


NGUYỄN QUANG VŨ _ 1221060497


case '8':
case '9':
so=s[i]-0x30;
break;
default:
so=-1;
break;
}
if(so==-1)
{
return -1;
}
else
{
temp+=so*trong_so;
trong_so=trong_so*16;
}
}
return temp;
}
int main()
{
char hex[100]="41";
char c=(char)hexa_to_dec(hex);
printf("%c",c);
getchar();

return 0;
}


10

ASM:
.model small
.stack 100h
.data
hex db 41h
.code
main proc
mov ax,@data
mov ds,ax
mov ah,2h
mov dl,hex
int 21h
ket_thuc:
mov ah,4Ch
int 21h
main endp
end main

NGUYỄN QUANG VŨ _ 1221060497




11


Kiểu Word
 Lưu đồ:

NGUYỄN QUANG VŨ _ 1221060497




C:
#include <stdio.h>
#include <conio.h>
#include <string.h>
int hexa_to_dec(char s[100]);
int hexa_to_dec(char s[100])
{
strupr(s);
int trong_so=1,i,so,temp=0;
for (i=strlen(s)-1;i>=0;i--)
{
switch (s[i])
{
case 'A':
case 'B':
case 'C':
case 'D':
case 'E':
case 'F':
so=s[i]-0x37;
break;

case '0':
case '1':
case '2':
case '3':
case '4':
case '5':
case '6':
case '7':
case '8':
case '9':
so=s[i]-0x30;
break;
default:
so=-1;
break;
}
if(so==-1)
{
return -1;
}
else
{
temp+=so*trong_so;
trong_so=trong_so*16;
}
}
return temp;
}

12


NGUYỄN QUANG VŨ _ 1221060497


int main()
{
char hex[100]="5675";
char c;
int i,j=0xFF00,k=8,temp,h[100];
temp=hexa_to_dec(hex);
for(i=0;i<2;i++)
{
h[i]=(temp&j)>>k;
k-=8;
j=j>>8;
}
for(i=0;i<2;i++)
{
printf("%c",h[i]);
}
getchar();
return 0;
}


ASM:
.model small
.stack 100h
.data
hex dw 5655h

i dw ?
j dw 0FF00h
k db 8
h db 2 dup(?)
.code
main proc
mov ax,@data
mov ds,ax
mov i,0
tach_byte:
cmp i,2
jnl tach_xong
mov bx,j
mov cl,k
mov ax,hex
and ax,bx
shr ax,cl
mov di,i
mov h[di],al
sub k,8
shr bx,8
mov j,bx
inc i
jmp tach_byte
tach_xong:
mov i,0

13

NGUYỄN QUANG VŨ _ 1221060497





14

inra:
cmp i,2
jnl ket_thuc
mov di,i
mov ah,2h
mov dl,h[di]
int 21h
inc i
jmp inra
ket_thuc:
mov ah,4Ch
int 21h
main endp
end main
ASM 2:
;hex sang ascii kieu word
.model small
.stack 100h
.data
hex dw 4142h
msg db 10,13,'ma ascii la: $'
.code
main proc
mov ax,@data

mov ds,ax
mov bx,hex
mov ah,9
lea dx,msg
int 21h
mov ah,2
mov dl,bh
int 21h
mov dl,bl
int 21h
mov ah,4ch
int 21h
main endp
end main

NGUYỄN QUANG VŨ _ 1221060497




15

Kiểu Double Word
 Lưu đồ:

NGUYỄN QUANG VŨ _ 1221060497





C:
#include <stdio.h>
#include <conio.h>
#include <string.h>
int hexa_to_dec(char s[100]);
int hexa_to_dec(char s[100])
{
strupr(s);
int trong_so=1,i,so,temp=0;
for (i=strlen(s)-1;i>=0;i--)
{
switch (s[i])
{
case 'A':
case 'B':
case 'C':
case 'D':
case 'E':
case 'F':
so=s[i]-0x37;
break;
case '0':
case '1':
case '2':
case '3':
case '4':
case '5':
case '6':
case '7':
case '8':

case '9':
so=s[i]-0x30;
break;
default:
so=-1;
break;
}
if(so==-1)
{
return -1;
}
else
{
temp+=so*trong_so;

16

NGUYỄN QUANG VŨ _ 1221060497


trong_so=trong_so*16;
}
}
return temp;
}
int main()
{
char hex[100]="4e515675";
char c;
int i,j=0xFF000000,k=24,temp,h[100];

temp=hexa_to_dec(hex);
for(i=0;i<4;i++)
{
h[i]=(temp&j)>>k;
k-=8;
j=j>>8;
}
for(i=0;i<4;i++)
{
printf("%c",h[i]);
}
getchar();
return 0;
}



ASM:
.model small
.stack 100h
.data
hex dd 4e515675h
word1 dw ?
word2 dw ?
i dw ?
j dw 0FF00h
k db 8
h db 4 dup(?)
.code
main proc

mov ax,@data
mov ds,ax
les bx,hex
mov word1,es

17

NGUYỄN QUANG VŨ _ 1221060497


mov word2,bx
mov ds,ax
mov i,0
tach_byte_w1:
cmp i,2
jnb tach_xong_w1
mov bx,j
mov cl,k
mov ax,word1
and ax,bx
shr ax,cl
mov di,i
mov h[di],al
sub k,8
shr bx,8
mov j,bx
inc i
jmp tach_byte_w1
tach_xong_w1:
mov j,0FF00h

mov k,8
tach_byte_w2:
cmp i,4
jnb tach_xong_w2
mov bx,j
mov cl,k
mov ax,word2
and ax,bx
shr ax,cl
mov di,i
mov h[di],al
sub k,8
shr bx,8
mov j,bx
inc i
jmp tach_byte_w2
tach_xong_w2:
mov i,0
inra:
cmp i,4
jnb ket_thuc
mov di,i
mov ah,2h
mov dl,h[di]

18

NGUYỄN QUANG VŨ _ 1221060497



int 21h
inc i
jmp inra
ket_thuc:
mov ah,4Ch
int 21h
main endp
end main

19

NGUYỄN QUANG VŨ _ 1221060497


 Ascii sang Hexa
 Kiểu Byte
 Lưu đồ:





20

C:
#include <stdio.h>
#include <conio.h>
int main()
{
char c='A';

int d,first,second;
d=(int)c;
first=(d&0xF0)>>4;
second=(d&0x0F)>>0;
printf("%x%x",first,second);
getchar();
return 0;
}
ASM:
.model small
.stack 100h
.data
ascii db ‘A’
msg db 0Dh,0Ah,"so hex tuong ung: $"
.code
main proc
mov ax,@data
mov ds,ax
mov bh,ascii

NGUYỄN QUANG VŨ _ 1221060497


mov bl,0xf0
and ascii,bl
mov cl,4
;dich sang phai 4 bit
shr ascii,cl ; duoc so 1
cmp ascii,9
ja nhay

add ascii,30h
jmp nhay1
nhay:
add ascii,37h
nhay1:
mov ch,0x0f
and bh,ch
cmp bh,9
ja nhay2
;da duoc so 2
add bh,30h
jmp xuat
nhay2:
add bh,37h
xuat:
lea dx,msg
mov ah,9
int 21h
mov ah,2
mov dl,ascii
int 21h
mov dl,bh
int 21h
ketthuc:
mov ah,4ch
int 21h
main endp
end main

21


NGUYỄN QUANG VŨ _ 1221060497




22

Kiểu Word
 Lưu đồ:

NGUYỄN QUANG VŨ _ 1221060497






C:
#include <stdio.h>
#include <conio.h>
int main()
{
char c[2]="VU";
int h[2],i,first,second;
for (i=0;i<2;i++)
{
h[i]=(int)c[i];
}
for (i=0;i<2;i++)

{
first=(h[i]&0xF0)>>4;
second=(h[i]&0x0F)>>0;
printf("\n%x%x",first,second);
}
getchar();
return 0;
}
ASM:
.model small
.stack 100h
.data
ascii dw 'vu '
msg db 10,13,'ma hex la: $',20h
.code
main proc
mov ax,@data
mov ds,ax
mov bx,ascii
xchg bh,bl
mov ah,2
mov dl,0ah
int 21h
mov dl,0dh
int 21h
mov cl,4
mov ch,bh
mov dh,1
mov al,bh
tiep1:

and ch,0x0f0h
shr ch,cl
add ch,30h
and al,0x0fh
cmp al,9
ja chu
add al,30h

23

NGUYỄN QUANG VŨ _ 1221060497


jmp xuat
chu:
add al,37h
jmp xuat
xuat:
mov bh,al
mov ah,2
mov dl,ch
int 21h
mov ah,2
mov dl,bh
int 21h
inc dh
mov ch,bl
mov al,bl
cmp dh,2
je tiep1

ketthuc:
mov ah,4ch
int 21h
main endp
end main

24

NGUYỄN QUANG VŨ _ 1221060497




25

Kiểu Double Word
 Lưu đồ:

NGUYỄN QUANG VŨ _ 1221060497


×