1 NGUYỄN QUANG VŨ 1221060497 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 Khoát Sinh viên Nguyễn Quang Vũ MSV 1221060497 Lớp Tự động hóa.
Trang 1Hà Nội, 12/2014
Trang 22 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ố đó
Trang 44 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
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);
Trang 66 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 đồ:
Trang 9strupr(s);
int trong_so=1,i,so,temp=0;
for (i=strlen(s)-1;i>=0;i ) {
switch (s[i]) {
Trang 1010 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);
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
Trang 1111 NGUYỄN QUANG VŨ _ 1221060497
Kiểu Word
Lưu đồ:
Trang 12strupr(s);
int trong_so=1,i,so,temp=0;
for (i=strlen(s)-1;i>=0;i ) {
switch (s[i]) {
default:
so=-1;
break;
} if(so==-1) {
return -1;
} else {
temp+=so*trong_so; trong_so=trong_so*16; }
} return temp;
}
Trang 1313 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
Trang 1414 NGUYỄN QUANG VŨ _ 1221060497
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
Trang 1515 NGUYỄN QUANG VŨ _ 1221060497
Kiểu Double Word
Lưu đồ:
Trang 16strupr(s);
int trong_so=1,i,so,temp=0;
for (i=strlen(s)-1;i>=0;i ) {
switch (s[i]) {
default:
so=-1;
break;
} if(so==-1) {
return -1;
} else {
temp+=so*trong_so;
Trang 1717 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
Trang 1818 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]
Trang 1919 NGUYỄN QUANG VŨ _ 1221060497
int 21h inc i jmp inra ket_thuc:
mov ah,4Ch int 21h main endp end main
Trang 20return 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
Trang 2121 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
Trang 2222 NGUYỄN QUANG VŨ _ 1221060497
Kiểu Word
Lưu đồ:
Trang 23char 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); }
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
Trang 2424 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
Trang 2525 NGUYỄN QUANG VŨ _ 1221060497
Kiểu Double Word
Lưu đồ:
Trang 26char c[4]="q Vu";
int h[4],i,first,second;
for (i=0;i<4;i++) {
h[i]=(int)c[i];
} for (i=0;i<4;i++) {
first=(h[i]&0xF0)>>4;
second=(h[i]&0x0F)>>0; printf("\n%x%x",first,second); }
h db 4 dup(?) temp db ? code mov ax,@data mov ds,ax
mov cx,4 mov di,0 ep_mang:
mov bl,ascii[di]
mov h[di],bl inc di loop ep_mang
mov cx,4 mov di,0 xuat_mang:
call newline mov ax,h[di]
and al,0F0h shr al,4 mov temp,al call inra_hex mov ax,h[di]
and al,0Fh shr al,0
Trang 2727 NGUYỄN QUANG VŨ _ 1221060497
mov temp,al inc di call inra_hex loop xuat_mang
ket_thuc:
mov ah,4Ch int 21h main endp end main
inra_hex proc mov ah,2h mov dl,temp cmp dl,10d
jl la_so jmp la_chu
la_so:
add dl,30h int 21h ret la_chu:
add dl,37h int 21h ret inra_hex endp
newline proc mov ah,2h mov dl,0Dh int 21h mov ah,2h mov dl,0Ah int 21h ret newline endp
end