1、习 题 11.1 冯诺依曼型计算机有哪五大组成部件构成?答:由运算器、存储器、控制器、输入设备和输出设备五大基本部件组成计算机硬件系统。1.2 什么是微处理器、微型计算机和微型计算机系统?它们各由什么组成?答:中央处理器CPU(Central Processing Unit)也称为微处理器,是微型计算机的核心,由运算器、控制器、寄存器以及相关的电路。微型计算机由中央处理器、存储器、输入/输出接口和系统总线组成。微型计算机系统由微型计算机硬件系统和软件系统两部分组成。也就是在微型计算机的外面加上电源和外部设备,然后配上系统软件和应用软件构成的系统。1.3 什么是系统总线?按照信号的种类不同可以把
2、系统总线分成哪三类 ?它们各有什么特点?答:连接微处理器与存储器、输入输出接口,用以构成完整的微型计算机的总线称为系统总线。系统总线分为数据总线DB(Data Bus)、地址总线AB(Address Bus)和控制总线CB(Control Bus)。数据总线DB用于传送数据信息,数据总线是双向三态形式。地址总线AB是专门用来传送地址的,地址总线总是单向三态的。控制总线CB用来传送控制信号和时序信号,制总线的传送方向由具体控制信号而定。1.4 衡量微型计算机系统的性能的指标有哪些?答:衡量微型计算机系统的性能的指标有字长、主频、运算速度和主存容量和存取速度。字长是指微机系统中CPU一次能处理的二
3、进制位数。CPU的主频,即CPU内核工作的时钟频率(CPU Clock Speed)。运算速度是指每秒钟所能执行的指令条数。主存储器容量指内部存储器能存放数据的最大字节数。存取速度指主存完成一次读/写所需要的时间。1.5 将十进制数(123.025)10和(96.12)10转换成二进制数和十六进制数。答:(123.025)10=(11111011.00000110)2=(7B.06)161.6 将十六进制数(3E.7)16和(A4.B)16转换成十进制数。答:(3E.7)16=(62.4375)10(A4.B)16=(164.6875)101.7 求8位无符号数10110101B和010111
4、01B对应的十进制数?答:10110101B对应的十进制数是181。01011101B对应的十进制数是93。1.8 分别求78和-78的8位原码、补码和反码。78原=0100 1110B78反=0100 1110B78补=0100 1110B-78原=1100 1110B-78反=1011 0001B-78补=1011 0010B1.9 设X补=11001010B,Y补=01001010B,求它们的真值。答:X的真值是-54,Y的真值是74。1.10 设X+37,Y=-15,求X-Y 补。答:X补37补100101B补00100101B。-Y补Y补求补-0001111B补求补11110001B
5、求补00001111B。X-Y补=X补+-Y补00100101B+00001111B=0011 0100B习 题 22.1 8086/8088 CPU分为哪两大功能部件?其各自的主要功能是什么?8086/8088 CPU中有哪些寄存器?各有什么用途?解:从功能上来看,Intel 8086/8088微处理器可分为两部分,即执行单元EU(Execution Unit) 和总线接口单元BIU(Bus Interface Unit)。执行单元EU 的功能是负责指令的译码、执行,包括算术、逻辑运算,控制等。总线接口单元BIU 的功能是负责8086/8088对存储器和I/O 设备的所有访问操作。具体包括:
6、负责从内存单元中预取指令,并将其送到指令队列缓冲器暂存;从内存单元或外设端口中读取操作数或者将指令的执行结果传送到指定的内存单元或外设端口;根据有效地址(EA)形成物理地址(PA)。8086/8088有4个16位数据寄存器:AX、BX,CX,DX,它们既可作为16位寄存器使用,存放数据或地址,也可以分别作为两个 8 位寄存器使用。8086/8088有2个16位变址寄存器:SI 、DI,通常与DS联用,为访问当前数据段提供段内偏移地址或偏移地址分量。8086/8088有2个16位地址指针寄存器:SP,BP,它们一般是用来存放堆栈操作数的偏移地址。总线接口单元(BIU) 中设置有4 个16位的段寄
7、存器,分别是代码段寄存器(CS),数据段寄存器(DS),堆栈段寄存器(SS)和附加段寄存器(ES)。指令指针寄存器 (Instruction Pointer,IP) 用来存放下一条要执行的指令在当前代码段中的偏移地址。标志寄存器也称程序状态字(PSW) 寄存器,用来存放运算结果的特征和机器工作状态。2.2 8086/8088 CPU中标志寄存器有哪两类标志?简述各标志位的含义。解:(Zero Flag ,ZF)零标志。若本次运算结果为0,则ZF1,否则ZF0。(Sign F1ag SF)符号标志。此标志用于反映有符号数运算结果的符号是正还是负。对于有符号数,用最高位表示数的符号,当本次运算结果
8、最高位为1 ,表示结果为负数,则SF1,否则SF0。(Parity Flag,PF)奇偶标志。此标志是反映运算结果中最低字节中含“1”的个数为0或偶数时,PF1,为奇数时,PF0。 注意,PF标志仅反映运算结果的最低8位中“1”的个数是偶数或奇数,即使是进行16位字操作也是如此。(Auxiliary Carry Flag ,AF)辅助进位标志。当进行8 位数( 字节)或16位数( 字)的低8 位运算时,低4 位向高4 位( 即D3 位向D4 位) 有进位或借位时,AF1,否则AF0。AF标志主要供 BCD码十进制算术指令判别是否要进行十进制调整,用户一般不必关心。(Carry Flag,CF)
9、进位标志。当本次算术运算结果使最高位产生进位( 加法运算)或借位( 减法运算) 时,则此标志位置“1”,即CF1;若加法运算结果最高位无进位,或减法运算结果最高位无借位,则CF0。(Overflow Flag ,OF)溢出标志。当运算结果产生溢出时,使OF1,否则OF0。2.3 简述伪指令“EQU”与“=”之间有什么区别?解:“EQU”伪指令不能重复定义,而“=”伪指令可以重复定义。2.4 画图说明下列语句分配的存储空间及初始化的数值(1)FF1DB0100,2+5,?,ABC(2)FF2DW2 DUP(?),A,BC,1000H,25H(3)FF3DB2 DUP(1,2 DUP(2,3),4
10、)偏移地址内容变量名0000H30HFF10001H31H0002H30H0003H30H0004H07H0005H00H0006H41H0007H42H0008H43H0009H00HFF2000AH00H000BH00H000CH00H000DH41H000EH00H000FH43H0010H42H0011H00H0012H10H0013H25H0014H00H0015H01HFF30016H02H0017H03H0018H02H0019H03H001AH04H001BH01H001CH02H001DH03H001EH02H001FH03H0020H04H2.5 指出下列指令的错误。A1D
11、B ?A2DB 10K1EQU 1024(1)MOV K1,AX(2)MOV A1,AX(3)CMP A1,A2(4)K1 EQU 2048(5)MOV AX,BH(6)MOV BP,DI(7)XCHG CS,AX(8)POP CS解:(1) 立即数不能为目的操作数(2) 两个操作数的类型不一致(3) 两个操作数不能同时为存储器操作数(4) K1不能用EQU重复定义(5) 两个操作数类型不匹配(6) 两个操作数不能同时为存储器操作数(7) CS不能作为XCHG的操作数(8) CS不能为目的操作数2.6 假设在数据段进行如下的定义: DATASegmentXXDB-50,71,5,65,0YY
12、DB200 DUP(ABCD)ZZ DW 100 DUP(?)WW DW 25H,1052H,370H,851H DATA ENDS(1)用一条指令将YY的偏移地址送入BX(2)用一条伪指令给出该数据段占用所有字节长度(3)用一条伪指令给出变量ZZ分配的字节数目(4)编写一段程序将WW数组中的数据全部送入YY缓冲区(5)将数组XX中的第二个数据与第五个数据进行调换解:(1)LEA BX, YY(2)在数据段的最后加上:LEN EQU $-XX(3)ZZLEN EQU WW-ZZ(4)MOV AX,WW MOV YY,AX MOV AX,WW+2 MOV YY+2,AXMOV AX,WW+4 M
13、OV YY+4,AXMOV AX,WW+6 MOV YY+6,AX (5)MOV AL,XX+1 MOV XX+4,AL2.7 什么叫寻址方式?8086/8088指令系统有哪些寻址方式?解:指令中操作数的寻找方法称为寻址方式。8086/8088系统所支持的七种基本寻址方式:立即寻址, 寄存器寻址, 直接寻址, 寄存器间接寻址,寄存器相对寻址,基址变址寻址和相对基址变址寻址。2.8 将首地址为BLOCK的字数组中的第100个数送入AX中,试写出相关指令序列,要求分别使用以下三种寻址方式:(1)以BX寄存器的间接寻址(2)以BX寄存器的相对寻址(3)以BX、SI寄存器的基址变址寻址解:(1)MOV
14、 BX, OFFSET BLOCK +99*2MOV AX, BX(2)MOV BX, 99*2 MOV AX, BLOCKBX或:LEA BX, BLOCKMOV AX, BX+99*2(3)LEA BX, BLOCK MOV SI, 99*2 MOV AX,BX+SI或:LEA SI, BLOCK MOV BX, 99*2 MOV AX,BX+SI2.9 已知:(BX)=1200H,(BP)=2400H,(SI)=0100H,(DI)=0200H,(SS)=1000H,(DS)=2000H,(ES)=3000H,变量VAR1对应地址为2000H,试分别指出下列指令中存储器的寻址方式及物理地
15、址。(1)MOVAL,020H(2)MOVAL,BP+010H(3)MOVBX+SI-20H,AX(4)MOVBL,ES:BX+10H(5)MOVVAR1BX+DI,AL解:(1)直接寻址 PA=(DS)*16+EA=20000h+020H=20020H(2)寄存器相对寻址PA=(SS)*16+EA=10000H+2400H+010H=12410H(3)相对基址加变址寻址PA=(DS)*16+EA=20000H+1200H+0100H-20H=212E0H(4)寄存器相对寻址PA=(ES)*16+EA=30000H+1200H+10H=31210H(5)相对基址加变址寻址PA=(DS)*16+
16、EA=20000H+2000H+1200H+0200H=23400H2.10 设Block为字单元1000H:001FH的符号地址(变量),该单元的内容是01A1H,试问以下两条含有Block的指令有什么不同?指令执行后BX的内容是多少?(1)MOVBX,Block(2)LEABX,Block解:(1)BX的内容为01A1H(2)BX的内容为001FH2.11 什么叫堆栈?采用堆栈的意义?解:2.12 若在数据段中从字节变量TABLE相应的单元开始存放了015的平方值,试写出包含有XLAT指令的指令序列查找N(015)中的某个数的平方。(设N的值存放在CL中)解:LEA BX, TABLEMO
17、V AL, NXLAT2.13 编写程序对存放在DX,AX中的双字节长数据的求补解:NOTDX;首先将(DX, AX)取反NOTAXADDAX, 1;最低位加1,注意:不能用INC指令ADCDX, 0;把进位(如果有)传递到高位2.14 写出实现下列计算的指令序列。(假定X、Y、Z、W、R都为有符号数字变量)(1)Z=(W*X)/(R+6)(2)Z=(W-X)/(5*Y)*2(3)Z= (X+Y)/R - W(4)Z= (X/Y+ W )*100+R解:(1)MOVAX, WIMULXMOVBX, RADDBX, 6IDIVBXMOVZ, AXMOVR, DX(2)MOVAX, YMOVBX,
18、 5IMULBXMOVBX, AXMOVAX, WSUBAX, XMOVCX, 2IMULCXIDIVBXMOVZ, AX(3)MOV AX, XADD AX,YCWDIDIVRSUB AX,WMOVZ,AX(4)MOVAX,XCWDIDIVYADD AX,WMOVBX,100IMULBXMOVBX,AXMOVCX,DXMOVAX,RCWDADDAX,BXADCDX,CX;结果存放在DX、AX中2.15 设在AX、BX、CX、DX中均存放的是用压缩的BCD码表示的4位十进制数,试编写程序完成以下的计算:(1)(AX)+(BX) AX(2)(DX)-(CX) DX解:(1)ADD AL, BL
19、DAA XCHG AL, AHADC AL, BHDAAXCHG AL, AH (2)MOV AL,DLSUB AL, CLDASMOV DL, ALMOV AL, DHSBBAL, CHDASMOV DH, AL2.16 简述指令的“DAA”和“DAS”对BCD码运算后进行调整的规则。解:DAA的调整规则:if (AL低4位9 或 AF=1)thenAL=AL+06H ;AF=1 ;endif if (AL高4位9 或 CF=1)thenAL=AL+60H ;CF=1 ;endifDAS的调整规则:if (AL低4位9 或 AF=1)then AL=AL06H ;AF=1 ;endif if
20、 (AL高4位9 或 CF=1)thenAL=AL60H ;CF=1 ; Endif2.17 用程序段实现对存入在BX,AX的双字进行左移5位。解:SHL AX,1RCL BX,1SHL AX,1RCL BX,1SHL AX,1RCL BX,1SHL AX,1RCL BX,1SHL AX,1RCL BX,12.18 试分析下列程序完成什么功能? MOVCL,4 SHLDX,CL MOVBL,AH SHL AX,CL SHRBL,CL ORDL,BL解:把32位二进制代码(DX, AX)联合左移4位。2.19 已知程序段如下:MOVAX,1234HMOVCL,4ROLAX,CLDECAXMOVC
21、X,4MULCX试问:(1)每条指令执行后,AX寄存器的内容是什么?(2)每条指令执行后,CF,SF及ZF的值分别是什么?(3)程序运行结束时,AX及DX寄存器的值为多少?解:MOVAX,1234H;AX内容为1234H,CF、SF、ZF的值保留初值MOVCL,4;AX内容为1234H,CF、SF、ZF同上ROLAX,CL;AX内容为2341H,CF=1、SF=0、ZF=0DECAX;AX内容为2340H,CF=1、SF=0、ZF=0MOVCX,4;AX内容为2340H,CF=1、SF=0、ZF=0MULCX;AX内容为8D00H,CF=0、SF=0、ZF=02.20 程序中的“转移”是个什么
22、概念?CPU执行转移指令是如何实现转移的?解:程序中的“转移”是指改变程序的顺序执行过程,某条指令执行完后,不是紧接着执行该指令后面的指令,而是执行其它的指令。CPU是通过改变CS和IP指令指针的值来实现转移的。2.21 设(DS)=2000H,(BX)=0030H,(SI)=0202H,(20232H)=00H,(200233H)=06H,分别执行下述两条指令后,实际转移的目标地址物理地址多少?(1)JMPBX(2)JMPWord PTRBX+SI解:(1)目的地址为0030H(2)转移的目标地址为:由BX+SI寻址得存储单元的地址为20232H,目的地址为0600H。2.22 编写指令序列
23、,实现下述要求 (1) 使AX寄存器的低 4 位清零,其余位不变。(2) 使BX寄存器的低4 位置1,其余位不变。(3) 测试 BX中的位0 和位4,当这两位同时为零时,将AL置1,否则AL置0。解:(1)AND AX, 0FFF0H(2)OR AX, 000FH(3)TESTAX, 0011H JZNEXT;ZF=1,表明这两位同时为0,转走将AL置1 MOVAL,0;ZF=0,表明这两位不同时为0,将AL清0 JMP EXITNEXT: MOV AL,1EXIT:2.23 下面程序段在什么情况下执行结果是(AH)=0? BEGIN:IN AL, 60H TEST AL, 80H JZ BR
24、CH1 XOR AX, AX JMP STOP BRCH1:MOV AH, 0FFH STOP: 解:从60H端口读到是数据最高位为1时,使(AH)为0;数据最高位为0时,使(AH)为0FFH。2.24 “CALL”指令与“JMP”指令相同之处是什么?不同之处是什么?解:相同之处:“CALL”指令和“JMP”指令都能实现程序的控制转移,改变程序顺序指令的过程。不同之处:“CALL”指令执行时,使程序转移到子程序中执行,执行完子程序后,还是会回到调用程序,继续执行紧跟在“CALL”指令之后的那条指令。但“JMP”指令执行完后一般不会去执行紧跟在“JMP”指令之后的那条指令。2.25 叙述8086
25、/8088CPU执行指令“CALL DWORD PTR100H”的步骤。2.26 设下列程序执行前,栈顶指针SS:SP为1000H:0220H,试求:POPCXPOPBXPOPAXRET4(1) 画出该程序执行后的堆栈存储情况示意图。解:使堆栈指针加10,上面的5个字的内容出栈,图略。(2) 给出当前栈顶SS和SP的值。(SS)=1000H, (SP)=022AH2.27 一双字长的带符号数放在X和X+2中(X为变量),试编写一程序对这个数求其绝对值。解:TEST X+2, 8000H;测试最高位,判断正负,负数好取绝对值JZDONEMOVAX, XMOVDX, X+2NOTAXNOT DXA
26、DDAX, 1ADCDX, 0MOVX, AXMOVX+2, DXDONE:2.28 试编写一个汇编语言程序,要求将键盘输入的小写字母用大写字母显示出来。解:CODESEGMENTASSUMECS: CODESTART:MOVAH, 01HINT 21HCMPAL, 0DH;输入回车推出程序JZEXITORAL, 20HMOV AH, 02HINT21HJMPSTARTEXIT:MOV AX, 4C00HINT21HCODEENDSENDSTART2.29 试编写程序实现Error! Reference source not found.的功能,但是不要使用字符串操作指令。解:LEA SI,
27、STRING1-1LEADI, STRING2-1MOV CX, 20AGA:INCSIINCDIMOVAL, SI CMPAL, ES:DILOOPZAGA2.30 试编写程序实现Error! Reference source not found.的功能,但是不要使用字符串操作指令。解:LEA DI, STRING2MOV AL, AMOVCX, 20AGA:CMP AL, ES:DIJZEXITINCDILOOPAGAEXIT:2.31 在使用“REPNZ CMPSB”指令时,应事先做好哪些工作?解:将源串的偏移地址送入SI,目的串的偏移地址送入DI,方向标志DF清0,比较的字节数送入CX
28、。2.32 已知在以ARRAY为首地址的内存区域存放了100个字节数,试编写相关的程序段用以完成将该数据传送到BUFF为首地址的存储区域中。分别用以下不同方法实现。(1)用一般数据传送指令“MOV”实现。(2)用字符传送指令“MOVSB”实现。(3)用重复操作前缀传送指令“REP MOVSB”实现。(4)用LODSB/STOSB实现。解:(1)LEA SI, ARRAYLEADI, BUFFMOV CX, 100AGA:MOVAL, SI MOVDI, ALINCSIINCDILOOPAGA(2)LEA SI, ARRAYLEADI, BUFFMOVAX, DSMOV ES, AXMOV CX
29、, 100CLDAGA:MOVSBLOOPAGA(3)LEA SI, ARRAYLEADI, BUFFMOVAX, DSMOV ES, AXMOV CX, 100CLDREP MOVSB(4)LEA SI, ARRAYLEADI, BUFFMOVAX, DSMOV ES, AXMOV CX, 100CLDAGA:LODSBSTOSBLOOPAGA2.33 判断STRING1和STRING2为首地址的内存区域存放了二个长度为20的字符串是否相等。若相等将SIGN单元置1,反之,将SIGN单元置0。分别用以下不同方法实现。(1)用比较条件转移指令实现。(2)用重复操作前缀搜索指令实现。解:(1)L
30、EA SI, STRING1-1LEADI, STRING2-1MOV CX, 20AGA:INCSIINCDIMOVAL, SI CMPAL DILOOPZAGAJZEQMOVSIGN, 0JMP EXITEQ:MOV SIGN, 1EXIT:(2)LEA SI, STRING1LEADI, STRING2MOVAX, DSMOV ES, AXMOV CX, 20CLDREPECMPSBJZEQMOVSIGN, 0JMP EXITEQ:MOV SIGN, 1EXIT:2.34 试用其他指令序列来代替完成以下指令的功能:(1)LOOP NEXT(2)LDS BX,100H(3)XLAT(4)L
31、OOPZ NEXT(5)LAHF(6)XCHG AX,BX(7)NEG Word PTR1000H(8)ADC AL,SI+BX(9)TEST AL,00001111B(10)MOVSW(DF=0)(11)REPZ CMPSB(DF=0)解:(1)DECCXJNZNEXT(2)MOVBX, 100HMOV DS, 102H(3) MOV AH,0ADD BX, AXMOV AL, BX(4) JNZ EIXTLOOPNEXTEXIT:(5) 题目好像不对(6) MOV CX, BXMOV BX, AXMOV AX, CX(7) MOV AX, 0SUB AX, 1000HMOV 1000H,
32、AX(8) JNC NEXTADD AL, SI+BXINC ALJMP DONENEXT: ADD AL,SI+BXDONE:(9) MOV BL,ALANDBL, 00001111B(10) MOV AX,SIMOVES:DI,AXINC SIINCSIINCDIINCDI(11) NEXT:MOVAL,SICMPAL,ES:DIJNEEXITINCSIINCDILOOPNEXTEXIT:习 题 32.35 在以Block为首地址的字节单元中,存放了一个班级的学生考试成绩。试编写一程序,利用学生的序号来查表得到该学生的成绩,设学生的序号在NUMBER单元,查表结果存入RESULT单元。解:
33、DSEG SEGMENTBLOCKDB 67,78,86,57,88,75,78,96,77,88,87,95,67,86,83,55NUMBER DB 9 ; 要显示的16进制数字RESULT DB ? ; 存放要显示数字对应的七段码DSEG ENDSCSEG SEGMENTASSUME CS: CSEG, DS:DSEGSTART :MOV AX, DSEGMOV DS, AXMOV BX, OFFSET BLOCKMOV AL, NUMBER; 取16进制数字AND AL, 0FHXLAT; 查表取得对应的七段码MOV RESULT, AL ; 保存MOV AX, 4C00HINT 21
34、HCSEG ENDSEND START2.36 试编程序,统计由52600H开始的100个单元中所存放的字符“A“的个数,并将结果存放在DX中。解:CSEG SEGMENTASSUME CS: CSEGSTART :MOV AX, 5260HMOV DS, AXMOV BX, 0MOV AL, AMOV CX,100MOV DX,0AGA:CMP AL,BXJNZ LPINCDXLP:INC BXLOOP AGAMOV AX, 4C00HINT 21HCSEG ENDSEND START2.37 在当前数据段(DS),偏移地址为GRADE开始的连续80个单元中,存放着某班80个同学某门考试成绩
35、。按要求编写程序:试编写程序统计90分;80分89分;70分79分;60分69分,60分的人数各为多少,并将结果放在同一数据段、偏移地址为LEVEL开始的连续单元中。试编写程序,求该班这门课的平均成绩为多少,并放在该数据段的AVER单元中。解:DATASEGMENTGRADEDB80 DUP(?);运行前置入具体数据LEVELDB0 ;大于90LEVEL1DB0;80分89分LEVEL2DB0;70分79分LEVEL3DB0;60分69分 LEVEL4DB0;60分AVERDB ?DATAENDSCODESEGMENTASSUMECS: CODE, DS: DATASTART:MOVAX, D
36、ATAMOVDS, AXLEASI, GRADEMOVDX,0MOVCX, 80AGAIN:MOVAL, SICMPAL, 59;分段测试JAL1 L0:INCLEVEL4JMPNEXTL1:CMPAL, 69JAL2INCLEVEL3JMPNEXTL2:CMPAL, 79JAL3INCLEVEL2JMPNEXTL3:CMPAL, 89JAL4INCLEVEL1JMPNEXTL4:INCLEVELNEXT:ADDSI, 1ADD DL,AL;求累加和ADC DH,0LOOPAGAINMOV AX,DXMOV BL,80DIVBLMOV AVER,ALEXIT:MOVAX, 4C00HINT21
37、HCODEENDSENDSTART2.38 在以字节变量ARRAY为首地址的内存区域存储了一组带符号的数据,试编写程序将数据组的所有正数相加,并将和送入SUM字单元。解:DATASEGMENTARRAYDB 12,-67,44,67,-35,66,55,-98,87,-87,33,83COUNTEQU $-ARRAYSUMDW? ;SUM存放累加和DATAENDSCODESEGMENTASSUMEDS: DATA, CS: CODESTART:MOVAX, DATAMOVDS, AXMOVBX, 0;BX是数组元素在数组内的位移,初值0MOVCX, COUNT;装载循环计数器的初始值MOVDX
38、, 0;累加器AX清零ONE:MOVAL,ARRAYBXCMP AL,0JLE NEXTCBW ADDDX,AX;NEXT:INCBX;修改BX的值,为下一次操作做准备LOOPONE;计数循环MOVSUM, DX;保存结果(累加和)MOVAX, 4C00HINT21HCODEENDSENDSTART2.39 若某班有50名学生,考汇编语言课程,且所有考生的成绩都已存放自XX单元开始的内存区中,试编写一程序找出最高分和最低分。解:DATASEGMENTXXDB50 DUP (?);运行前置入具体数据COUNTEQU $-XXMINDB?MAXDB?DATAENDSCODESEGMENTASSUM
39、ECS: CODE, DS: DATASTART:MOVAX, DATAMOVDS, AXMOVMIN, 100;假设最小的数MOVMAX, 0;假设最大的数LEASI, XXMOVCX, COUNTAGAIN:MOVAL, SICMPAL, MINJAESKIP1MOVMIN, AL;比预设最小值还小,保留SKIP1:CMPAL, MAXJBESKIP2 MOVMAX, AL;比预设最大值还大,保留SKIP2:INC SILOOP AGAINEXIT:MOVAX, 4C00HINT21HCODEENDSENDSTART2.40 在首地址为ARRAY为首地址的内存区域里,存放了一组带符号的数据,试编写程序分别统计零、正数和负数的个数,统计结果分别存放在ZZ、XX、YY中。解:DATASEGMENTARRAYDB56,-42,66,87,0,88,-88,68,0,-67,58,97,-66,86,77;运行前置入具体数据COUNTEQU $-ARRAYXXDB0 ;正数的个数YYDB0;0的个数ZZDB