; 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