主题:用汇编编写的一个带颜色的九九乘法表图形变换程序
dispmsg macro message;宏定义字符串调用
lea dx,message
mov ah,9
int 21h
endm
dispsum macro sum,sum1;宏定义颜色调用
push bx
push cx
mov bh,0
mov cx,1
mov ah,09h
int 10h
mov bl, sum
mov cx,sum1
mov ah,09h
int 10h
pop cx
pop bx
endm
data segment
table db ?
msg1 db 'please input number(0-7):','$'
msg2 db '1:juxing 2:yousanjiao 3:zuosanjiao 4:daosanjiaoxing 5:sanjiaoxing 6:youshangsanjiao 7:zuoshangsanjiao 0:exit','$'
msg4 db '*******************************************************************','$'
data ends
code segment
assume cs:code,ds:data
start: mov ax,data
mov ds,ax
mov ax,3;设置显示模式80*25图显
int 10h
dispsum 10,109
dispmsg msg2
call back
t: dispsum 10,25
dispmsg msg1
mov ah,1
int 21h
mov bl,al
call huanhang
cmp bl,30h
jz q
cmp bl,31h
jz a
cmp bl,32h
jz b
cmp bl,33h
jz j
cmp bl,34h
jz d
cmp bl,35h
jz e
cmp bl,36h
jz f
cmp bl,37h
jz g
jmp t
a: call juxing
call huanhang
jmp t
b: call yousanjiao
call huanhang
jmp t
j: call zuosanjiao
call huanhang
jmp t
d: call daosanjiaoxing
call huanhang
jmp t
e: call sanjiaoxing
call huanhang
jmp t
f: call youshangsanjiao
call huanhang
jmp t
g: call zuoshangsanjiao
call huanhang
jmp t
q: mov ax,4c00h
int 21h
;矩形乘法表子程序
juxing proc near
dispsum 1,67
dispmsg msg4
call back
mov al,1
mov ch,1
mov bl,al
mov bh,10d
mov si,9
x: mul ch
div bh
mov dh,al
mov cl,ah
call output
inc ch
mov al,bl
sub si,1
jnz x
call back
inc bl
mov al,bl
mov ch,1
mov si,9
cmp bl,10
jnz x
dispsum 2,67
dispmsg msg4
call back
ret
juxing endp
;左上三角形乘法表子程序
zuoshangsanjiao proc near
dispsum 3,67
dispmsg msg4
call back
mov al,9
mov ch,9
mov bl,al
mov bh,bl
n: mov dh,10d
mul ch
div dh
mov dh,al
mov cl,ah
call output
dec ch
mov al,bl
dec bh
jnz n
call back
dec bl
mov al,bl
mov ch,bl
mov bh,bl
cmp bl,0
jnz n
dispsum 4,67
dispmsg msg4
call back
ret
zuoshangsanjiao endp
;右三角形乘法表子程序
yousanjiao proc near
dispsum 5,67
dispmsg msg4
call back
mov al,1
mov ch,1
mov bl,al
mov bh,bl
mov dh,56
mov table,dh
p: cmp dh,0
jz o
call space
dec dh
jnz p
o: mov dh,10d
mul ch
div dh
mov dh,al
mov cl,ah
call output
inc ch
mov al,bl
dec bh
jnz o
call back
inc bl
mov al,bl
mov ch,1
mov bh,bl
sub table,7
mov dh,table
cmp bl,10
jnz p
dispsum 6,67
dispmsg msg4
call back
ret
yousanjiao endp
;右上三角形乘法表子程序
youshangsanjiao proc near
dispsum 7,67
dispmsg msg4
call back
mov al,9
mov ch,9
mov bl,al
mov bh,bl
mov dh,0
mov table,dh
m: cmp dh,0
jz r
call space
dec dh
jnz m
r: mov dh,10d
mul ch
div dh
mov dh,al
mov cl,ah
call output
dec ch
mov al,bl
dec bh
jnz r
call back
dec bl
mov al,bl
mov ch,bl
mov bh,bl
add table,7
mov dh,table
cmp bl,0
jnz m
dispsum 8,67
dispmsg msg4
call back
ret
youshangsanjiao endp
;倒三角形乘法表子程序
daosanjiaoxing proc near
dispsum 9,67
dispmsg msg4
call back
mov al,9
mov ch,9
mov bl,al
mov bh,bl
mov dh,0
mov table,dh
h: cmp dh,0
jz i
call space
dec dh
jnz h
i: mov dh,10d
mul ch
div dh
mov dh,al
mov cl,ah
call output
dec ch
mov al,bl
dec bh
jnz i
call back
dec bl
mov al,bl
mov ch,bl
mov bh,bl
add table,3
mov dh,table
cmp bl,0
jnz h
dispsum 10,67
dispmsg msg4
call back
ret
daosanjiaoxing endp
;左三角形乘法表子程序
zuosanjiao proc near
dispsum 11,67
dispmsg msg4
call back
mov al,1
mov ch,1
mov bl,al
mov bh,bl
y: mov dh,10d
mul ch
div dh
mov dh,al
mov cl,ah
call output
inc ch
mov al,bl
dec bh
jnz y
call back
inc bl
mov al,bl
mov ch,1
mov bh,bl
cmp bl,10
jnz y
dispsum 12,67
dispmsg msg4
call back
ret
zuosanjiao endp
;三角形乘法表子程序
sanjiaoxing proc near
dispsum 13,67
dispmsg msg4
call back
mov al,1
mov ch,1
mov bl,al
mov bh,bl
mov dh,24
mov table,dh
z: cmp dh,0
jz w
call space
dec dh
jnz z
w: mov dh,10d
mul ch
div dh
mov dh,al
mov cl,ah
call output
inc ch
mov al,bl
dec bh
jnz w
call back
inc bl
mov al,bl
mov ch,1
mov bh,bl
sub table,3
mov dh,table
cmp bl,10
jnz z
dispsum 14,67
dispmsg msg4
call back
ret
sanjiaoxing endp
;打印输出子程序
output proc near
dispsum 1,1
add bl,30h
mov dl,bl
mov ah,2
int 21h
dispsum 2,1
mov dl,'*'
mov ah,2
int 21h
dispsum 12,1
add ch,30h
mov dl,ch
mov ah,2
int 21h
dispsum 10,1
mov dl,'='
mov ah,2
int 21h
dispsum 11,1
add dh,30h
mov dl,dh
mov ah,2
int 21h
dispsum 14,1
add cl,30h
mov dl,cl
mov ah,2
int 21h
mov dl,' '
mov ah,2
int 21h
sub bl,30h
sub ch,30h
ret
output endp
;回车换行子程序
back proc near
mov dl,0Ah
mov ah,2
int 21h
mov dl,0Dh
mov ah,2
int 21h
ret
back endp
;空格子程序
space proc near
push dx
push ax
mov dl,' '
mov ah,2
int 21h
pop ax
pop dx
ret
space endp
huanhang proc near
mov cx,7
v: call back
dec cx
jnz v
ret
huanhang endp
code ends
end start
大家看一下还有什么需要改进的
lea dx,message
mov ah,9
int 21h
endm
dispsum macro sum,sum1;宏定义颜色调用
push bx
push cx
mov bh,0
mov cx,1
mov ah,09h
int 10h
mov bl, sum
mov cx,sum1
mov ah,09h
int 10h
pop cx
pop bx
endm
data segment
table db ?
msg1 db 'please input number(0-7):','$'
msg2 db '1:juxing 2:yousanjiao 3:zuosanjiao 4:daosanjiaoxing 5:sanjiaoxing 6:youshangsanjiao 7:zuoshangsanjiao 0:exit','$'
msg4 db '*******************************************************************','$'
data ends
code segment
assume cs:code,ds:data
start: mov ax,data
mov ds,ax
mov ax,3;设置显示模式80*25图显
int 10h
dispsum 10,109
dispmsg msg2
call back
t: dispsum 10,25
dispmsg msg1
mov ah,1
int 21h
mov bl,al
call huanhang
cmp bl,30h
jz q
cmp bl,31h
jz a
cmp bl,32h
jz b
cmp bl,33h
jz j
cmp bl,34h
jz d
cmp bl,35h
jz e
cmp bl,36h
jz f
cmp bl,37h
jz g
jmp t
a: call juxing
call huanhang
jmp t
b: call yousanjiao
call huanhang
jmp t
j: call zuosanjiao
call huanhang
jmp t
d: call daosanjiaoxing
call huanhang
jmp t
e: call sanjiaoxing
call huanhang
jmp t
f: call youshangsanjiao
call huanhang
jmp t
g: call zuoshangsanjiao
call huanhang
jmp t
q: mov ax,4c00h
int 21h
;矩形乘法表子程序
juxing proc near
dispsum 1,67
dispmsg msg4
call back
mov al,1
mov ch,1
mov bl,al
mov bh,10d
mov si,9
x: mul ch
div bh
mov dh,al
mov cl,ah
call output
inc ch
mov al,bl
sub si,1
jnz x
call back
inc bl
mov al,bl
mov ch,1
mov si,9
cmp bl,10
jnz x
dispsum 2,67
dispmsg msg4
call back
ret
juxing endp
;左上三角形乘法表子程序
zuoshangsanjiao proc near
dispsum 3,67
dispmsg msg4
call back
mov al,9
mov ch,9
mov bl,al
mov bh,bl
n: mov dh,10d
mul ch
div dh
mov dh,al
mov cl,ah
call output
dec ch
mov al,bl
dec bh
jnz n
call back
dec bl
mov al,bl
mov ch,bl
mov bh,bl
cmp bl,0
jnz n
dispsum 4,67
dispmsg msg4
call back
ret
zuoshangsanjiao endp
;右三角形乘法表子程序
yousanjiao proc near
dispsum 5,67
dispmsg msg4
call back
mov al,1
mov ch,1
mov bl,al
mov bh,bl
mov dh,56
mov table,dh
p: cmp dh,0
jz o
call space
dec dh
jnz p
o: mov dh,10d
mul ch
div dh
mov dh,al
mov cl,ah
call output
inc ch
mov al,bl
dec bh
jnz o
call back
inc bl
mov al,bl
mov ch,1
mov bh,bl
sub table,7
mov dh,table
cmp bl,10
jnz p
dispsum 6,67
dispmsg msg4
call back
ret
yousanjiao endp
;右上三角形乘法表子程序
youshangsanjiao proc near
dispsum 7,67
dispmsg msg4
call back
mov al,9
mov ch,9
mov bl,al
mov bh,bl
mov dh,0
mov table,dh
m: cmp dh,0
jz r
call space
dec dh
jnz m
r: mov dh,10d
mul ch
div dh
mov dh,al
mov cl,ah
call output
dec ch
mov al,bl
dec bh
jnz r
call back
dec bl
mov al,bl
mov ch,bl
mov bh,bl
add table,7
mov dh,table
cmp bl,0
jnz m
dispsum 8,67
dispmsg msg4
call back
ret
youshangsanjiao endp
;倒三角形乘法表子程序
daosanjiaoxing proc near
dispsum 9,67
dispmsg msg4
call back
mov al,9
mov ch,9
mov bl,al
mov bh,bl
mov dh,0
mov table,dh
h: cmp dh,0
jz i
call space
dec dh
jnz h
i: mov dh,10d
mul ch
div dh
mov dh,al
mov cl,ah
call output
dec ch
mov al,bl
dec bh
jnz i
call back
dec bl
mov al,bl
mov ch,bl
mov bh,bl
add table,3
mov dh,table
cmp bl,0
jnz h
dispsum 10,67
dispmsg msg4
call back
ret
daosanjiaoxing endp
;左三角形乘法表子程序
zuosanjiao proc near
dispsum 11,67
dispmsg msg4
call back
mov al,1
mov ch,1
mov bl,al
mov bh,bl
y: mov dh,10d
mul ch
div dh
mov dh,al
mov cl,ah
call output
inc ch
mov al,bl
dec bh
jnz y
call back
inc bl
mov al,bl
mov ch,1
mov bh,bl
cmp bl,10
jnz y
dispsum 12,67
dispmsg msg4
call back
ret
zuosanjiao endp
;三角形乘法表子程序
sanjiaoxing proc near
dispsum 13,67
dispmsg msg4
call back
mov al,1
mov ch,1
mov bl,al
mov bh,bl
mov dh,24
mov table,dh
z: cmp dh,0
jz w
call space
dec dh
jnz z
w: mov dh,10d
mul ch
div dh
mov dh,al
mov cl,ah
call output
inc ch
mov al,bl
dec bh
jnz w
call back
inc bl
mov al,bl
mov ch,1
mov bh,bl
sub table,3
mov dh,table
cmp bl,10
jnz z
dispsum 14,67
dispmsg msg4
call back
ret
sanjiaoxing endp
;打印输出子程序
output proc near
dispsum 1,1
add bl,30h
mov dl,bl
mov ah,2
int 21h
dispsum 2,1
mov dl,'*'
mov ah,2
int 21h
dispsum 12,1
add ch,30h
mov dl,ch
mov ah,2
int 21h
dispsum 10,1
mov dl,'='
mov ah,2
int 21h
dispsum 11,1
add dh,30h
mov dl,dh
mov ah,2
int 21h
dispsum 14,1
add cl,30h
mov dl,cl
mov ah,2
int 21h
mov dl,' '
mov ah,2
int 21h
sub bl,30h
sub ch,30h
ret
output endp
;回车换行子程序
back proc near
mov dl,0Ah
mov ah,2
int 21h
mov dl,0Dh
mov ah,2
int 21h
ret
back endp
;空格子程序
space proc near
push dx
push ax
mov dl,' '
mov ah,2
int 21h
pop ax
pop dx
ret
space endp
huanhang proc near
mov cx,7
v: call back
dec cx
jnz v
ret
huanhang endp
code ends
end start
大家看一下还有什么需要改进的