注册 登录
编程论坛 汇编论坛

9*9乘法表终于搞出来了,有容大哥。

小习小习 发布于 2012-11-08 16:27, 1602 次点击
rt,对于我把这个写出来,花了很多时间,也学会了很多知识,代码有待改进,向各位大牛请调。
程序代码:
;#Mode=DOS
;
MASMPlus 单文件代码模板 - 纯 DOS 程序
;
--------------------------------------------------------------------
;
单个文件需要指定编译模式,否则默认是EXE方式,在系统设置中可以设置默认是DOS还是Windows.
;
编译模式自带了DOS/COM/CON/EXE/DLL/LIB这几种,如果有必要,可以更改ide.ini添加新的编译模式
;
当然,更好的是创建为一个工程.更方便及易于管理,使用方法:按Ctrl多选->创建工程.必须有多个文件

assume cs:code,ds:data,ss:stack
data segment
     bmul    db 0
     mulshu  db 0
data ends

stack segment
     dw 128 dup(?)
stack ends

code segment
       ;寄存器初始化
start:  mov ax,data
     mov ds,ax
     mov ax,stack
     mov ss,ax
     mov sp,128
   
     mov cx,9
     mov al,bmul     ;ax存放被乘数
     mov bl,mulshu   ;bx存放乘数
     mov ax,0
   
     ;用两个循环计算并且显示
  s1:inc ax
     mov bx,0
  s2:inc bx
     push ax
     push bx
     add al,30h
     add bl,30h
     mov dl,al
     mov ah,2
     int 21h
     mov dl,42
     mov ah,2
     int 21h
     mov dl,bl
     mov ah,2
     int 21h
     mov dl,61
     mov ah,2
     int 21h
     pop bx
     pop ax
     push ax
     push bx
   
     mul bl
     call show  ;显示计算结果
   
     mov ah,02
     mov dl,32
     int 21h    ;显示空格
     pop bx
     pop ax
     cmp ax,bx
     jnz s2
   
     call hh   ;回车换行
     loop s1
   
     ;查看结果并返回dos
     mov ah,01
     int 21h
     mov ah,4ch
     int 21h
     ;
     ;功能:回车换行
  hh:
     push ax
     push dx
     mov ah,02
     mov dl,0dh
     int 21h
     mov ah,02
     mov dl,0ah
     int 21h
     pop dx
     pop ax
     ret
     ;
     ;功能:把乘积转换为字符
show:
     push dx
     push ax
   
     call diw   ;实施除法除10获取积的各个位数
      
     add ah,30h
     add al,30h
     push ax
     mov dl,al
     mov ah,02
     int 21h
     pop ax
     mov dl,ah
     mov ah,02
     int 21h
     pop dx
     pop ax
     ret
     ;
     ;功能:求积的位数,ah存放个位,al存放十位
diw:
     push bx
     mov bx,10
     div bl
     pop bx
     ret
   
     code ends
     end start
只有本站会员才能查看附件,请 登录


[ 本帖最后由 小习小习 于 2012-11-8 16:32 编辑 ]
15 回复
#2
zklhp2012-11-08 16:27
我是来膜拜大作的
#3
小习小习2012-11-08 16:29
回复 2楼 zklhp
z版给点意见 ==我把效果发上去
#4
有容就大2012-11-08 18:28
很不错哦
不过那个个位数前面的0去掉下更好看些。
#5
小习小习2012-11-08 18:54
回复 4楼 有容就大
嗯,去搞搞
#6
有容就大2012-11-08 19:40
回复 5楼 小习小习
代码排版也可以改进改进
我传本书到论坛上了 有兴趣可以看下 我现在也正在读这个
https://down.bccn.net/3560.html
呵呵 捞点下载分。
#7
小习小习2012-11-08 20:01
程序代码:
;#Mode=DOS
;
MASMPlus 单文件代码模板 - 纯 DOS 程序
;
--------------------------------------------------------------------
;
单个文件需要指定编译模式,否则默认是EXE方式,在系统设置中可以设置默认是DOS还是Windows.
;
编译模式自带了DOS/COM/CON/EXE/DLL/LIB这几种,如果有必要,可以更改ide.ini添加新的编译模式
;
当然,更好的是创建为一个工程.更方便及易于管理,使用方法:按Ctrl多选->创建工程.必须有多个文件

assume cs:code,ds:data,ss:stack
data segment
     bmul    db 0
     mulshu  db 0
data ends

stack segment
     dw 128 dup(?)
stack ends

code segment
       ;寄存器初始化
start:  mov ax,data
     mov ds,ax
     mov ax,stack
     mov ss,ax
     mov sp,128
   
     mov cx,9
     mov al,bmul     ;ax存放被乘数
     mov bl,mulshu   ;bx存放乘数
     mov ax,0
   
     ;用两个循环计算并且显示
  s1:inc ax
     mov bx,0
  s2:inc bx
     push ax
     push bx
     add al,30h
     add bl,30h
     mov dl,al
     mov ah,2
     int 21h
     mov dl,42
     mov ah,2
     int 21h
     mov dl,bl
     mov ah,2
     int 21h
     mov dl,61
     mov ah,2
     int 21h
     pop bx
     pop ax
     push ax
     push bx
   
     mul bl
     call show  ;显示计算结果
   
     mov ah,02
     mov dl,32
     int 21h    ;显示空格
     pop bx
     pop ax
     cmp ax,bx
     jnz s2
   
     call hh   ;回车换行
     loop s1
   
     ;查看结果并返回dos
     mov ah,01
     int 21h
     mov ah,4ch
     int 21h
     ;
     ;功能:回车换行
  hh:
     push ax
     push dx
     mov ah,02
     mov dl,0dh
     int 21h
     mov ah,02
     mov dl,0ah
     int 21h
     pop dx
     pop ax
     ret
     ;
     ;功能:把乘积转换为字符
show:
     push dx
     push bx
     push ax
   
     call diw ;实施除法除10获取积的各个位数
     push ax
     cmp al,0
     jz ok1
     add al,30h
     mov dl,al
     mov ah,02
     int 21h

 ok1:pop ax
     mov bx,ax
     add ah,30h
     mov dl,ah
     mov ah,02
     int 21h
     cmp bl,0
     ja ok2
     mov dl,32
     mov ah,02
     int 21h

 ok2:pop ax
     pop bx
     pop dx
     ret
     ;
     ;功能:求积的位数,ah存放个位,al存放十位
diw:
     push bx
     mov bx,10
     div bl
     pop bx
     ret
   
     code ends
     end start
只有本站会员才能查看附件,请 登录
差不多与效果一样了
#8
小习小习2012-11-08 20:03
以下是引用有容就大在2012-11-8 19:40:21的发言:

代码排版也可以改进改进
我传本书到论坛上了 有兴趣可以看下 我现在也正在读这个
https://down.bccn.net/3560.html
呵呵 捞点下载分。
,我只有一个资源分
#9
有容就大2012-11-08 22:39
回复 8楼 小习小习
传这里了
只有本站会员才能查看附件,请 登录


改后的程序不错呢。

#10
小习小习2012-11-08 22:41
回复 9楼 有容就大
谢谢大哥
#11
wangyucoming2012-11-11 10:17
做软件与学英语一样都是靠时间磨出来的!
#12
小习小习2012-11-11 12:11
回复 2楼 zklhp
z版,给了个色,对我莫大鼓励啊!谢谢Z版
#13
bingghost2012-11-11 22:16
我是来膜拜大作的  膜拜大牛 膜拜大作
#14
zkg0092012-11-16 10:31
;这是我写的9*9乘法表:)
ORG 0x100
for cl=1 to 9
    for dl=1 to 9
        MOV  AL,DL
        ADD  AL,0x30
        call disp        ;显示 DL
        MOV  AL,'*'
        call disp        ;显示 *
        MOV  AL,CL
        ADD  AL,0x30
        call disp        ;显示 CL
        MOV  AL,'='
        call disp        ;显示 =
        MOV  AL,DL
        MOV  BL,CL
        MUL  BL
        MOV  BL,0xa
        DIV  BL
        IF   AL!=0
            ADD  AL,0x30
            call disp        ;显示乘积高位
        ENDI
        MOV  AL,AH
        ADD  AL,0x30
        call disp        ;显示乘积低位
        MOV  AL,' '
        call disp        ;显示空格
    endf
    MOV  AL,0xa
    call disp
    MOV  AL,0xd
    call disp            ;回车
endf

JMP    $

disp:
    PUSH    AX
    MOV    AH,0x0e
    MOV    BX,15
    INT    0x10
    POP    AX
    RET
#15
小习小习2012-11-18 11:33
回复 14楼 zkg009
膜拜,我还是菜,你的有些东西还没见过
#16
zhu2240392012-11-21 08:46
有容你又拿这个题目出来考察新人啊
1