汇编程序用子程序写斐波那契数列
时间: 2023-08-04 12:36:49 浏览: 141
好的,下面是汇编程序,使用子程序写斐波那契数列:
```
.data
fib db 0, 1, 0, 0, 0, 0, 0, 0, 0, 0 ; 斐波那契数列
n db 10 ; 数列长度
.code
main proc
mov ax, @data
mov ds, ax ; 初始化数据段寄存器
mov cx, n ; 循环计数器
mov si, 0 ; 数组索引
L1:
push cx ; 保存循环计数器
mov al, [si] ; 取出当前数列值
call write_dec ; 输出当前数列值
call crlf ; 换行
pop cx ; 恢复循环计数器
add si, 1 ; 数组索引加1
loop L1 ; 循环至n次
mov ah, 4ch
int 21h ; 程序结束
main endp
; 子程序:输出十进制数值
write_dec proc
push ax
push bx
push cx
push dx
xor bx, bx ; bx = 0
mov cx, 10 ; cx = 10
L1:
xor dx, dx ; dx = 0
div cx ; ax = ax / 10, dx = ax % 10
push dx ; 压入余数
inc bx ; bx += 1
or ax, ax ; ax == 0?
jnz L1 ; 不为0,继续循环
L2:
pop dx ; 取出余数
add dl, '0' ; 转换为ASCII码
mov ah, 02h ; 功能号2,输出字符
int 21h ; 调用中断
dec bx ; bx -= 1
jnz L2 ; bx 不为0,继续循环
pop dx
pop cx
pop bx
pop ax
ret
write_dec endp
; 子程序:输出换行符
crlf proc
mov dl, 0dh ; ASCII码0d,回车符
mov ah, 02h ; 功能号2,输出字符
int 21h ; 调用中断
mov dl, 0ah ; ASCII码0a,换行符
mov ah, 02h ; 功能号2,输出字符
int 21h ; 调用中断
ret
crlf endp
```
以上程序使用了两个子程序:`write_dec` 和 `crlf`。`write_dec` 用于将一个十进制数值输出到屏幕上,`crlf` 则用于输出换行符。主程序中使用循环计数器和数组索引来读取斐波那契数列中的每个数值,并调用 `write_dec` 和 `crlf` 子程序输出到屏幕上。
阅读全文