汇编语言题目
编写一个程序,该程序用调用子程序的方法计算Z=X*X+Y+5。X和Y的值(1位十进制数)由键盘输入。
编写一个程序,该程序用调用子程序的方法计算Z=X*X+Y+5。X和Y的值(1位十进制数)由键盘输入。
答案:;同学我帮你完成了这个汇编程序,加点分吧~~~~~~~~
;需要说明的是最后的结构式十六进制的哈~~~~也可以转化成十进制的。
;----------------------------------------------------------------
;编写一个程序,该程序用调用子程序的方法计算Z=X*X+Y+5。X和Y的值(1位十进制数)由键盘输入。
;-------------------------------
;宏定义
output MACRO string
mov ah,09h
lea dx,string
int 21h
ENDM
;-------------------------------
;宏定义
;********************************数据段
data segment
string1 db "Please input X:$" ;字符串以$结束
string2 db "Please input Y:$"
string3 db "The result X*X+Y+5=: $"
crlf db 13,10,,13,10,"$" ;13回车,10换行
data ends
;**********************************
;**********************************代码段
code segment
assume ds:data,cs:code, ;段对应关系的说明
main proc far ;far子程序调用时的参数
start:
push ds
sub ax,ax ;清零
push ax ;压栈
mov ax,data ;将数据传送如数据段
mov ds,ax
;---------------------------------------
;主程序开始
;-----------------------------------------------------------
;键盘输入数字
;Z=X*X+Y+5 ;最大9X9+9+5=95
output string1
mov ah,01h
int 21h
sub al,30h
mov bl,al ;bl存放x值
output crlf
output string2
mov ah,01h
int 21h
mov ah,00h
sub al,30h
cbw ;字扩展
mov cx,ax ;cx存放Y值
output crlf
output string3
call sum ;子程序调用
mov cl,10h
div cl ;除以10
mov bl,ah ;将余数暂存起来
add al,30h
mov dl,al ;商
mov ah,02h
int 21h
add bl,30h
mov dl,bl ;余数
mov ah,02h
int 21h ;说明:最后结果两位数是十六进制的
mov dl,'H'
mov ah,02h
int 21h
ret
main endp ;主函数结束
;-------------------------------
;子程序
sum proc near
mov al,bl
mul bl ;X*X
add ax,cx ;X*X+Y
add ax,05h ;X*X+Y+5
ret ;返回(return)
sum endp
;********************************************
code ends ;代码段定义结束
end main ;这个程序段全部结束,
其他:作业吧。。。。。
上一个:单片机编程时可否用高级语言和汇编语言共同编写
下一个:汇编语言中的有效地址(偏移地址)是相对存储器寻址而言的吗?立即寻址和寄存器寻址有有效地址吗?请举例