显示所有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
-
输出: