DBENDSSEGMENTASSUMECSCSEGDSDSEGSTARTMOVAXDSEG
fMOVDSAXMOVCX4MOVALMSGMOVSIOFFSETMSG1L1CMPJBALSINEXT
MOVALSINEXTLOOPL1
MOVMALMOVAL0
MOVAH4CHINTCSEGEND21HENDSSTART
由指令MSGDBM
131572524DB
可计算0005为M的的偏移量。如图,g命令运行后,d命令查看d14150005知M中值为0DH13即最小的数是13,显然不正确。
f3)31据题意有如下要求a定义:首地址BUF,结果RESULTb数据:10个字节数c实现:查找0的个数32分析满足要求满足ab有BUFDB4260508350DB
RESULT
实现c:MOVMOVCMMPCMPJNEINCNEXTINCLOOPCX10AL0SI0NEXTALSICMMP;控制循环次数;AL用于存放临时个数,清零;比较SI所指与0;SI所指不等0跳入NEXT标号所指指令;SI所指等于0,AL加1;指针下一指向下一个即将比较的数;循环比较直至CX0;
f33流程图:
开始
MOV
CX10CX10
MOVAL0AL0
CMP
SI0
YZF0SI0
N
JNE
NEXT
INC
AL;AL1
INC
SISI1
LOOP
CMMP
结束
34最初程序代码DATASEGMENT数据段DATA开始
BUFDB4260508350分配字节空间首地址BUFRESULTDB存放结果
fDATAENDSCODESEGMENTASSUMESTARTMOVMOVMOVMOVCMMPCMPJNEINCNEXTINCLOOPMOVMOVMOVINTCODEENDSEND4)41据题意有如下要求
数据段DATA结束代码段CODE开始DSDATACSCODEDATACODE对应挂钩DS,CSAXDATADSAXCX10AL0SI0NEXTALSICMMP程序入口数据段装入初始循环次数AL用于存放0的个数,初始为0当前指针指向的数据与0比较所指数据不等于0跳至NEXT标号处指令相等则AL加1NEXT入口,指针加1下移指向下一个数进入循环CMMP,继续比较当前数
RESULTAL将结果传送至RESULT中AL0AH4CH21H调用dos返回dos界面功能代码段CODE开始START程序结束AL清零
a存在两组数据每组8个,均为无符号字节数b每组数据分别以NUM1、NUM2为首地址,结果存放在REST中c实现两组数据两两相乘后共8组数据,最终求总和42分析处理满足要求满足ab:NUM1NUM2REST实现c:DBDB1234567887654321
DW(由于结果可能很大故而开辟word空间)
f首先是进行两两相乘,可以分别用一指针SI,DI同时自上而下取数进行相乘并将结果临时存放于AX,其次将下一次当前结果与AX中上一次结果相加,通过循环便可达到实现要求c中的功能,由于第一次结果的存放不再循环之内,可以将其单独列出,这样难免显得程序冗长,拖沓。因此可以优化其,将AX先初始化为0,把第一次相乘也列入循环中。问题便可以很好得到解决。如图:
SIAXDI
1
CX8
8AX18AX7654……
23r