2、以2MOVAX,SI;将被除数送给DX:AXMOVDX,0IDIVCXMOVSI,AX;将所求结果送回SINEXT:MOVAH,4CHINT21HCODEENDSENDSTART3.53在以DS:3301H为首地址的存储单元中,连续存放了50个无符号的字节数据,要求在其中找出最小值,并将它放在地址为DS:3300H的字节单元中。试编写程序。CODESEGMENTASSUMECS:CODESTART:MOVSI,3301H;将首地址送给SI,用SI可以间接访问数组中的元素MOVAL,[SI];将第一
3、个数送给ALMOVCX,49;50个数比较49次CYCLE:INCSI;让SI指向下一个数CMPAL,[SI]JBENEXT;AL<=[SI],则判断下一个数MOVAL,[SI];AL>[SI],则用[SI]取代ALNEXT:LOOPCYCLEMOVDS:[3300H],AL;编译器会认为[3300H]就是3300H,故在前面加DS:MOVAH,4CHINT21HCODEENDSENDSTART3.58编写将内存以ES:1000H开始的256个字节单元清零的程序。CODESEGMENTASSUME
4、CS:CODESTART:MOVSI,1000HMOVCX,256CYCLE:MOV[SI],BYTEPTR0INCSILOOPCYCLEMOVAH,4CHINT21HCODEENDSENDSTART用串操作指令实现:CODESEGMENTASSUMECS:CODESTART:MOVDI,1000H;给目的串首地址赋初值MOVAL,0;用0来初始化MOVCX,256;循环256次CLD;地址从小到大变化REPSTOSB;用AL中的值对指定的目的串初始化MOVAH,4CHINT21HCODEENDS
5、ENDSTART3.59试编写程序,统计以DS:8000H为起始地址的连续200个字节单元中的0的个数。CODESEGMENTASSUMECS:CODESTART:MOVAX,0;用AX统计0的个数MOVCX,200;循环200次MOVSI,8000H;通过SI间接访问内存DS:8000H开始的存储单元CYCLE:CMPBYTEPTR[SI],0JNZNEXTINCAXNEXT:INCSILOOPCYCLEMOVAH,4CHINT21HCODEENDSENDSTART4.5程序中数据定义如下:DA
6、TA1DW?DATA2DB32DUP(?)DATA3DD?DLENGTHEQU$-DATA1试问DLENGTH的值是多少?DLENGTH=384.6在某程序中需要为一个变量BUF预留500个字节的存储空间,请写出相应的指令,如果要预留500个字的存储空间呢?BUFDB500DUP(?)BUFDW500DUP(?)4.7程序中数据定义如下:BUFFERBDB‘ABCDEF’RESULTDB?BUFFERWDW30DUP(?)写出以下指令的执行结果:MOVAX,TYPERESULT;AX=1MOVBX
7、,TYPEBUFFERW;BX=2MOVCX,LENGTHBUFFERB;CX=1MOVDX,LENGTHBUFFERW;DX=30MOVAX,SIZERESULT;AX=1MOVBX,SIZEBUFFERW;BX=604.11设BX=1103H,则执行下列指令后AX和CX各为多少?若BX=03H,则结果又如何?MOVAX,BXAND0FFHMOVCX,BXEQ1103HBX=1103HAX=0003H,CX=0FFFFHBX=03HAX=0003H,CX=04.13两个ASCII码数串定义如下:
8、STR1DB‘352678’STR2DB‘123400’编写程序段,计算STR1+STR2,要求结果仍然是ASCII码串。DATASEGMENTSTR1DB'352678'STR2DB'123400'STRDB6DUP(?)DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXLEASI,STR1+5;SI指向STR1的最后一个元素LEADI,STR2+5;DI指向STR2的最后一个元素LEABX,STR+5