微机原理实验的--子程序与宏指令.docxVIP

  • 12
  • 0
  • 约2.78千字
  • 约 6页
  • 2018-02-19 发布于浙江
  • 举报
微机原理实验的--子程序与宏指令

27.编制计算N(N50)个偶数之和(2+4+6+…)的子程序和接收键入N及将结果显示在主程序。子程序代码:stack segment stack stack;定义堆栈段dw 32 dup(?);堆栈段有32字空间stack endsdata segment;定义数据段input db please input N:,$n db 5,0,5 dup(?);定义变量数据区nobfdb 8 dup(?)data endscode segment;定义代码段start proc far ;定义一个过程startassume ss:stack,cs:code,ds:datapush dssub ax,ax;未通过过程DOS返回做准备push axmovax,datamovds,axmovdx,offset inputmov ah,9;9号功能调用,显示器显示“please input N:”int 21hmovdx,offset nmov ah,10;10号功能调用,键盘输入并显示数据nint 21hmovsi,offset n+2mov cl,n+1mov ch,0call a;调用子程序acall sum;调用子程序sumshl ax,1;乘2movbx,segobfmoves,bxmovdi,offset obf+1call b;调用子程序bcall HH;调用子程序HHmovdx,offsetobfmov ah,9int 21hRETstart endpsum proc;定义子程序sum,sum为自然数相加子程序push cx;保护现场push bxmovcx,axmov bx,0movax,bxsm:adc bx,1;把bx,1和CF相加adcax,bx;把ax,bx和CF相加loop smpop bx;恢复现场pop cxRETsum endpa proc;定义子程序a,a为键盘输入的十进制数转化成16进制子程序mov ax,0c0: push cxmov cx,10mul cx;乘法指令调用and byte ptr[si],0fh;十进制的asc码转换成BCD码add al,[si]adc ah,0incsi;越过负号指向数字pop cxloop c0RETa endpb proc;定义过程c,b为16进制转换成asc码push axpush bxpush cxpush dxpush dior ax,ax;判断数的负号jns plus;为正转到plusmov byte ptres:[di],-;为负送负号至输出数据区inc di;求负数的绝对值neg axplus:mov cx,0;将ax中2进制转换成10进制mov bx,10c1:mov dx,0div bxpush dx;余数进栈inc cx;十进制位数加1or ax,ax;商不为0继续除以10jnz c1c2:pop ax;将十进制转换成asc码add al,30hstosbloop c2mov al,$stosbpop dipop dxpop cxpop bxpop axRETb endpHH proc;定义过程HHmov dl,0ah;换行mov ah,2int 21hmov dl,0dh;换行mov ah,2int 21hRETHH endpcode endsend start截图如下:宏指令代码:sum macro A;定义宏sum,sum为自然数相加子程序push cx;保护现场push bxmovcx,Amov bx,0movax,bxsm:adc bx,1;把bx,1和CF相加adcax,bx;把ax,bx和CF相加loop smpop bx;恢复现场pop cxendmstack segment stack stack;定义堆栈段dw 32 dup(?);堆栈段有32字空间stack endsdata segment;定义数据段input db please input N:,$n db 5,0,5 dup(?);定义变量数据区nobfdb 8 dup(?)data endscode segment;定义代码段start proc far ;定义一个过程startassume ss:stack,cs:code,ds:datapush dssub ax,ax;未通过过程DOS返回做准备push axmovax,datamovds,axmovdx,offset inputmov ah,9;9号功能调用,显示器显示“please input N:”int 21hmovdx,offset nmov ah,10;10号功能调用,键盘输入并显示数据nint 21hmovsi,offset n+2mov cl,n+1mov ch,0call a;调用

文档评论(0)

1亿VIP精品文档

相关文档