采用汇编语言编写一个可以求小于等于100以内任意数字的阶乘的程序 要求:从键盘接收一个数字,计算其阶乘,并用十进制数显示出来。
时间: 2024-02-15 12:02:01 浏览: 87
汇编 子程序设计 阶乘
5星 · 资源好评率100%
好的,以下是汇编语言编写的计算阶乘的程序,可以在 DOSBox 等模拟器中运行:
```assembly
.model small
.stack 100h
.data
msg1 db 0dh, 0ah, 'Enter a number (<=100): $'
msg2 db 0dh, 0ah, 'Result: $'
.code
main proc
mov ax, @data
mov ds, ax
; 输出提示信息
lea dx, msg1
mov ah, 09h
int 21h
; 读入数字
mov ah, 01h
int 21h
sub al, '0' ; 将 ASCII 码转为数字
mov bl, al
; 判断是否超出范围
cmp bl, 100
ja error
; 计算阶乘
mov cx, 1
mov ax, 1
loop1:
cmp cx, bl
jg done
mul cx
inc cx
jmp loop1
done:
; 输出结果
lea dx, msg2
mov ah, 09h
int 21h
mov bx, 10
loop2:
xor dx, dx
div bx
push dx
cmp ax, 0
jne loop2
loop3:
pop dx
add dl, '0'
mov ah, 02h
int 21h
cmp sp, 0
jne loop3
; 退出程序
mov ah, 4ch
int 21h
error:
; 输出错误信息
lea dx, msg2
mov ah, 09h
int 21h
mov dx, offset errmsg
mov ah, 09h
int 21h
; 退出程序
mov ah, 4ch
int 21h
errmsg db 0dh, 0ah, 'Error: out of range!$', 0
main endp
end main
```
程序中使用了 16 位寄存器,所以需要在编译时指定 `.model small`,并在程序开始时将 `DS` 寄存器设置为数据段的地址。程序使用了 `int 21h` 中断来进行输入输出操作,`mov ah, 01h` 可以读入一个字符,`mov ah, 02h` 可以输出一个字符。计算阶乘的过程使用循环和乘法实现。如果输入的数字超出范围,则输出错误信息。
阅读全文