lap trinh hop ngu

Màu nền
Font chữ
Font size
Chiều cao dòng

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: Truyen2U.Pro