标题:一个简单的99乘法表
只看楼主
神vLinux飘飘
Rank: 13Rank: 13Rank: 13Rank: 13
来 自:浙江杭州
等 级:贵宾
威 望:91
帖 子:6140
专家分:217
注 册:2004-7-17
 问题点数:0 回复次数:8 
一个简单的99乘法表

;九九乘法口诀表
;作者:神vLinux飘飘
stack segment stack
stack ends

data segment
author db "Write by vlinux$"
data ends

code segment
assume cs:code,ds:data,ss:stack
_main:
mov ch,1d
_main_next_1:
call _print_crlf
mov cl,1d
_main_next_2:
mov ah,0d
mov al,cl
call _print_int
mov dl,42
mov ah,2
int 21h
mov ah,0d
mov al,ch
call _print_int
mov dl,61
mov ah,2
int 21h
mov ah,0d
mov al,cl
mul ch
call _print_int
call _print_tab
mov dl,ch
inc dl
inc cl
cmp cl,dl
jne _main_next_2
inc ch
cmp ch,10d
jne _main_next_1
call _print_crlf
call _print_crlf
mov ax,data
mov ds,ax
mov dx,offset author
mov ah,9
int 21h
mov ah,4ch
int 21h

_print_int:
push ax
push bx
push cx
push dx
pushf
mov cx,10000d
mov bl,0d
_print_int_next_1:
cwd
div cx
push ax
push dx
cmp al,0d
jne _print_int_flag_1
cmp bl,0d
je _print_int_flag_2
_print_int_flag_1:
mov ah,2
mov dl,al
add dl,48
int 21h
mov bl,1d
_print_int_flag_2:
mov ax,cx
mov cx,10d
cwd
div cx
mov cx,ax
pop ax
pop dx
cmp cx,1d
jne _print_int_next_1
mov dl,al
add dl,48
mov ah,2
int 21h
popf
pop dx
pop cx
pop bx
pop ax
ret

_print_tab:
push ax
push dx
mov dl,9
mov ah,2
int 21h
pop dx
pop ax
ret

_print_crlf:
push ax
push dx
mov dl,10
mov ah,2
int 21h
pop dx
pop ax
ret
code ends
end _main

搜索更多相关主题的帖子: 乘法表 mov stack segment int 
2006-03-18 07:54
苦味酸
Rank: 2
等 级:新手上路
威 望:3
帖 子:142
专家分:0
注 册:2005-9-9
得分:0 

能把你这段程序的流程图参考一下么?
这样直接读代码很困难
联系方式:xia0tan2006@126.com


『站在风口浪尖紧握住鼠标旋转!』 『不在于选择什么,而在于坚持多久!』
2006-03-19 22:16
Fudan_Men
Rank: 1
等 级:新手上路
帖 子:60
专家分:0
注 册:2005-9-14
得分:0 
问一下关于输出寄存器中的数字怎么输出啊?
2006-04-04 14:53
big_min
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2006-6-2
得分:0 

能不能将一些语句解释一下啊?我看不懂。请LZ或是高手们帮帮忙!

联系方式:big_min@sohu.com
QQ:395669069

2006-06-02 19:01
big_min
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2006-6-2
得分:0 
_print_tab:
push ax
push dx
mov dl,9
mov ah,2
int 21h
pop dx
pop ax
ret

_print_crlf:
push ax
push dx
mov dl,10
mov ah,2
int 21h
pop dx
pop ax
ret
最后这两段代码有什么用,代表什么意思?
2006-06-02 21:17
云中雾
Rank: 1
等 级:新手上路
威 望:1
帖 子:168
专家分:3
注 册:2005-12-30
得分:0 

慢慢研究一下


白色的忧郁让我白色的思念从洁白到苍白,从苍白到空白,比空白更空白,变成深白的坦白!
2006-06-04 10:15
ly2008boy
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2007-9-12
得分:0 
  搞个注释更完美..
2007-09-12 20:34
xieriguo
Rank: 1
等 级:新手上路
帖 子:35
专家分:0
注 册:2007-5-8
得分:0 
我也想看看注释

2007-09-13 16:08
succinum
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2013-11-6
得分:0 
;在屏幕上显示99乘法表
code segment
    assume cs:code
    _main:
            ;清空屏幕
            MOV AH,6
            MOV AL,0
            MOV CH,0
            MOV CL,0
            MOV DH,24
            MOV DL,79
            MOV BH,01110000B
            INT 10H
            ;置光标
            MOV AH,2
            MOV DH,0
            MOV DL,0
            MOV BH,0
            INT 10H
        
            mov ch,1d
    _main_next_1:
            call _print_nextline    ;输出换行
            mov cl,1d
    _main_next_2:
            ;输出被乘数
            mov ah,0d    ;ax高位清零
            mov al,cl   
            call _print_int
            
            ;dos功能调用,输出*号
            mov dl,42        
            mov ah,2
            int 21h
            
            ;输出乘数
            mov ah,0d
            mov al,ch   
            call _print_int
            
            ;dos功能调用,输出=号
            mov dl,61        
            mov ah,2
            int 21h
            
            mov ah,0d
            mov al,cl        ;ch总是乘数,cl总是被乘数
            mul ch
            call _print_int
            call _print_tab
            
            mov dl,ch
            inc dl
            inc cl
            cmp cl,dl        ;如果相等,乘数等于被乘数,跳出循环,换行
            jne _main_next_2
            inc ch
            cmp ch,10d        ;如果乘数之前是等于9的,跳出循环
            jne _main_next_1
            call _print_nextline
            call _print_nextline
               
            mov ah,4ch
            int 21h
            
    _print_int:            ;输出AX的数值,同时
            push ax
            push bx
            push cx
            push dx
            pushf        ;标志寄存器进栈
            mov cx,10000d    ;从万位依此输出
            mov bl,0d        ;bx低位清零
    _print_int_next_1:
            cwd        ;ax扩展为dx ax双字
            div cx    ;dx存放余数,ax存放商
            push ax
            push dx
            cmp al,0d        
            jne _print_int_flag_1
            cmp bl,0d   
            je _print_int_flag_2
    _print_int_flag_1:
            mov ah,2
            mov dl,al
            add dl,48
            int 21h
            mov bl,1d
    _print_int_flag_2:
            mov ax,cx   
            mov cx,10d
            cwd
            div cx
            mov cx,ax    ;cx变为原来的十分之一
            pop ax
            pop dx
            cmp cx,1d
            jne _print_int_next_1
            ;输出最后一个个位数
            mov dl,al
            add dl,48   
            mov ah,2
            int 21h
            popf
            pop dx
            pop cx
            pop bx
            pop ax
            ret
   
    _print_tab:    ;输出一个制表符
            push ax
            push dx
            mov dl,9
            mov ah,2
            int 21h
            pop dx
            pop ax
            ret
   
    _print_nextline:        ;进行换行
            push ax
            push dx
            mov dl,0dH
            mov ah,2
            int 21h
            mov dl,0AH
            mov ah,2
            int 21h
            pop dx
            pop ax
            ret
code ends
end _main
            
修改了一点点,增加了注释,希望能有所帮助。
2014-06-01 12:36



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-51149-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.634875 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved