lap trinh hop ngu
Nhập 1 chuỗi ký tự từ bàn phím và kết thúc bằng phím Enter
In chuỗi ký tự ra theo chiều ngược lại
Khi nhập vào 1 ký tự sẽ đẩy vào stack , sử dụng thêm cx làm biến đếm
Khi in ra thì sẽ pop stack và in ra 1 ký tự dùng lệnh loop với cx tự giảm
; Nhap vao 1 chuoi ( ket thuc = enter) in ra man hinh theo thu tu nguoc lai
; Created by Blue Sky
.model small
.stack 100h
.data
Nhap db "Nhap vao 1 chuoi <ket thuc nhap = enter >=$"
kqua db 10,13,"Chuoi vua nhap vao theo thu tu nguoc lai=$"
.code
main proc
mov ax,@data
mov ds,ax
;in ra thong bao nhap vao
lea dx,Nhap
mov ah,9
int 21h
xor cx,cx
input:
mov ah,1
int 21h
cmp al,13
je output
inc cx
xor ah,ah
push ax
jmp input
;in ra thong bao ket qua
output:
lea dx,kqua
mov ah,9
int 21h
hienThi:
pop ax
mov dx,ax
mov ah,2
int 21h
loop hienThi
main endp
end
Dec 23
[Assembly] Tính tổng không âm
Administrators , 12:27 , Assembly ( Lập trình hợp ngữ ) , Nhận xét(0) , Trích dẫn(0) , Đọc(237) , Via Tự viết
Địa chỉ trích dẫn
Chú ý Địa chỉ này vần có hiệu lực trước 23:59:59
Bài này tính tổng các số không âm trong một mảng
Khi in ra số sử dụng cách : chia số đó cho 10 lấy dư và in thứ tứ dư ngược lại
; Tinh tong cua cac so khong am trong 1 mang
; Created by Blue Sky
.model small
.stack 100H
.data
list db 100,2,-3,-5
tbao db "Tong la: $"
kqua db 0,"$"
.code
main proc
mov ax,@Data
mov ds,ax
cld
mov cx,4; so lan lap
lea si,list; si<-list
mov bl,0; tong
Lap:
lodsb; al <-si
cmp al,0; so sanh al voi 0
jle Am; al<=0 thi nhay toi Am
add bl,al;
Am:
Loop Lap
lea dx,tbao
mov ah,9
int 21h
;in ra ket qua
call PrintInt
; ket thuc
mov ah,4ch
int 21h
main endp
PrintInt proc
push dx
push cx
push ax
mov ax,bx
mov bx,10
xor cx,cx
ChiaLayDu:
xor dx,dx
inc cx
div bx
push dx
cmp ax,0
je InRa
jmp ChiaLayDu
InRa:
pop dx
add dx,'0'
mov ah,2
int 21h
Loop InRa
pop ax
pop cx
pop dx
PrintInt endp
end main
Viết chương trình nhập 1 chuỗi tối đa 10 ký tự từ bàn phím. Hiển thị ký tự đầu và ký tự cuối của chuỗi ra màn hình.
.Model Small
.Stack
.Data
S db 'Nhap vao mot chuoi khong qua 10 ky tu:$'
S1 db 13,10,'Ky tu dau:$'
S2 db 13,10,'Ky tu cuoi:$'
Buf Db 11,?,12 dup('$')
.Code
Begin:
Mov Ax,@Data
Mov Ds,Ax
;Xuat Chuoi S Ra Man Hinh
Mov Dx,Offset S
Mov Ah,09
Int 21h
;Nhap mot chuoi ky tu
Mov dx,offset Buf
Mov ah,0ah
Int 21h
Lea si,Buf+1
xor cx,cx
Mov cl,[si] ; Lay chieu ddai thuc su cua chuoi
;Xuat Chuoi S1 Ra Man Hinh
Mov Dx,Offset S1
Mov Ah,09
Int 21h
;Xuat ky tu dau
Mov ah,2
Mov dl,[si+1]
Int 21h
;Xuat Chuoi S2 Ra Man Hinh
Mov Dx,Offset S2
Mov Ah,09
Int 21h
;Xuat ky tu cuoi
Add si,cx
Mov ah,2
Mov dl,[si]
Int 21h
;Thoat khoi chuong trinh va tro va Dos
Mov Ax,4c00h
Int 21h
End Begin
Bài 1: In ra màn hình 255 ký tự mở rộng có trong bảng mã ASCII
Giải
code segment
assume cs:code, ds:code
org 100h
begin:
mov cx, 255
mov al,0
lap:
mov ah,2
mov dl,al
inc dl
int 21h
loop lap
mov ax, 4c00h
int 21h
code ends
end begin
Bài 2: Nhập ký tự từ bàn phím nếu gặp phím ESC có mã là "27" thì thoát khỏi chương trình.
Giải
code segment
assume cs:code, ds:code
org 100h
begin:
mov ah,1
int 21h
cmp al,27 ;so sanh ky tu nhap vao voi ky tu 27 la ma ESC
je thoat ;neu la ma ESC thi thoat khoi chuong trinh
jmp begin ;neu khac ma ESC thi quay lai tu dau
thoat:
mov ax, 4c00h
int 21h
code ends
end begin
Bài 3: Viết chương trình nhập vào từ bàn phím nếu ký tự không nằm trong khoảng từ "A" lớn đến "Z" lớn thì thoát khỏi chương trình.
Giải
code segment
assume cs:code, ds:code
org 100h
begin:
mov ah,1
int 21h
mov bl,al
cmp bl,'A';so sanh A lon den Z lon
jb thoat ;neu khac khoang A lon den Z lon
cmp bl,'Z';thi thoat khoi chuong trinh
ja thoat
jmp begin
thoat:
mov ax, 4c00h
int 21h
code ends
end begin
Bài 4: Viết chương trình in ra hình trái tim mầu đỏ nền đen ở tâm màn hình.
Giải:
code segment
assume cs:code, ds:code
org 100h
begin:
mov ax, 0b800h
mov ds, ax
mov al,3
mov ah,00000100b
d=12
c=40
mov si,(d*80+c)*2
mov [si],ax
mov ax, 4c00h
int 21h
code ends
end begin
Bài 5: Viết chương trình in ra màn hình trái tim mầu đỏ nền đen và dùng các phím (t,r,,u,d) để điều khiển trái tim dịch sang(trái, phải, trên, dưới)
Giải:
code segment
assume cs:code, ds:code
org 100h
begin:
mov ax, 0b800h
mov ds, ax
mov al,3
mov ah,00000100b
d=12
c=40
mov si,(d*80+c)*2
mov [si],ax
lap:
mov ah,7 ;nhap ky tu tu ban phim khong hien len man hinh
int 21h
cmp al,'l';so sanh neu dung thi thuc hien lenh trai
je trai
cmp al,'r'
je phai
cmp al,'u'
je tren
cmp al,'d'
je duoi
jmp thoat
trai:
mov al,3
mov ah,4
mov [si],0720h ;xoa ky tu vua dich chuyen
sub si,2
mov [si],ax
jmp lap
phai:
mov al,3
mov ah,4
mov [si],0720h ;xoa ky tu vua dich chuyen
add si,2
mov [si],ax
jmp lap
tren:
mov al,3
mov ah,4
mov [si],0720h ;xoa ky tu vua dich chuyen
sub si,160
mov [si],ax
jmp lap
duoi:
mov al,3
mov ah,4
mov [si],0720h ;xoa ky tu vua dich chuyen
add si,160
mov [si],ax
jmp lap
thoat:
mov ax, 4c00h
int 21h
code ends
end begin
Bài 6: Viết chương trình hiển thị dòng chữ "KHOA TIN HOC" có mầu đỏ nền đen rồi xuống dòng và đảo ngược dòng chữ đó.
Giải
code segment
assume cs:code,ds:code
org 100h
begin:
mov ax,0b800h
mov ds,ax
d=5
c=10
mov al,'K'
mov ah,65
mov di,(d*80+c)*2
mov [di],ax
mov al,'H'
mov ah,58
mov[di+2],ax
mov al,'O'
mov ah,24
mov[di+4],ax
mov al,'A'
mov ah,30
mov[di+6],ax
mov al,' '
mov ah,00
mov[di+8],ax
mov al,'T'
mov ah,65
mov[di+10],ax
mov al,'I'
mov ah,40
mov[di+12],ax
mov al,'N'
mov ah,12
mov[di+14],ax
mov ah,1
int 21h
d=5
c=10
push[di]
push[di+2]
push[di+4]
push[di+6]
push[di+8]
push[di+10]
push[di+12]
push[di+14]
d=6
c=10
mov si,(d*80+c)*2
pop[si]
pop[si+2]
pop[si+4]
pop[si+6]
pop[si+8]
pop[si+10]
pop[si+12]
pop[si+14]
mov ax,4c00h
int 21h
code ends
end begin
Bạn đang đọc truyện trên: Truyen247.Pro