www.pudn.com > xiaojiujiu_asm.rar > 42.asm
dseg segment data db 100 dseg ends sseg segment stack stack db 20 dup(0) sseg ends cseg segment assume cs:cseg,ds:dseg assume ss:sseg start: mov ax,dseg mov ds,ax mov ax,sseg mov ss,ax mov sp,size stack xor ax,ax mov bh,0 ;数字1初始化为0 mov bl,9 ;递减9次 outt: inc bh mov dh,bh ;显示数字2 如: 1(bh)*1(dh),把bh赋给dh inn: call dis1 call star call dis2 call equl ;等号 mov al,bh ;乘法第一项 mul dh ;和第二项相乘 ;mov ah,al ;因为结果不超过127(9*9=81),所以把al赋给ah不会出错(这步意义在于可能的al值dis后改变,考虑删掉) call dis3 ;显示乘积 dec dh ;内层计数器减1(数字2减1) 如: 2*2后变为2*1 jnz spac ;减1后不为0则显示' ' 和后面输出隔开 call cr_lf ;为0则进行下一个数字 dec bl ;外层计数器减1 jnz outt ;外层计数器不为0继续下一个数字 mov ah,4ch ;退出程序 int 21h spac: call spa ;打印一个空格 jmp inn ;调到内层循环 ;-------------------------- ;显示数字1 dis1 proc near mov dl,bh add dl,30h mov ah,2 int 21h ret dis1 endp ;------------------------- ;显示数字2 dis2 proc near mov dl,dh add dl,30h mov ah,2 int 21h ret dis2 endp ;-------------------------- ;显示数字3 dis3 proc near push cx mov cl,10 cbw div cl push ax mov dl,al add dl,30h mov ah,2 int 21h pop ax mov dl,ah add dl,30h mov ah,2 int 21h pop cx ret dis3 endp ;------------------------- ;显示'*' star proc near mov dl,'*' mov ah,2 int 21h ret star endp ;------------------------- ;显示' ' spa proc near mov dl,' ' mov ah,2 int 21h ret spa endp ;------------------------- ;显示'=' equl proc near mov dl,'=' mov ah,2 int 21h ret equl endp ;------------------------- ;子程序:回车换行 cr_lf proc near mov ah,2 mov dl,0dh int 21h mov dl,0ah int 21h ret cr_lf endp ;--------------------------- cseg ends end start