当前位置:编程学习 > 汇编语言 >>

汇编语言题目

编写一个程序,该程序用调用子程序的方法计算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       ;这个程序段全部结束,
其他:作业吧。。。。。

上一个:单片机编程时可否用高级语言和汇编语言共同编写
下一个:汇编语言中的有效地址(偏移地址)是相对存储器寻址而言的吗?立即寻址和寄存器寻址有有效地址吗?请举例

CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,