输入一个数n,然后打印出2的n次方
2010-05-06 08:36
495 查看
输入一个数n,打印出2的n次方
; 有效输入 n=0~24
; 用MASM6.11编译器编译通过
; 编译方法: masm /l %1.asm
; link /tiny %1.obj
;
code segment
ASSUME cs:code,ds:code
.386P
ORG 100h
START:
push cs
pop ds
again:
mov dx,offset string ;显示提示
mov ah,9
int 21h
xor bp,bp ;BP清0
mov cx,2
input:
mov ah,0
int 16h ;接收一个字符
cmp ah,1 ;Esc退出程序
jz exit
cmp al,0dh ;回车结束输入
jz ok
cmp al,'0' ;比0小重输
jb input
cmp al,'9' ;比9大重输
ja input
mov ah,0eh ;显示有效输入
int 10h
and al,0fh ;化为HEX
cbw
xchg bp,ax
mov bx,10
mul bx
add bp,ax
loop input ;接收下一字符
ok: call hex2asc
mov si,offset result
test bp,bp
jnz k2
mov word ptr [si],1 ;2^0=1
mov word ptr [si+2],0
jmp crt
k2: cmp bp,1
jnz k3
mov word ptr [si],2 ;2^1=2
mov word ptr [si+2],0
jmp crt
k3: cmp bp,24
ja again
dec bp
mov cx,bp
finit
fld num ; 2 入栈
@mul:
fimul num ;2^n
loop @mul
fstp result ;从栈上取出结果到result
crt:
mov dx,offset message
mov ah,9
int 21h ;显示结果式
mov si,offset result
call show ;显示 10 进制结果
jmp again
exit:
mov ah,4ch
int 21h
show: ;将双字Hex化为 N 进制并显示
mov bx,N
xor cx,cx
Q0:
xor dx,dx
mov ax,[si+2]
div bx
mov [si+2],ax
mov ax,[si]
div bx
mov [si],ax
or dx,0e30h
inc cx
push dx
cmp ax,0
jnz Q0
Q1:pop ax
int 10h
loop Q1
ret
hex2asc: ;将Hex(0~99)化为十进制
mov ax,bp
aam
or ax,3030h
xchg ah,al
mov Y,ax
ret
string db 0dh,0ah,9,'Input n=(0~24):$'
message db 13,10,9,'2^'
Y dw ?
db '= $'
num dd 2 ;底数
result dd ? ;幂
N dw 10
CODE ENDS
END START
; 有效输入 n=0~24
; 用MASM6.11编译器编译通过
; 编译方法: masm /l %1.asm
; link /tiny %1.obj
;
code segment
ASSUME cs:code,ds:code
.386P
ORG 100h
START:
push cs
pop ds
again:
mov dx,offset string ;显示提示
mov ah,9
int 21h
xor bp,bp ;BP清0
mov cx,2
input:
mov ah,0
int 16h ;接收一个字符
cmp ah,1 ;Esc退出程序
jz exit
cmp al,0dh ;回车结束输入
jz ok
cmp al,'0' ;比0小重输
jb input
cmp al,'9' ;比9大重输
ja input
mov ah,0eh ;显示有效输入
int 10h
and al,0fh ;化为HEX
cbw
xchg bp,ax
mov bx,10
mul bx
add bp,ax
loop input ;接收下一字符
ok: call hex2asc
mov si,offset result
test bp,bp
jnz k2
mov word ptr [si],1 ;2^0=1
mov word ptr [si+2],0
jmp crt
k2: cmp bp,1
jnz k3
mov word ptr [si],2 ;2^1=2
mov word ptr [si+2],0
jmp crt
k3: cmp bp,24
ja again
dec bp
mov cx,bp
finit
fld num ; 2 入栈
@mul:
fimul num ;2^n
loop @mul
fstp result ;从栈上取出结果到result
crt:
mov dx,offset message
mov ah,9
int 21h ;显示结果式
mov si,offset result
call show ;显示 10 进制结果
jmp again
exit:
mov ah,4ch
int 21h
show: ;将双字Hex化为 N 进制并显示
mov bx,N
xor cx,cx
Q0:
xor dx,dx
mov ax,[si+2]
div bx
mov [si+2],ax
mov ax,[si]
div bx
mov [si],ax
or dx,0e30h
inc cx
push dx
cmp ax,0
jnz Q0
Q1:pop ax
int 10h
loop Q1
ret
hex2asc: ;将Hex(0~99)化为十进制
mov ax,bp
aam
or ax,3030h
xchg ah,al
mov Y,ax
ret
string db 0dh,0ah,9,'Input n=(0~24):$'
message db 13,10,9,'2^'
Y dw ?
db '= $'
num dd 2 ;底数
result dd ? ;幂
N dw 10
CODE ENDS
END START
相关文章推荐
- 编写一个程序读入一行输入,然后反向打印该行,您可以把输入存储在一个char数组中: 假定该行不超过255个字符。回忆一下,您可以使用具有%c说明符的scanf()从输入中一次 读入一个字符,而且当您按
- 一个正整数有可能可以被表示为 m(m>=2) 个连续正整数之和,编写一个程序,输入一个正整数,然后找出符合这种要求的所有 连续正整数序列,若不存在这种序列,则打印None。
- 编写一个程序,一行行地读取输入行,直至到达文件尾。算出每行输入行的长度,然后把最长的那行打印出来。为了简单起见,你可以假定所有的输入行均不超过1000个字符
- 编写一个程序,一行行地读取输入行,直至到达文件尾。算出每行输入行的长度,然后把最长的那行打印出来。为了简单起见,你可以假定所有的输入行均不超过1000个字符
- 题目:将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。 解答: 分析:对n进行分解质因数,应先找到一个最小的质数k,然后按下述步骤完成: (1)如果这个质数恰等于n,则说明分解
- 编写一个程序,一行行的读取输入行,直至到达文件尾。算出每行输入行的长度,然后把最长的那行打印出来
- 《c primer pius》第六章第14题,发现网上好多都有问题,编写一个程序读入一行输入,然后反向打印该行,您可以把输入存储在一个char数组中
- 输入一个n ,然后在屏幕上打印出NxN 的矩阵!
- 编写一个程序,要求输入两个浮点数,然后打印出用二者的差值除以二者的乘积所得的结果。在用户非数字的输入之前程序循环处理输入值。
- 8.不断 要求用户输入一个数字,然后打印这个数字的二倍,当用户输入q的时候程序退出(return)
- 编写一个程序,一行行地读取输入行,直至到达文件尾。算出每行输入行的长度,然后把最长的那行打印出来。为了简单起见,你可以假定所有的输入行均不超过1000个字符。
- java 在控制台中输入一个字符串,然后按照逆序打印出来
- java程序: 输入数量不确定的正数和负数(一次输入一个), 然后打印正数和负数的个数,当输入0时,程序停止
- 输入一个暂停的数字,然后从1打印到该数字,然后询问是否继续.继续的话再输入数字 接着打印,不继续退出
- 黑马程序员之C#编程基础学习笔记:提示用户输入两个整数(假设i1,i2)。如果i1,i2都是正数,则将i2的值递增一个数,然后打印i1+i2的值;如果i1,i2都是负数,则将i1的值递减10个数,然后
- 编写一个程序读入一行输入,然后反向打印该行,您可以把输入存储在一个char数组中: 假定该行不超过255个字符。回忆一下,您可以使用具有%c说明符的scanf()从输入中一次 读入一个字符,而且当您按下回车键时会产生换行符(/n)
- 黑马程序员之C#编程基础学习笔记:不断要求用户输入一个数字,然后打印这个数字的二倍,当用户输入q的时候程序退出。
- 假设一个班级有5个人,每个人都会有一些共有的信息:姓名 学号 年龄 分数。从终端输入每个人的信息,然后按照分数从高到低排序,将信息打印到终端上。
- 8、编写一个程序,它先将键盘上输入的一个字符串转换成十进制整数, 然后打印出这个十进制整数对应的二进制形式。
- 华为2写出一个程序,接受一个有字母和数字以及空格组成的字符串,和一个字符,然后输出输入字符串中含有该字符的个数。不区分大小写。