Chinaunix首页 | 论坛 | 博客
  • 博客访问: 20265
  • 博文数量: 17
  • 博客积分: 730
  • 博客等级: 军士长
  • 技术积分: 175
  • 用 户 组: 普通用户
  • 注册时间: 2010-01-24 12:09
文章分类

全部博文(17)

文章存档

2010年(17)

我的朋友
最近访客

分类: 嵌入式

2010-01-24 13:37:35

;编程,计算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) |
0

上一篇:全排列

下一篇:数的排序

给主人留下些什么吧!~~