1. 请用emu8086可使用的汇编语言编写程序计算S=1+2×3+3×4+4×5+…+N(N+1),直到N(N+1)项大于200为止。结果从虚拟终端输出
时间: 2023-10-11 19:05:33 浏览: 173
好的,以下是用emu8086可使用的汇编语言编写计算S的程序:
```
;计算1+2*3+3*4+...+n(n+1),直到n(n+1)>200
.model small
.stack 100h
.data
n db ?
s dw ?
temp dw ?
.code
main proc
mov ax, @data
mov ds, ax
; 读入n的值
mov ah, 1
int 21h
sub al, 30h ; 将ASCII码转换成数字
mov n, al
mov cx, n ; 循环计数器
mov ax, 1 ; S的初值为1
loop_start:
mov dx, cx ; dx存放n的值
mov bx, cx ; bx存放n的值
inc bx ; bx存放n+1的值
mul bx ; ax = ax * bx
add ax, dx ; ax = ax + dx
add s, ax ; s = s + ax
; 判断n(n+1)是否大于200,如果是则跳出循环
mov ax, bx
mul dx
cmp ax, 200
ja loop_end
; 循环计数器减1
dec cx
jmp loop_start
loop_end:
; 将结果转换成ASCII码并输出
mov ax, s
mov temp, ax
mov bx, 10 ; 除数为10
mov cx, 0 ; cx存放位数
mov dx, 0 ; dx存放余数
mov ax, 0 ; ax存放商
mov si, offset buffer ; buffer用于存放结果的ASCII码
convert:
div bx ; ax / bx,商存放在ax中,余数存放在dx中
push dx ; 将余数压入堆栈中
inc cx ; 位数加1
cmp ax, 0 ; 如果ax为0,说明商已经除尽
jne convert ; 否则继续除
; 将堆栈中的余数弹出并转换成ASCII码
pop dx
add dl, 30h ; 加上30h转换成ASCII码
mov [si], dl ; 将ASCII码存放到buffer中
inc si ; buffer指针加1
loop convert
; 输出结果
mov ah, 9
mov dx, offset buffer
int 21h
mov ah, 4ch
int 21h
main endp
; 存放结果的缓冲区
buffer db 7 dup('$')
end main
```
程序首先从键盘读入n的值,然后使用循环计算S的值,直到n(n+1)>200为止。
在循环中,使用mul指令计算n(n+1)的值,然后将n的值加到结果中。如果n(n+1)>200,则跳出循环。
最后,程序将计算结果转换成ASCII码并输出。
希望这个程序能够帮助你完成任务。
阅读全文