要求
实验内容:编制一个完整的二次函数y=x^2+5x+6计算程序,从键盘输入变量x的值,值的范围在(0 ~ 255),然后计算函数y的值(0 ~ 65535),并以十进制ASCII的形式显示在屏幕上。
思路
有了上一个实验的经验,这个实验就比较容易上手了。上个实验已经解决了进制转换的问题,所以只要对上次的代码进行复用即可。
先计算5 * x,然后再计算x * x,最后再加上6,仔细体会计算的顺序。
实现
data segment
input db 10, 0, 10 dup(30h) ; 存放变量输入缓冲区
x db 0 ; 存放变量x的二进制值
y dw 0 ; 存放函数y的二进制值
output db 5 dup(30h),'$' ; 存放函数y的十进制ascii码
mes1 db 'input x:',0ah,0dh,'$'
mes2 db 'input second number',0ah,0dh,'$'
mes3 db 'input computing symbol(+ or *) ',0ah,0dh,'$'
mes4 db 0ah,0dh,'computing result:y=x^2+5x+6=','$'
ends
code segment
assume cs:code,ds:data,ss:stacks
main proc
mov ax, data
mov ds, ax
;输入数字x
mov dx,offset mes1
mov ah,09h
int 21h
mov dx,offset input
mov ah,0ah
int 21h
mov ch,00h
mov cl,input+1
cmp cl,05h
jc l1
mov cl,05h
l1:
mov si,offset input+2
call ascb
mov x,al
mov bl,5 ;计算5*x
mul bl
mov bl,al
mov al,x ;计算x^2
mul al
add al,bl
add al,6
mov dx,ax
mov si,offset output ;结果送到output
call basc
mov dx,offset mes4
mov ah,09h
int 21h
mov dx,offset output ;输出结果
mov ah,09h
int 21h
mov ah,7
int 21h
mov ax, 4c00h ;程序返回
int 21h
main endp
ascb proc
dec cl
mov bx,000ah
mov ah,00h
mov al,[si]
sub al,30h
a1:
imul bx
mov dx,[si+01]
and dx,00ffh
add ax,dx
sub ax,30h
inc si
loop a1
ret
endp
basc proc
add si,5
a2:
dec si
mov ax,dx
mov dx,0000h
mov cx,000ah
div cx
xchg ax,dx
add al,30h
mov [si],al
cmp dx,0000h
jnz a2
ret
endp
code ends
end main
运行截图
谢谢阅读,下次再见!