检视文章

Assembly組合語言程式:demo4.asm、demo5.asm、demo6.asm

; demo4.asm

        .286
        .model  small
        .stack
        .data
demo    db      'DEMO4 program Version 1.0 Copyright(c) 1994 by Brent Su.$'
ver     db      'MASM Version 5.1$'
ibmcpu  dw      80
ibmpc   dw      486
ibm     db      '-50 speed 167Mhz$'
hexs1   db      'HEX1 = $'
hex1    dw      0abcdH
hexs2   db      'HEX2 = $'
hex2    dw      0586aH
numstr  db      80 dup(0)


; Assembly Function
        .code
  :      :     :
itoa    proc
        pusha
        mov     cx,0
        mov     bx,10
@@divide:
        mov     dx,0
        div     bx
        push    dx
        inc     cx
        cmp     ax,0
        jnz     @@divide
        lea     bx,numstr
@@output:
        pop     ax
        add     al,48
        mov     [bx],al
        inc     bx
        loop    @@output
        mov     byte ptr [bx],'$'
        popa
        ret
itoa    endp

htoa    proc
        pusha
        mov     cx,4
@@convert:
        mov     dx,ax
        and     dx,000fH
        push    dx
        shr     ax,4
        loop    @@convert
        mov     cx,4
        lea     bx,numstr
@@output2:
        pop     ax
        cmp     al,10
        jae     @@hex2
        add     al,48
        jmp     @@out2
@@hex2:
        add     al,55
@@out2:
        mov     [bx],al
        inc     bx
        loop    @@output2
        mov     byte ptr [bx],'$'
        popa
        ret
htoa    endp

printint proc
        call    itoa
        lea     dx,numstr
        call    printstr
        ret
printint endp

printhex proc
        call    htoa
        lea     dx,numstr
        call    printstr
        ret
printhex endp


; main program
        .code
start:
        mov     ax,@data
        mov     ds,ax

        call    clrscr

        lea     dx,demo
        call    printline

        mov     ax,ibmcpu
        call    printint

        mov     ax,ibmpc
        call    printint

        lea     dx,ibm
        call    printline

        lea     dx,hexs1
        call    printstr
        mov     ax,hex1
        call    printhex
        call    prnnewline

        lea     dx,hexs2
        call    printstr
        mov     ax,hex2
        call    printhex
        call    prnnewline

        mov     ax,4c00H
        int     21H

        end     start

; demo5.asm

        .286
        .model  small
        .stack
        .data
demo    db      'DEMO5 program Version 1.0 Copyright(c) 1994 by Brent Su.$'
ver     db      'MASM Version 5.1$'
ibmcpu  dw      80
ibmpc   dw      486
ibm     db      '-50 speed 167Mhz$'
hexs1   db      'HEX1 = $'
hex1    dw      0abcdH
hexs2   db      'HEX2 = $'
hex2    dw      0586aH
binstr  db      'DCBAH and E468H = $'
binstr2 db      'DCBAH or  E468H = $'
bin1    dw      0dcbaH
bin2    dw      0e468H
anser   dw      ?
numstr  db      80 dup(0)


; Assembly Function
        .code
clrscr  proc
        pusha
        mov     al,0
        mov     bh,07H
        mov     cx,0
        mov     dh,24
        mov     dl,79
        mov     ah,06H
        int     10H
        mov     dx,0
        mov     bh,0
        mov     ah,02H
        int     10H
        popa
        ret
clrscr  endp

printstr proc
        push    ax
        mov     ah,09H
        int     21H
        pop     ax
        ret
printstr endp

printchar proc
        push    ax
        mov     ah,02H
        int     21H
        pop     ax
        ret
printchar endp

printline proc
        pusha
        mov     ah,09H
        int     21H
        mov     dl,10
        call    printchar
        mov     dl,13
        call    printchar
        popa
        ret
printline endp

prnnewline proc
        push    dx
        mov     dl,10
        call    printchar
        mov     dl,13
        call    printchar
        pop     dx
        ret
prnnewline endp

itoa    proc
        pusha
        mov     cx,0
        mov     bx,10
@@divide:
        mov     dx,0
        div     bx
        push    dx
        inc     cx
        cmp     ax,0
        jnz     @@divide
        lea     bx,numstr
@@output:
        pop     ax
        add     al,48
        mov     [bx],al
        inc     bx
        loop    @@output
        mov     byte ptr [bx],'$'
        popa
        ret
itoa    endp

htoa    proc
        pusha
        mov     cx,4
@@convert:
        mov     dx,ax
        and     dx,000fH
        push    dx
        shr     ax,4
        loop    @@convert
        mov     cx,4
        lea     bx,numstr
@@output2:
        pop     ax
        cmp     al,10
        jae     @@hex2
        add     al,48
        jmp     @@out2
@@hex2:
        add     al,55
@@out2:
        mov     [bx],al
        inc     bx
        loop    @@output2
        mov     byte ptr [bx],'$'
        popa
        ret
htoa    endp

btoa    proc
        pusha
        mov     cx,16
@@convert3:
        mov     dx,ax
        and     dx,0001H
        push    dx
        shr     ax,1
        loop    @@convert3
        mov     cx,16
        lea     bx,numstr
@@output3:
        pop     ax
        add     al,48
        mov     [bx],al
        inc     bx
        loop    @@output3
        mov     byte ptr [bx],'$'
        popa
        ret
btoa    endp

printint proc
        push    dx
        call    itoa
        lea     dx,numstr
        call    printstr
        pop     dx
        ret
printint endp

printhex proc
        push    dx
        call    htoa
        lea     dx,numstr
        call    printstr
        pop     dx
        ret
printhex endp

printbin proc
        push    dx
        call    btoa
        lea     dx,numstr
        call    printstr
        pop     dx
        ret
printbin endp


; main program
        .code
start:
        mov     ax,@data
        mov     ds,ax

        call    clrscr

        lea     dx,demo
        call    printline

        mov     ax,ibmcpu
        call    printint

        mov     ax,ibmpc
        call    printint

        lea     dx,ibm
        call    printline

        lea     dx,hexs1
        call    printstr
        mov     ax,hex1
        call    printhex
        call    prnnewline

        lea     dx,hexs2
        call    printstr
        mov     ax,hex2
        call    printhex
        call    prnnewline
        call    prnnewline

        mov     ax,bin1
        mov     dx,bin2
        and     ax,dx           ; and command
        mov     anser,ax

        lea     dx,binstr
        call    printstr
        mov     ax,anser
        call    printhex
        call    prnnewline

        lea     dx,binstr
        call    printstr
        mov     ax,anser
        call    printbin
        call    prnnewline
        call    prnnewline

        mov     ax,bin1
        call    printbin
        call    prnnewline
        mov     ax,bin2
        call    printbin
        call    prnnewline
        mov     ax,anser
        call    printbin
        call    prnnewline
        call    prnnewline

        mov     ax,bin1
        mov     dx,bin2
        or      ax,dx            ; or command
        mov     anser,ax

        lea     dx,binstr2
        call    printstr
        mov     ax,anser
        call    printhex
        call    prnnewline

        lea     dx,binstr2
        call    printstr
        mov     ax,anser
        call    printbin
        call    prnnewline
        call    prnnewline

        mov     ax,bin1
        call    printbin
        call    prnnewline
        mov     ax,bin2
        call    printbin
        call    prnnewline
        mov     ax,anser
        call    printbin
        call    prnnewline

        mov     ax,4c00H
        int     21H

        end     start


; demo6.asm

        .286
        .model  small
        .stack
        .data
demo    db      'DEMO6 program Version 1.0 Copyright(c) 1994 by Brent Su.$'
ver     db      'MASM Version 5.1$'
ibmcpu  dw      80
ibmpc   dw      486
ibm     db      '-50 speed 167Mhz$'
intstr1 db      '386$'
intstr2 db      '-2$'
intstr3 db      '01001$'
anser1  dw      0
anser2  dw      0
anser3  dw      0
numstr  db      80 dup(0)
tonum   dw      0

; Assembly Function
        .code
clrscr  proc
        pusha
        mov     al,0
        mov     bh,07H
        mov     cx,0
        mov     dh,24
        mov     dl,79
        mov     ah,06H
        int     10H
        mov     dx,0
        mov     bh,0
        mov     ah,02H
        int     10H
        popa
        ret
clrscr  endp

printstr proc
        push    ax
        mov     ah,09H
        int     21H
        pop     ax
        ret
printstr endp

printchar proc
        push    ax
        mov     ah,02H
        int     21H
        pop     ax
        ret
printchar endp

printline proc
        pusha
        mov     ah,09H
        int     21H
        mov     dl,10
        call    printchar
        mov     dl,13
        call    printchar
        popa
        ret
printline endp

prnnewline proc
        push    dx
        mov     dl,10
        call    printchar
        mov     dl,13
        call    printchar
        pop     dx
        ret
prnnewline endp

itoa    proc
        pusha
        mov     cx,0
        mov     bx,10
@@divide:
        mov     dx,0
        div     bx
        push    dx
        inc     cx
        cmp     ax,0
        jnz     @@divide
        lea     bx,numstr
@@output:
        pop     ax
        add     al,48
        mov     [bx],al
        inc     bx
        loop    @@output
        mov     byte ptr [bx],'$'
        popa
        ret
itoa    endp

htoa    proc
        pusha
        mov     cx,4
@@convert:
        mov     dx,ax
        and     dx,000fH
        push    dx
        shr     ax,4
        loop    @@convert
        mov     cx,4
        lea     bx,numstr
@@output2:
        pop     ax
        cmp     al,10
        jae     @@hex2
        add     al,48
        jmp     @@out2
@@hex2:
        add     al,55
@@out2:
        mov     [bx],al
        inc     bx
        loop    @@output2
        mov     byte ptr [bx],'$'
        popa
        ret
htoa    endp

btoa    proc
        pusha
        mov     cx,16
@@convert3:
        mov     dx,ax
        and     dx,0001H
        push    dx
        shr     ax,1
        loop    @@convert3
        mov     cx,16
        lea     bx,numstr
@@output3:
        pop     ax
        add     al,48
        mov     [bx],al
        inc     bx
        loop    @@output3
        mov     byte ptr [bx],'$'
        popa
        ret
btoa    endp

atoi    proc
        pusha
        mov     bx,dx
        mov     di,0
        mov     si,0
        mov     ax,0
        mov     tonum,0
        cmp     byte ptr [bx],'-'
        jne     @@getchar1
        mov     di,1
        inc     bx
@@getchar1:
        mov     al,[bx]
        cmp     al,'$'
        je      @@getok1
        sub     al,'0'
        push    ax
        inc     bx
        inc     si
        jmp     @@getchar1
@@getok1:
        cmp     si,0
        jz      @@exit1
        mov     cx,1
        mov     bx,10
@@multipli:
        pop     ax
        mul     cx
        add     tonum,ax
        mov     ax,cx
        mul     bx
        mov     cx,ax
        dec     si
        jnz     @@multipli
        cmp     di,0
        jz      @@exit1
        neg     tonum
@@exit1:
        popa
        ret
atoi    endp

atoh    proc
        pusha
        mov     bx,dx
        mov     si,0
        mov     ax,0
        mov     tonum,0
@@skip0:
        cmp     byte ptr [bx],'0'
        jne     @@getchar2
        inc     bx
        jmp     @@skip0
@@getchar2:
        mov     al,[bx]
        cmp     al,'$'
        je      @@getok2
        cmp     al,'A'
        jae     @@hex0
        sub     al,48
        jmp     @@hexok0
@@hex0:
        cmp     al,'a'
        jae     @@hex1
        sub     al,55
        jmp     @@hexok0
@@hex1:
        sub     al,87
@@hexok0:
        push    ax
        inc     bx
        inc     si
        jmp     @@getchar2
@@getok2:
        cmp     si,0
        jz      @@exit2
        mov     cx,1
        mov     bx,16
@@multipli1:
        pop     ax
        mul     cx
        add     tonum,ax
        mov     ax,cx
        mul     bx
        mov     cx,ax
        dec     si
        jnz     @@multipli1
@@exit2:
        popa
        ret
atoh    endp

printint proc
        push    dx
        call    itoa
        lea     dx,numstr
        call    printstr
        pop     dx
        ret
printint endp

printhex proc
        push    dx
        call    htoa
        lea     dx,numstr
        call    printstr
        pop     dx
        ret
printhex endp

printbin proc
        push    dx
        call    btoa
        lea     dx,numstr
        call    printstr
        pop     dx
        ret
printbin endp


; main program
        .code
start:
        mov     ax,@data
        mov     ds,ax

        call    clrscr

        lea     dx,demo
        call    printline

        mov     ax,ibmcpu
        call    printint

        mov     ax,ibmpc
        call    printint

        lea     dx,ibm
        call    printline

        lea     dx,intstr1
        call    atoi
        mov     ax,tonum
        mov     anser1,ax

        lea     dx,intstr2
        call    atoi
        mov     ax,tonum
        mov     anser2,ax

        lea     dx,intstr3
        call    atoh
        mov     ax,tonum
        mov     anser3,ax

        mov     ax,anser1
        call    printint
        call    prnnewline

        mov     ax,anser2
        call    printint
        call    prnnewline

        mov     ax,anser3
        call    printint
        call    prnnewline

        mov     ax,anser3
        call    printhex
        call    prnnewline

        mov     ax,4c00H
        int     21H

        end     start

蘇言霖 2013/09/10 0 1576
评论
排序依据: 
每页:
 
  • 目前还没有评论
评分
0
文章资讯
蘇言霖
「超級懶貓級」社群網站站長
2013/09/10 (3874天前)
动作