如果您无法下载资料,请参考说明:
1、部分资料下载需要金币,请确保您的账户上有足够的金币
2、已购买过的文档,再次下载不重复扣费
3、资料包下载后请先用软件解压,在使用对应软件打开
汇编语言程序举例(1)分块传送MOVES,AXMOVCX,STRSE;MOVSI,OFFSETSTG1;源串首址MOVDI,OFFSETSTG2;目标首址CLD;增量方式PUSHSIADDSI,STRSE-1;SI=源串末址CMPSI,DIPOPSIJLOK;不重叠STD;重叠,按减量ADDSI,STRSE-1;指向串末ADDDI,STRSE-1OK:REPMOVSB程序举例(1)分块传送(续二)程序举例(1)分块传送(通用子程序)BLKMOVPROCPUSHDSPUSHESPUSHAXPUSHBXPUSHDXPUSHCXMOVAX,SIMOVCL,4SARAX,CL;右移4位MOVDX,DSADDAX,DSMOVDS,AXANDSI,0FHMOVBX,DISARBX,CL;右移4位MOVDX,ESADDBX,DXMOVES,BXANDDI,0FHCMPAX,BX;比较SRC/DST起始地址高16位JAMOVDOWN;从低往高JBMOVUPCMPSI,DI;高16位相等,比低4位JAMOVUPJBMOVDOWNPOPCX;相等,不移动JMPMOVEXITMOVUP:STDPOPCXMOVAX,CXDECAXADDSI,AXADDDI,AXJMPDOMOVMOVDOWN:CLDPOPCXDOMOV:REPMOVSBMOVEXIT:POP…….;?子程序保护RETBLKMOVENDP多重循环:例—软件延时(nT,T=210ns)SOFTDLYPROCMOVBL,10;4TDELAY0:MOVCX,2801;4TDELAY1:LOOPDELAY1;17T/5TDECBL;3TJNZDELAY;16T/4TRET;20TSOFTDLYENDPn=4+10*(4+2801*17-12)+3+16)-12+20-->10msDAINDEXDB0;?波形发生DOTNUMDBDATIME-$-1DAVALUEDB0,40H,80H,0C0HDB255,0C0H,80H,40H;三角波DATIMEDW100DACTRLPROCFARPUSHDSPUSH0000MOVAX,SEGDAVALUEMOVDS,AXMOVCL,DOTNUMLEASI,DAVALUEINCSIMOVDAINDEX,0DALOOP:MOVAL,DAINDEXCMPAL,DOTNUMJCDACYCLEXORAL,ALMOVDAINDEX,AL;复位计数DACYCLE:CALLDAOUTINCSIINCDAINDEXCALLDELAYCALLKBINPUT;读键盘CMPAL,1BH;ESC键按下,结束JNZDALOOPRETDACTRLENDPDAOUTPROC;查表输出LEASI,DAVLUEXORAH,AHADDSI,AXMOVAL,[SI]MOVDX,DAPORT;DAC端口OUTDX,ALRETDAOUTENDP程序设计举例—模块化:过程/子程序调用与参数传递程序设计举例—过程调用与参数传递PRO_ADDPROCFARPUSHAXPUSHBXPUSHCXPUSHBPMOVBP,SPMOVBX,[BP+14];MOVCX,[BX];countMOVBX,[BP+12];SUM指针MOVBX,[BP+16]MOVAX,0LP:ADDAX,[SI]INCSIINCSILOOPLPMOV[BX],AXPOPBPPOPCXPOPBXPOPAXRET6#include<stdio.h>/*程序2*/intT_calc(int,int);intmain(){inta=20,b=100,c;T_calc(a,b);return0;}intT_calc(inta,intb){intc;c=a+b;returnc;}TCC–B–ms–Iinclude-Llibmyprog.c过程/子程序—模块化:调用与参数传递过程/子程序调用--递归递归调用(续)实验:汇编.ASM-->.OBJ-->.EXE程序1hello.c#include<stdio.h>intmain(){printf("Hello,world\n");return0;}TCC