;编程,计算0 ~ 9中任一数的平方值。
;1.asm
DATAS SEGMENT
ask db "please input a num (0----9):$"
end_exit db "input a number,please!$"
sum db "the result is $"
quit db "do you want to quit ,input 'y' to quit any other key for continue~!$"
n equ $-ask
value db ?
DATAS ENDS
STACKS SEGMENT
;此处输入堆栈段代码
STACKS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS
;printvalue dx = num
show_asc proc
push ax
push bx
push cx
push dx
mov bx,dx
mov cx,2
mov ah,02h
lop:
mov dl,bl
int 21h
push cx
mov cl,8
shr bx,cl
pop cx
dec cx
jnz lop
mov ah,02h
mov dl,'h'
int 21h
pop dx
pop cx
pop bx
pop ax
ret
show_asc endp
;ax = 要输出的数字 dx=格式化的数字
;把一个两位数的每一个ascii打印出来。
show_num proc
push ax
push bx
push cx
push dx
mov cx,2h
mov bx,ax
mov dx,0
lop2:
mov bl,al
and bx,0fh
add bl,30h
cmp bl,'9'
jng next
add bl,7h
next:
or dx,bx
dec cx
jz ok
push cx
mov cl,4
shl dx,cl
shl dx,cl ;由于一个字符要占8个bit,所以dx往左移8位
shr ax,cl ;而ax移动4位
pop cx
jmp lop2
ok:
call show_asc
pop dx
pop cx
pop bx
pop ax
ret
show_num endp
;换行
change_line proc
push ax
push dx
mov ah,2h
mov dl,0ah
int 21h
mov dl,0dh
int 21h
pop dx
pop ax
ret
change_line endp
;求一个数0~9的平方值
square proc
push ax
push bx
push cx
push dx
lea dx,ask
mov ah,09h
int 21h
getnum:
call change_line
lea dx,end_exit
mov ah,09h
int 21h
mov ah,01h
mov al,0h
int 21h
cmp al,'0'
jb getnum
cmp al,'9'
jg getnum
call change_line
sub al,30h
mov ah,0h
mul al
mov bx,ax
;输出“the result is"
lea dx,sum
mov ah,09h
int 21h
mov ax,bx
call show_num
pop dx
pop cx
pop bx
pop ax
ret
square endp
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;下面是主程序
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
START:
MOV AX,DATAS
MOV DS,AX
run:
call square
call change_line
;打印quit信息
lea dx,quit
mov ah,9h
int 21h
;换行
call change_line
;从键盘上获取一个字符
mov ah,01h
int 21h
;如果是'y'直接结束
cmp al,'y'
jz die
cmp al,'Y'
jz die
jmp run
die:
MOV AH,4CH
INT 21H
CODES ENDS
END START
阅读(311) | 评论(0) | 转发(0) |