1、2.3 程序框图 92.4 程序代码 92.5程序结果为 113、第13.3题 113.1题目分析 123.2寄存器及主存的应用说明 123.3 程序框图 143.4 程序代码 143.5 程序结果 171、第13.1题请将内存中SOURCE处的10个字型有符号数分成正数数组PLUS和负数数组MINUS,并统计这两个数组的数据个数,结果分别存放到字节变量PNUM(存正数个数)和MNUM(存负数个数)中。1.1题目分析本题应该先给三变量数组赋予地址,设循环变量CX=10,然后依次判断SOURCE处的字型有符号数的正负,若为正则存放到PNUM,字节变量PNUM+1 ,DI+2,SI+2;若为负存入
2、MINUS,字节变量MNUM+1,DI+2,SI+2,循环10次。本题利用LODSW ,STOSW,XCHG 等语句操作,可以使结构精简,程序代码少。预期结果:SOURCE = 1E00H, 9100H, 7400H, 9700H, 4200H, 3000H, 8100H, 3F00H, 1800H, 2500HPLUS = 1E00H, 7400H, 4200H, 3000H, 3F00H, 1800H, 2500H, 0000H, 0000H, 0000HMINUS = 9100H, 9700H, 8100H, 0000H, 0000H, 0000H, 0000H, 0000H, 0000
3、H, 0000HPNUM = 07HMNUM = 03H1.2寄存器及主存的应用说明依次定义了数据的存储模式,堆栈段,数据段。数据段中定义要求的数组,计算机为其分配存储空间。本题中用到了通用寄存器中的数据寄存器BX、AX;变址寄存器SI、DI;段寄存器DS、ES。BX、SI、DI分别存储MINUS、SOURCE、 PLUS数组的偏移地址。数据段寄存器DS与SI联用寻址数据段中的源操作数,附加段寄存器ES与DI联用寻址附加段中的目的操作数,同时SI和DI能够自动增量或减量。1.3 程序框图1.4 程序代码.MODEL SMALL.STACK.DATASOURCE DW 1E00H, 9100H,
4、 7400H, 9700H, 4200H, 3000H, 8100H, 3F00H, 1800H, 2500HCOUNT EQU ($-SOURCE)/2PLUS DW COUNT DUP (?)MINUS DW COUNT DUP (?PNUM DB 0MNUM DB 0.CODE.STARTUPMOV SI,OFFSET SOURCE ;给SI赋予SOURCE的偏移地址MOV DI,OFFSET PLUS ;给DI赋予PLUS的偏移地址MOV BX,OFFSET MINUS ;给BX赋予MINUS的偏移地址MOV AX,DS ;所有数据都在数据段中,故设置ES=DSMOV ES,AXMOV
5、 CX,COUNT ;给循环变量CX赋值CLD AGAIN: LODSW ;字串读取:AL DS:SI ;然后:SI SI+2 CMP AX,0 ;检测符号位,判断是正是负 JL FUSHU ;小于0,是负数,转向FUSHU JZ NEXT ;等于0,不处理,跳转到NEXT STOSW ;大于0,是正数,存入PLUS;DI DI+2 INC PNUM ;字节变量PNUM+1 JMP NEXT :跳转到NEXTFUSHU: XCHG BX,DI把负数存入MINUS ; INC MNUM ;字节变量MNUM+1NEXT: LOOP AGAIN.EXITEND1.5程序结果为?2、第13.2题对一个
6、由可打印的ASC组成的字符串(其ASC码值在20H-7FH之间,最后以00H结束),可按照如下办法对其进行压缩:从字符串首开始向后扫描,若某字符串单独出现则该字符不变;若某字符连续出现N次,则该字符用ESC(1BH),N,原字符共3个字节来代替,设内存中SOURC处有一个按上述方法进行压缩的字符串,以00H结束。现要求对其进行解压缩,假定解压后的字符串长度不超过100.处理结果存放到RESULT处。2.1题目分析本题应先判断给出的字符里是否有1BH,若有则得N值,进而得到连续字符,若无直接送到目标地址,继续搜寻,直到扫描到00H为止,并将最终结果存储在规定的内存单元中。本题的注意事项是扫描到1
7、BH之后,如何获得连续字符。SOURCE = 41H,1BH,06H,43H,61H,00HRESULT = 41H,43H,43H,43H,43H,43H,43H,61H,00H2.2寄存器及主存的应用说明变址寄存器SI。BX、SI分别存储SOURCE、 RESULT数组的偏移地址。AX寄存器常用于算术运算、逻辑运算以及外设传送信息等。2.3 程序框图2.4 程序代码SOURCE DB 41H,1BH,06H,43H,61H,00HRESULT DB 100 DUP (?MOV BX,OFFSET SOURCE ;给BX赋予SOURCE的偏移地址MOV SI,OFFSET RESULT ;给
8、SI赋予RESULT的偏移地址MOV AL,BX :将SOURCE的值传递给ALCMP AL,1BH ;检测字符1BHJE WEI ;若有字符1BH,则跳转到WEI MOV SI,AL ;若无字符1BH,则将AL内容送到RESULTCMP AL,0JE OVER ;若有字符00H,则结束循环INC BX ;BX+1INC SI ;SI+1JMP AGAINWEI:MOV CH,0MOV CL,BX ;取CX=NINC BXFENG:MOV AL,BX 将BX里的值赋给RESULTLOOP FENG ;循环N次JMP AGAIN ;跳转到AGAINOVER2.5程序结果为SOURCE = 41H
9、,1BH,06H,43H,61 H,00H3、第13.3题内存中NUMA和NUMB处各存放着10个字节型有符号数,分别为Ak和Bk(k=0,1,9)。从键盘输入一个字符,若输入的字符为+,则计算Ck=Ak+Bk,结果保存到字型变量NUMC处,程序结束;若输入的字符为*,则计算Ck=Ak*Bk,结果保存到字型变量NUMC处,程序结束;若输入的是其他字符,则在下一行显示ERROR,程序结束。3.1题目分析本题应先判断输入的字符是否为*或+,并进行对应的操作,若为* 或 /+,为两个字型有符号数的绝对值(正数取本身,负数则取反加1变为绝对值)相乘或相加,即用到乘法指令mul r16/m16或add
10、dest,src,并将结果存储在规定的内存单元中。本题的注意事项在于其乘数为字型有符号数,题目要求取反,乘积为双字,需要控制其结果存储的位置,以达到规定要求。NUMC = 0080H, 0090H, 0078H, 004DH, 004CH, 00A2H, 00DEH, 0087H, 002FH, 00D0H ;+NUMC = 0700H, 086FH, 072CH, 044EH, 0000H, 16FDH, 2FA8H, 0C4EH, 0138H, 295FH ;*3.2寄存器及主存的应用说明本题中用到了通用寄存器中的数据寄存器BX、AX、CX;变址寄存器SI、DI。BX、SI、DI分别存储N
11、UMA、NUMB、 NUMC数组的偏移地址。变址寄存器SI和DI,常用于存储器变址寻址方式时提供地址。CX为计数寄存器,常用于计数控制循环程序中。3.3 程序框图3.4 程序代码NUMA DB 10H, 11H, 12H, 13H, 00H, 95H, 86H, 97H, 08H, 89HCOUNT EQU $-NUMANUMB DB 90H, 81H, 66H, 3AH, 4CH, 37H, 64H, 1EH, 27H, 59HNUMC DW COUNT DUP (?ERROR DB 0DH, 0AH, ERROR!$MOV SI,OFFSET NUMA ;给SI赋予NUMA的偏移地址MOV
12、 DI,OFFSET NUMB ;给DI赋予NUMB的偏移地址MOV BX,OFFSET NUMC ;给BX赋予NUMC的偏移地址循环次数CX=10 MOV AH,01H INT 21H ;输入一个字符CMP AL,+ ;比较AL与+JZ WEI ;相等,跳转到WEICMP AL,* ;比较AL与*JZ FENG ;相等,跳转到FENGMOV AH,09HMOV DX ,OFFSET ERROR ;显示ERRORJMP DONE ;跳转到DONECMP BYTE PTR SI,0 ;比较SI中字节型数据与0的大小JL F1 ;小于0跳转到F1CMP BYTE PTR DI,0 ;比较DI中字节
13、型数据与0的大小JL F2 ;小于0跳转到F2MOV AL,SI ;将SI中的偏移地址移动到AL中ADD AL,DI ;将DI中的偏移地址与AL中的偏 移地址相加并移动到AL中去MOV AH,0 ;AH置0MOV BX,AX ;将AX移动到BX中去并存为BX 的偏移地址SI加1INC DI ;DI加1ADD BX,2 ;将2与BX相加并移动到BX中去LOOP WEI ;循环WEIF1:NEG BYTE PTR SI ;将SI偏移地址中的字节型数据求反JMP WEI ;跳转到WEIF2:NEG BYTE PTR DI ;将DI偏移地址中的字节型数据求反JL F3 ;小于0跳转到F3JL F4 ;小于0跳转到F4将SI中的偏移地址转移到AL中去MUL BYTE PTR DI ;无符号数字节型数据相乘将AX移动到BX中去并存为BX的偏移地址将2加到BX中去循环FENGF3:JMP FENG ;跳转到FENGF4:DONE:3.5 程序结果程序结果为
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1