汇编语言,1.写出一段完整的80*86程序,实现输入一个正整数值N后,用两栏格式显示从1到N和它们的平方。如: 数字 平方 1 1 2 4 3 9 4 16 5 25
时间: 2023-12-25 16:03:56 浏览: 42
下面是一段80*86汇编程序,实现输入正整数N并输出从1到N的数字以及它们的平方:
```
.model small
.stack 100h
.data
msg1 db 'Enter a positive integer: $'
msg2 db 'Number Square$'
numFormat db '%d', 0ah, 0dh, '$'
squareFormat db '%-13d%d', 0ah, 0dh, '$'
.code
main proc
mov ax, @data
mov ds, ax ;初始化数据段
;输出提示信息
mov ah, 09h
lea dx, msg1
int 21h
;读入正整数N
mov ah, 0ah
lea dx, numBuffer
int 21h
;将N转换为十进制整数
xor ax, ax
mov al, numBuffer+2
sub al, 30h
mov bl, numBuffer+3
sub bl, 30h
mov cl, numBuffer+4
sub cl, 30h
mov dl, numBuffer+5
sub dl, 30h
mov dh, 0
mov si, ax
mov ax, bx
shl si, 1
add ax, si
shl si, 1
add ax, si
add ax, cx
shl si, 1
add ax, si
add ax, dx
mov cx, ax ;CX存储输入的正整数N
;输出表头
mov ah, 09h
lea dx, msg2
int 21h
;循环输出数字和平方
mov ax, 1 ;从1开始
mov bx, ax ;BX存储当前数字的平方
mov cx, 0 ;CX计数器,每输出一组就加1
loop1:
push cx ;保存CX,以免被计算平方时修改
push bx
push ax
mov ah, 0
mov al, ' '
int 10h ;输出一个空格
mov ah, 09h
lea dx, numFormat
int 21h ;输出当前数字
pop ax
mov bx, ax
mul ax ;计算平方
mov bx, ax
lea si, squareFormat
push bx
push ax
mov ah, 09h
lea dx, si
int 21h ;输出当前数字和平方
add cx, 1 ;计数器加1
cmp cx, 5 ;每输出5组就换行
je newLine
jmp next
newLine:
mov ah, 0
mov al, 0ah
int 10h ;输出换行符
mov ah, 0
mov al, 0dh
int 10h
mov cx, 0 ;计数器清零
next:
inc ax ;下一个数字
cmp ax, cx ;如果还未输出完N个数字,继续循环
jle loop1
exit:
mov ah, 4ch
int 21h
main endp
.data?
numBuffer db 6,?,6 dup('$')
```
该程序使用了BIOS的中断功能,其中`int 21h`用于进行输入输出操作,`int 10h`用于屏幕输出。程序的主要思路是循环输出数字和它们的平方,每输出5组就换行。在输出之前需要先将输入的字符串转换为十进制整数,这里使用了简单的乘法和加法运算。