tổng hợp
asm
đây là bài đổi màu chữ đầu dòng thành màu xanh. Đúng theo yêu cầu của thầy giáo.
.MODEL SMALL
.CODE
ORG 100H
START:
JMP DATA
DATA:
MOV BH,0 ;DAT SO TRANG MAN HINH
MOV DH,0 ;DAT CHI SO HANG
MOV DL,0 ;DAT CHI SO COT
LAP:
CMP DL,80
JE XUONG
MOV AH,2 ;DAT VI TRI CON TRO
INT 10H
MOV AH,8 ;DOC KY TU TAI VI TRI CON TRO
INT 10H ;MA ASSCI LUU TRONG AL
CMP AL,20H ;SO SANH VOI DAU CACH
JE TANG ;NEU BANG THI TANG BIEN DONG
;NEU KHONG PHAI DAU CACH THI DOI MAU
MOV AH,9 ;HAM DOI MAU
MOV CX,1 ;SO LAN LAP
MOV BL,2 ;MAU
INT 10H
JMP XUONG ;KHI DOI XONG THI XUONG DONG
TANG:
INC DL
JMP LAP
XUONG:
MOV DL,0
INC DH
CMP DH,25
JE EXIT
JMP LAP
EXIT:
INT 20H
END START
tìm a và A trên màn hình rồi đổi nó ra màu khác
.model small
.code
org 100h
tima proc
mov ax,0b800h
mov es,ax
xor di,di
mov cx,2000h
doia:
mov al,41h
scasb
jz doivang
dec di
mov al,61h
scasb
jz doivang
loop doia
jmp ketthuc
doivang:
mov al,5
stosb
jmp doia
ketthuc:
mov ah,1
int 21h
int 20h
tima endp
end tima
chuong trinh tinh n! voi n<10; chu y thao tac tren he 16
.model small
.code
org 100h
start Proc
jmp batdau
tb1 db ' nhap 1 so de tinh giai thua : 0dh $ '
tb2 db ' so ma ban vua nhap la $'
sohex dw 0
batdau:
mov ah,09
mov dx,offset tb1
int 21h
;nhap tung so 1
nhap:
mov ah,1
int 21h
sub al,30h
xor ah,ah
mov cx, ax
xor bx,bx
xor dx,dx
mov ax,1
nhan:
inc bx
mul bx
loop nhan
push ax
cmp dx,0
je insohex
cmp dl,9
jg inchu
add dl,30h
mov ah,2
int 21h
jmp xong
inchu:
add dl,37h
mov ah,2
int 21h
xong:
pop ax
mov bx,ax
insohex:
mov dl,bh
mov cl,4
shr dl,cl
inc dh
cmp dl,09
jg inso
add dl,30h
mov ah,2
int 21h
rol bx,cl
cmp dh,4
jl insohex
jmp ketthuc
inso:
add dl,37h
mov ah,2
int 21h
rol bx,cl
cmp dh,4
jl insohex
jmp ketthuc
ketthuc:
mov ah,1
int 21h
int 20h
start endp
end start
model small ;TRUNG BINH CUA N SO
.stack 0100h
.data
tb1 db 'nhap vao so chu so:$'
tb2 db 13,10, 'nhap so:$'
tb3 db 13,10, 'trung binh=:$'
n dw 0 ;so n
tong dw 0 ;tong
sodu dw 0 ;du
bien_trung_gian dw 0
xau db 12
dem db ?
text db 10 dup("$")
.code
main:
mov ax,@data
mov ds,ax ;tai sao no lai return den cho nay
;nhap n
thongbao tb1
mov ah,0ah
lea dx,xau
int 21h
call nhap_so
; pop ax lenh sai
mov ax,bien_trung_gian
mov n,ax
;nhap roi tinh tong luon
mov cx,n
nhap_cac_so_thanh_phan:
thongbao tb2
mov ah,0ah
lea dx,xau
int 21h
lea si,text
call nhap_so
; pop ax
mov ax,bien_trung_gian
add tong,ax
loop nhap_cac_so_thanh_phan
;tong da dc nho
chia:
mov ax,tong
mov bx,n
div bx
mov sodu,dx
push ax
thongbao tb3
pop ax
mov cx,0
inA:
mov dx,0
mov bx,10
div bx
inc cx
push dx
cmp ax,0
ja inA
;sau buoc tren ta co phan nguyen cua thuong so dat o trong ax
hien:
;phan nguyen
pop dx
add dx,30h
mov ah,2
int 21h
loop hien
;du
mov ax,sodu ;la so du cuoi cung
cmp ax,0
je exit
mov ah,2
mov dl,','
int 21h
mov cx,10 ;dung den 10 chu so sau dau phay
hien_du:
mov bx,10
mov ax,sodu
mul bx
mov bx,n
div bx
mov sodu,dx
mov dx,ax
mov ah,2
add dx,30h
int 21h
loop hien_du
exit:
mov ah,4ch
int 21h
nhap_so proc
xor ax,ax
mov si,offset text
lap1:
mov al,[si]
;hoac lenh mov al,byte ptr [si]
cmp al,13
je exit1
and al,0fh
add ax,bx
; push ax
;thay lenh push bang lenh sau
mov bien_trung_gian,ax
mov bx,10
mul bx
mov bx,ax
inc si
jmp lap1
exit1:
xor bx,bx
ret
nhap_so endp
end main
ở bài này bạn có thể tham khảo các đoạn code rất hay sử dụng như in , nhập , xử lý nhập , xử lý dư ,rồi ngăn xếp rồi hàm con,......
Nhập 2 số a, b từ bàn phím, tính tổng 2 số đó.
thu tuc nhap so hex ,so vua nhap nam trong ax
nhapsohex proc
push bx
push cx
push dx
jmp batdau1
tb4 db 0ah,0dh,[color= red;]' nhap 1 so o he 16 $ '[/color]
batdau1:
mov ah,09
mov dx,offset tb4
[color=blue;]int[/color] 21h
[color=blue;]xor[/color] bx,bx
nhap:
mov ah,1
[color=blue;]int[/color] 21h
cmp al,0Dh
je nhapxong
cmp al,40h
jg sulychu
sub al, 30h
mov cl,4
shl bx,cl
[color=blue;]or[/color] bl,al
jmp nhap
sulychu:
sub al,37h
mov cl,4
shl bx,cl
[color=blue;]or[/color] bl,al
jmp nhap
nhapxong:
mov ax,bx
pop dx
pop cx
pop bx
ret
nhapsohex endp
;-----
Bài 1: Viết chương trình hợp ngữ dạng .EXE thực hiện nhập vào từ bàn phím một ký tự, nếu không phải là ký tự số thì nhập lại. Sau đó nhiển thị ký tự vừa nhập trên dòng tiếp theo.
Bài 2:
...
Thử làm 1 bài đơn giản (chưa test), bạn làm các bài còn lại tương tự :
DOSSEG
.MODEL SMALL
.STACK 100h
.DATA
MoiNhap DB 'Nhap mot ky tu so n = ' , '$'
KoLaChuSo DB 'Ko phai , hay nhap lai ' , 13,10, '$'
LaChuSo DB 'Dung roi, so vua nhap la ' , 13,10, '$'
.CODE
MOV AX, @Data ; Dua cac du lieu
MOV DS, AX ; vao phan doan du lieu
NhapKyTu:
MOV DX, OFFSET MoiNhap ; Xuat mot chuoi tro boi DX
MOV AH, 9 ; bang chuc nang thu 9
INT 21h ; cua ngat 21h DOS
MOV AH, 1 ; Nhap mot ky tu vao AL
INT 21h ; bang chuc nang 1 cua ngat 21h DOS
CMP AL, '0' ; Kiem tra co phai chu so hay ko
JB KyTuKhac
CMP AL, '9'
JA KyTuKhac
ChuSo:
MOV DX, OFFSET LaChuSo
MOV AH, 9
INT 21h
JMP XuatKyTu
KyTuKhac:
MOV DX, OFFSET KoLaChuSo
MOV AH, 9
INT 21h
JMP NhapKyTu
XuatKyTu:
MOV AH, 2 ; Xuat mot ky tu bang
INT 21h ; chuc nang 2 cua ngat 21h DOS
MOV AH, 4Ch ; Ket thuc chuong trinh va tra
INT 21h ; ve DOS bang chuc nang 4Ch
END
Thiết kế hệ thống hiển thị sử dụng màn hình LCD character 40*4 hiển thị dòng chữ hello world với họ onchip 8051
#include <sfr51.inc>
;Goi thoi gian tre truoc khi gui du lieu/lenh ke tiep
;Cong P3 duoc noi toi chan du lieu D0-D7 cua LCD
;Chan P2.0 duoc noi toi chan RS cua LCD
;Chan P2.1 duoc noi toi chan R/W cua LCD
;Chan P2.2 duoc noi toi chan E cua LCD
mov a,#38h; LCD 2 dong
acall gui_lenh ;goi chuong trinh con gui_lenh
acall delay ;tao do tre cho LCD
mov a,#0Eh ;hien thi man hinh va con tro
acall gui_lenh ;goi chuong trinh con gui_lenh
acall delay ;tao do tre cho LCD
mov a,#01 ;xoa man hinh
acall gui_lenh ;
acall delay ;
mov a,#80h ;dua con tro ve dau dong 1
acall gui_lenh;
acall delay;
mov a,#'H';
acall ghi_du_lieu ;
acall delay;
mov a,#'E';
acall ghi_du_lieu ;
acall delay;
mov a,#'L';
acall ghi_du_lieu ;
acall delay;
mov a,#'L';
acall ghi_du_lieu ;
acall delay;
mov a,#'O';
acall ghi_du_lieu ;
acall delay;
mov a,#' ';
acall ghi_du_lieu ;
acall delay;
mov a,#'W';
acall ghi_du_lieu ;
acall delay;
mov a,#'O';
acall ghi_du_lieu ;
acall delay;
mov a,#'R';
acall ghi_du_lieu ;
acall delay;
mov a,#'L';
acall ghi_du_lieu ;
acall delay;
mov a,#'D';
acall ghi_du_lieu ;
acall delay;
again: sjmp again;
gui_lenh:
mov p3,a;
clr p2.0
clr p2.1
setb p2.2
clr p2.2
ret
ghi_du_lieu:
mov p3,a
setb p2.0
clr p2.1
setb p2.2
clr p2.2
ret
delay:
mov r3, #50
here2: mov r4,#255
here: djnz r4,here
djnz r3,here2
ret end
Lập chương trình nhập vào 1 số kiêu word in ra màn hình mã Hexa tương ứng của số đó
.model tiny
.stack 100h
.data
st1 db 'nhap so kieu word:$'
st2 db 13,10,'so do duoi dang hecxa:$'
a dw 0
.code
main proc
;
mov ax,@data
mov ds,ax
;
lea dx,st1
mov ah,9
int 21h
nhap:
mov ah,1
int 21h
cmp al,13
je inso
mov ah,0
sub al,30h
mov cx,ax
mov ax,a
mov bx,10
mul bx
add ax,cx
mov a,ax
jmp nhap
inso:
;
lea dx,st2
mov ah,9
int 21h
mov bx,16
mov ax,a
mov cx,0
chia:
mov dx,0
div bx
cmp dx,10
jae doi
add dx,30h
jmp cat
doi: add dx,37h
cat:
push dx
inc cx
cmp ax,0
je hien
jmp chia
hien:
pop dx
mov ah,2
int 21h
loop hien
ra:
mov ah,4ch
int 21h
main endp
end main
Lập chương trình nhập vào 1 số kiêu word in ra màn hình mã nhị phân tương ứng của số đó
.model tiny
.stack 100h
.data
st1 db 'Nhap so kieu WORD :$'
st2 db 13,10,'Ma nhi phan tuong ung:$'
so dw 0
.code
main proc
mov ax,@data
mov ds,ax
lea dx,st1
mov ah,9
int 21h ;In xau st1
nhap:
mov ah,1
int 21h
cmp al,13
je nhiphan
sub al,30h
mov ah,0
mov cx,ax
mov bx,10
mov ax,so
mul bx
add ax,cx
mov so,ax
jmp nhap
nhiphan:
lea dx,st2
mov ah,9
int 21h
mov cx,0
mov bx,2
mov ax,so
chia:
mov dx,0
div bx
add dx,30h
push dx
inc cx
cmp ax,0
je inso
jmp chia
inso:
pop dx
mov ah,2
int 21h
loop inso
ra:
mov ah,4ch
int 21h
main endp
end main
3.Thực hiện nhập vào 2 số tự nhiên nhỏ hơn 10. Tìm số lớn nhất trong 2 số và in kết quả ra màn hình trên dòng tiếp theo.
.model small
.stack 100h
.data
msg1 db 'nhap so thu nhat: $'
msg2 db 13,10,'nhap so thu 2: $'
msg3 db 13,10,'so lon nhat trong 2 so la: $'
.code
main proc
mov ax,@data
mov ds,ax
;nhap so thu nhat
mov ah,9
lea dx,msg1
int 21h
;nhap vao
mov ah,1
int 21h
and al,0fh
xor cx,cx
mov cl,al
;nhap so thu hai
mov ah,9
lea dx,msg2
int 21h
;nhap vao
mov ah,1
int 21h
and al,0fh
xor bx,bx
mov bl,al
;hien thi so lon nhat
mov ah,9
lea dx,msg3
int 21h
;so sanh
cmp bl,cl
jg ht1 ;lon hon
jl ht2 ;nho hon
ht1: add bl,30h
mov ah,2
mov dl,bl
int 21h
jmp thoat
ht2: add cl,30h
mov ah,2
mov dl,cl
int 21h
thoat: ;tro ve dos
mov ah,4ch
int 21h
main endp
end main
Bạn đang đọc truyện trên: Truyen247.Pro