this is some asm code use dos

now, I don't use asm normal, welcode to talk with me.

My msn is: mnzn2530@hotmail.com


this is a TSR, I write is in windows command, not dos, but it run ok
it's simple, isn's it?



code segment
assume cs:code
start:
jmp begin
oldint9 dd ?
mystack dw 100H dup(?)

begin:
mov ax, code
mov ds, ax
mov ss, ax
mov sp, offset begin

mov ah, 35H
mov al, 9
int 21H

mov word ptr , bx
mov bx, es
mov word ptr , bx

mov ah, 25H
lea dx, newint9
int 21H

mov dx, offset enddata
mov cx, 4
shr dx, cl
mov ah, 31H
int 21H

newint9:
jmp newint9begin
buffer db 4000 dup(?)
color db 0
newint9begin:
push ax
push bx
push cx
push ds
push es
push si
push di

in al, 60H

pushf

pushf
pop bx
and bh, 11111100B
push bx
popf
call dword ptr

mov bx, 0b800H
mov ds, bx
mov si, 1
mov cx, 2000

mov bl,
inc bl
mov , bl
int9loop:
mov , bl
add si, 2
loop int9loop

pop di
pop si
pop es
pop ds
pop cx
pop bx
pop ax

iret
enddata:
nop
code ends
end start



next is a miniminivi, yeah, it's a edit!!
but not complete, I hope someome can't write it and me.
joy it!


assume cs:code, ds:data
data segment
    showstr1 db "This is my edit for dos", '$'
    showstr2 db "if you get any bug , please tell me", '$'
    showstr3 db "--------------- thank ! QQ:676361476", '$'
    part db '________________________________________________________________________________', '$'
    login db "please press any key to continue", '$'
    line db 0
    row db 0
    ;; ?????????
    m_e_begin db "you are in begin........", '$'
   
    numberofline db 23 dup(0)
    buffer db 2000 dup (0)
data ends

code segment
main:                ; ?????
    call menu
    call keyboard
    call flushall
       
    mov ax, 4c00H
    int 21H            ; ?????

;;---------------------------------------------------------------------
   
menu proc near            ; ??????
    push ax
    push bx
    push dx
    call flushclient
    call flushmessage

    mov ax, data
    mov ds, ax
   
    mov ah, 2
    mov bh, 0
    mov dh, 12            ; ??
    mov dl, 26        ; ??
    int 10H
    lea dx, showstr1
    mov al, 0
    mov ah, 9
    int 21H

    mov ah, 2
    mov bh, 0
    mov dh, 14            ; ??
    mov dl, 20        ; ??
    int 10H
    lea dx, showstr2
    mov al, 0
    mov ah, 9
    int 21H

    mov ah, 2
    mov bh, 0
    mov dh, 16            ; ??
    mov dl, 20        ; ??
    int 10H
    lea dx, showstr3
    mov al, 0
    mov ah, 9
    int 21H

    mov ah, 2
    mov bh, 0
    mov dh, 23            ; ??
    mov dl, 0        ; ??
    int 10H
    lea dx, part
    mov al, 0
    mov ah, 9
    int 21H

   
    mov ah, 2
    mov bh, 0
    mov dh, 24            ; ??
    mov dl, 0        ; ??
    int 10H
    lea dx, login
    mov al, 0
    mov ah, 9
    int 21H

   
    mov ax, 0
    int 16H

    mov ah, 2
    mov bh, 0
    mov dh, 0            ; ??
    mov dl, 0        ; ??
    int 10H
   
    call flushclient        ; ?????
    call flushmessage        ; ?????

    pop dx
    pop bx
    pop ax
    ret
menu endp            ; ??????

;;------------------------------------------------------------------
   
keyboard proc near        ; ??????
keybegin:   
    push ax
get:
    mov ah, 0
    int 16H

    cmp ah, 53H
    je keyboardend
   
    cmp al, 20H
    jb nochar
    mov ah, 0        ; ????
    call charstack
    mov ah, 2
    mov dx, 0
    call charstack        ; ??????
    jmp get

nochar:                ; ?????
    cmp ah, 0eH          ; ???
    je backspace
   
    cmp ah, 53H        ; ?????????
    je keyboardend
   
    jmp get        ; ???????

   
backspace:
    mov ah, 1
    call charstack
    mov ah, 2
    mov dx, 0
    call charstack
    jmp get
   
keyboardend:
    pop ax
    ret
keyboard endp            ; ??????
    ;;

;;-----------------------------------------------------
charstack proc near
    jmp short charstart
    table dw charpush, charpop, charshow
    top dw 0
    index dw 0
charstart:   
    push bx
    push dx
    push di
    push es

    mov bx, data
    mov ds, bx
    lea si, buffer

    cmp ah, 2
    ja sret
    mov bl, ah
    mov bh, 0
    add bx, bx
    jmp word ptr table

charpush:            ;?? ?????
    mov bx, top
    mov , al
    inc top
    jmp sret

charpop:            ; ???????
    cmp top, 0
    je sret
    dec top
    mov bx, top
    mov al,
    jmp sret

charshow:            ; ??????????
    mov bx, 0b800H
    mov es, bx
    mov al, 160
    mov ah, 0
    mul dh
    mov di, ax
    add dl, dl
    mov dh, 0
    add di, dx

   
    mov bx, 0
charshows:
    cmp bx, top
    jne noempty
    mov byte ptr es:, ' '
    jmp sret
noempty:
    mov al,
    mov es:, al
    mov byte ptr es:, ' '
    inc bx
    add di, 2
    jmp charshows

sret:
    pop es
    pop di
    pop dx
    pop bx
    ret
charstack endp
;; --------------------------------------------------
   

showmessage proc near        ; ??????
    push es
    push si
    push di
   
    mov ax, 0b800H+0f0H
    mov es, ax
    mov si, dx
    mov di, 0
    mov ax, 0
showmessages:
    mov al, ds:
    cmp al, '$'
    je showover
    mov es:, al
    jmp showmessages

showover:
    pop di
    pop si
    pop es
    ret            ; ????????
   
;;--------------------------------------------------------------
   
flushall proc near        ; ????
    push bx
    push cx
    push es

    mov bx, 0b800H
    mov es, bx
    mov bx, 0
   
    mov cx, 2000
flushalls:
    mov byte ptr es:, ' '
    add bx, 2
    loop flushclients

    pop es
    pop cx
    pop bx
    ret
flushall endp            ; ??????



   
flushclient proc near        ; ?????
    push bx
    push cx
    push es

    mov bx, 0b800H
    mov es, bx
    mov bx, 0
   
    mov cx, 1840
flushclients:
    mov byte ptr es:, ' '
    add bx, 2
    loop flushclients

    pop es
    pop cx
    pop bx
    ret
flushclient endp        ; ???????




   
   
flushmessage proc near        ; ?????
    push bx
    push cx
    push es

    mov bx, 0b800H+0f0H
    mov es, bx
    mov bx, 0
   
    mov cx, 80
flushmessages:
    mov byte ptr es:, ' '
    add bx, 2
    loop flushmessages

    pop es
    pop cx
    pop bx
    ret
flushmessage endp        ; ???????
   





   
scroll proc near        ; ????
    push cx
    push si
    push di
    push es
    push ds

    mov si, 0b800H
    mov es, si
    mov ds, si
    mov si, 160
    mov di, 0
    cld

    mov cx, 24
scrolls:
    push cx
    mov cx, 160
    rep movsb
    pop cx
    loop scrolls

    mov cx, 80
    mov si, 0
scrolls1:   
    mov byte ptr [160*24+si], ' '
    add si, 2
    loop scrolls1
   
    pop ds
    pop es
    pop di
    pop si
    pop cx
    ret
scroll endp            ; ??????


show proc near            ; show??
   
   
code ends
end main
Posted on 2009-01-13 06:59:35 by mnzn2530