开发工具:
文件大小: 3mb
下载次数: 0
上传时间: 2017-10-12
详细说明: ; multi-segment executable file template. data segment ; add your data here! pkey1 db "Please input number1...",0ah,0dh,"$" pkey2 db "Please input number2...",0ah,0dh,"$" new_line db 0ah,0dh,"$&qu ot; num1 dw 0 ;数字是两位数 num2 dw 0 ;数字是两位数 temp db 0,0,0,0 ;零时变量,方便计算输出的十进制 ;count dw 3 ;输出所用参数,记录输出的位数 table dw 0 ;地址表,为子程序提供两个参数 dw 0 result dw 0 ;存结果的数据 ends stack segment dw 128 dup(0) ends code segment main proc far start: ; set segment registers: mov ax, data mov ds, ax mov es, ax ; add your code here ;------------------------- lea dx, pkey1 mov ah, 9 int 21h ;提示输入数字1 ;第一个读入的数是十位数,第二个读入的是个位数 ;经过处理后放到num1的内存当中 mov ah, 1 int 21h ;存在al ,是ASCII码的形式 sub al,30h mov bl,10 mul bl mov num1,ax ;目前存的是十位 mov ah,1 int 21h sub al,30h cbw add ax,num1 mov num1,ax ;mov ax,num1 ;测试num1中的数据存入正确 ;call printdec lea dx, new_line ;输出回车换行美观格式 mov ah, 9 int 21h ;-------------------------------------------- lea dx, pkey2 mov ah, 9 int 21h ;提示输入数字1 ;第一个读入的数是十位数,第二个读入的是个位数 ;经过处理后放到num1的内存当中 mov ah, 1 int 21h ;存在al ,是ASCII码的形式 sub al,30h mov bl,10 mul bl mov num2,ax ;目前存的是十位 mov ah,1 int 21h sub al,30h cbw add ax,num2 mov num2,ax lea dx, new_line ;输出回车换行美观格式 mov ah, 9 int 21h ;mov ax,num2 ;测试num2中的数据存入正确 ;call printdec ;============================================= ;---已经获取了两个数,将他们传入子函数计算ADD--- ;用简单的寄存器传值 mov table,offset num1 mov table+2,offset num2 mov bx,offset table ;通过bx传入子程序参数 call work_add ;--------------------------------------------- ;值返回的形式显示计算结果 ;mov result,bx ;将值传入内存中 ;mov ax,result ;调用值函数输出 ;call printdec ;--------------------------------------------- ;-------------------return------------------- mov ax, 4c00h ; exit to operating system. int 21h main endp ;----------写子程序 ;***********************计算加法子程序——begin******************** ;通过bx传入地址表 ;通过bx传出计算结果 work_add proc near push ax push cx push si push di mov si,[bx] mov di,[bx+2] mov ax,[si] mov cx,[di] add ax,cx ;================================= ;调用嵌套子函数的方式显示计算结果 call printdec ;================================= pop di pop si pop cx pop ax ret work_add endp ;***********************计算加法子程序——end********************** ;---------------------定义子函数输出十进制-------------------- ;***************************输出十进制程序************************* printdec proc near ;mov count,0 mov temp,0 mov temp+1,0 mov temp+2,0 mov temp+3,0 ;每次调用子函数的时候都将零时的变量清空, ;使得下次访问的时候不会冲突 push si push dx push cx push bx ;push ax ;最后要打印的是Y里面的 mov si,2 ;mov ax,Y; 进入子程序之后ax存的就是于要输出的值 ;cwd rotatep: ;mov ah,0 ;这个会使得ax的高位变成0 数据丢失 ;把al拓展成ax mov bl,10 div bl ;ah 存放余数 ;余数可以直接存进temp里 ;al,商,要存到ax里,然后拓展 mov temp[si],ah ;如果反着存那么就是从高位到低位 mov ah,0 add al,0 ;使能标志位 jz printout ;inc count ;记录数字的位数 dec si jmp rotatep printout: mov al,temp ;存的是8 ;mov ah,temp+1 ;存的是0 ;add count,1 mov si,0 mov cx,3 ;********************************* ;这里要注意 ,不能实现存进count一个3进行循环 ;也就是要每次改输出位数是修改这里的3; putbyte: mov al,temp[si] add al,30h mov dl,al inc si ;jmp putbyte mov ah,2 int 21h loop putbyte ;pop ax pop bx pop cx pop dx pop si ret printdec endp ;***************************输出十进制程序************************* ends end start ; set entry point and stop the assembler. ...展开收缩
(系统自动生成,下载前可以参看下载内容)
下载文件列表
相关说明
- 本站资源为会员上传分享交流与学习,如有侵犯您的权益,请联系我们删除.
- 本站是交换下载平台,提供交流渠道,下载内容来自于网络,除下载问题外,其它问题请自行百度。
- 本站已设置防盗链,请勿用迅雷、QQ旋风等多线程下载软件下载资源,下载后用WinRAR最新版进行解压.
- 如果您发现内容无法下载,请稍后再次尝试;或者到消费记录里找到下载记录反馈给我们.
- 下载后发现下载的内容跟说明不相乎,请到消费记录里找到下载记录反馈给我们,经确认后退回积分.
- 如下载前有疑问,可以通过点击"提供者"的名字,查看对方的联系方式,联系对方咨询.