显示所有3位数的水仙花数(各位数字的立方和等于自身)。对于每一个水仙花数占一行输出。
include io.inc
.model small
.stack
.data
A_100 db 0;百位数
A_10 db 0;十位数
A_1 db 0;个位数
B_100 dw 0;百位数立方
B_10 dw 0;十位数立方
B_1 dw 0;个位数立方
.code
.startup
mov cx,100
next1:
mov ax,B_100
add ax,B_10
add ax,B_1
cmp ax,cx
jne next ;不相等则循环
jmp print ;相等则显示
next:
add cx,1
cmp cx,999
jne L1 ;循环到1000为止
mov ah,4ch ;4CH功能调用—-结束程序
int 21h
L1:
mov ax,cx
mov bl,100
div bl
mov A_100,al ;百位数
mov al,ah ;al=百位数, ah=余数
mov ah,0
mov bl,10
div bl
mov A_10,al ;十位数
mov A_1,ah ;个位数
jmp lifang
;求各个位数的立方
lifang:
mov al,A_100
mov ah,0
mov bx,ax
mul bx
mul bx
mov B_100,ax
mov al,A_10
mov ah,0
mov bx,ax
mul bx
mul bx
mov B_10,ax
mov al,A_1
mov ah,0
mov bx,ax
mul bx
mul bx
mov B_1,ax
jmp next1
print:
mov ah,2 ;输出一个字符
mov dl,A_100 ;百
add dl,30h ;将数字转换成对应的ASCII码
int 21h
mov dl,A_10 ;十
add dl,30h
int 21h
mov dl,A_1 ;个
add dl,30h
int 21h
mov al,3DH
call dispc ;显示一个字符
mov ax,B_100 ;百
call dispuiw ;显示无符号十进制整数
mov al,2BH
call dispc
mov ax,B_10 ;十
call dispuiw
mov al,2BH
call dispc
mov ax,B_1 ;个
call dispuiw
call dispcrlf ;光标回车换行
jmp next
.exit
输出: