实例:汇编语言输出乘法口诀表

使用汇编语言输出乘法口诀表

我就不废话了,下面直接给出汇编语言实现乘法口诀的代码,详细说明在请看代码注释。

;输出乘法口诀表
;  1*1=1
;  1*2=2 2*2=4
;  1*3=3 2*3=6 3*3=9
;  1*4=4 2*4=8 3*4=12 4*4=16
;  1*5=5 2*5=10 3*5=15 4*5=20 5*5=25
;  1*6=6 2*6=12 3*6=18 4*6=24 5*6=30 6*6=36
;  1*7=7 2*7=14 3*7=21 4*7=28 5*7=35 6*7=42 7*7=49
;  1*8=8 2*8=16 3*8=24 4*8=32 5*8=40 6*8=48 7*8=56 8*8=64
;  1*9=9 2*9=18 3*9=27 4*9=36 5*9=45 6*9=54 7*9=63 8*9=72 9*9=81

; 定义数据段
data segment
  a  db ?
  b  db ?
  c1 db ?              ; C是关健字不可以用作变量名
data ends

; 定义代码段
code segment
   assume cs:code, ds:data
start:
    mov ax, data
       mov ds, ax
       
       mov a, 1
lp2:
    mov b, 1
lp1:
    mov al, a   
    mul b            ; a*b结果保存在AL中(b为字节,所以16位的乘积送到ax中)
    mov c1, al        ; 送入c1保存第一个结果
    
    call disp        ; 显示计算的结果
    
    add b, 1
    mov al, b
    cmp al, a        
    jbe lp1          ; 如果b<=a,则转到lp1执行;否则换行
  
    call dad           ; 将光标移动到下一行的行首
          
    add a, 1
    cmp a, 9
    jbe lp2          ; 如果a<=9,则转移到lp2
    
    mov ah, 4ch       ; 程序正常结束  大于九则结束
    int 21h
    
; 子程序名:disp
; 功    能:打印2*3=6类似表达式
; 入口参数:
; 出口参数:无    
disp    proc
    mov dl, b        ; 输出存储单元b的值且转换成十进制
    or  dl, 30h 
    call dispCh
     
    mov dl, '*'        ; 输出一个‘*’号
    call dispCh       
     
    mov dl, a         ; 输出存储单元a的值且转换成十进制
    or  dl, 30h
    call dispCh
     
    mov dl, '='       ; 输出一个‘=’号
    call dispCh
     
    mov dl, c1        ; 把乘积的结果送入DL
    cmp dl, 9         
    ja aa1           ; 如果结果大于9,则转移到aa1
    or dl, 30h         
    call dispCh     
    mov dl, ' '        
    call dispCh
    jmp over           ; 跳转到结束
aa1: 
    mov bl, dl      
    mov dl, 0       
aa3: 
    cmp bl, 10     
    jb aa2         ; bl < 10,则跳转
    sub bl, 10     ; 主要是为了调整大于9的十进制数输出(例如25-10 DL=2 BL=5这样就可以输出结果)
    inc dl         ; 用dl来保存进位
    jmp aa3        ; 再次比较是否大于十
aa2: 
    or dl,30h      ; 先输出进位部分
    call dispCh
    
    mov dl, bl      ; 输出最后的差
    or dl, 30h      ; 调整为十进制
    call dispCh
    
    mov dl, ' '     
    call dispCh
over:
    ret
disp    endp

; 子程序名:dad
; 功    能:将光标定位到下一行的开始
; 入口参数:无
; 出口参数:无
dad     proc
    push dx
    push ax
    mov dl, 0ah   ; 换行
    mov ah, 2
    int 21h
    mov dl, 0dh
    int 21h
    pop ax
    pop dx     
   ret
dad     endp

; 子程序名:dispCh
; 功    能:输出dl中的ascii码字符
; 入口参数:(dl)=将要输出的ascii码
; 出口参数:无
dispCh    proc
    push ax
    mov ah, 2h
    int 21h
    pop ax
    ret
dispCh    endp

code ends
    end start

运行效果图:

实例:汇编语言输出乘法口诀表

睡眠和休息丧失了时间,却取得了明天工作的精力。 —— 毛泽东
0 不喜欢
说说我的看法 -
全部评论(
没有评论
关于
本网站专注于 Java、数据库(MySQL、Oracle)、Linux、软件架构及大数据等多领域技术知识分享。涵盖丰富的原创与精选技术文章,助力技术传播与交流。无论是技术新手渴望入门,还是资深开发者寻求进阶,这里都能为您提供深度见解与实用经验,让复杂编码变得轻松易懂,携手共赴技术提升新高度。如有侵权,请来信告知:hxstrive@outlook.com
公众号