1、(1)用找到应插入数的位置作为循环结构的结束条件,把要插入数的位置前的元素均前移一个字。从数组的尾部向头部查找,可逐字取出数组中一个数K与N比较,若KN,则把K前移一个字,然后继续往后查找。若KN,则把N插在K之前结束程序。在arry_head-2单元中存放-1,这样可以保证如果数N小于数组中所有数,那它必然大于-1,这样可以正确地把N放在数组之首,循环结束依然可以用K大于N。(2)根据最高有效位是否为1来计数,然后用移位的方法把各位数逐次移到最高位,以测试数是否为0作为循环结束条件。实验二 :利用逻辑右移把M中的数依次放到要比较的地址中,源变址从0开始,将M数组中的元素与0相比,大于0则跳转
2、,小于0则求补使其变为绝对值,再比较大小,记下绝对值最大的数存入M+2n单元,偏移地址存入M+2(n+1)单元。实验三.将输入的数字依次与12345比较,相等则实现相对应的跳转,每跳转一次相应的计数器加1,依次计算每个数字出现的次数并放入相应的位置,转化为ASC码输出。实验中遇到的问题及其解决方法1、实验一(1)忽视边界问题考虑N与数组中所有数的大小关系。当它大于所有数,循环次数可能为0,当它小于所有数,不允许查找范围超过数组首地址。利用所有数均为正数的条件,在array_head-2单元中存放-1,保证若N小于所有数那它必大于-1,正确地把N放在数组之首。2、实验二调用NEG指令。用补码表示
3、负数解决了负数输出为正数的问题。3、实验三在数组中包含负数时输出错误,单步调试后发现是输出语句有误,改正后正确输出了绝对值最大的数。实验结果见附录建议Dosbox 工作环境与系统不兼容,无法使用,建议使用emd8086,更加简便易上手附录1(1)datarea segmentx dw ?arry_head dw 3,5,15,23,37,49,52,65,78,99arry_end dw 105n dw 32datarea endsprognam segment main proc far assume cs:prognam,ds,datareastart: push ds sub ax,ax
4、 push ax mov ax,datarea mov ds,ax mov ax,n mov arry_head-2,0ffffh mov si,0compare: cmp arry_endsi,ax jle insert mov bx,arry_endsi mov arry_endsi+2,bx sub si,2 jmp short compare insert: mov arry_endsi+2,ax retmain endpprognam endsend start(2)data segmentaddr dw numbernumber dw Ycount dw ?Y dw 1,2,3,5
5、,1,0,9data endsmain proc farassume:cs:prognam,ds:data mov ax,data mov cx,0 mov bx,addr mov ax,bxrepeat: test ax,0ffffh jz exit jns shift inc cxshift: shl ax,1 jmp repeatexit:mov count,cxret二DATA SEGMENT M DW -9,2,-5,4,1,6,7,-8 n EQU $-M DW 2 DUP(?) DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START
6、: MOV AX,DATA MOV DS,AX MOV SI,0 MOV DI,0 MOV CX,n SHR CX,1 MOV BX,0 NEXT: MOV AX,MSI CMP AX,0 JGE TRUE neg AX TRUE: CMP BX,AX JG GETNUM XCHG BX,AX MOV DI,SI GETNUM: INC SI LOOP NEXT MOV AX,MDI MOV M+n,AX MOV M+n+2,DI mov dl, bl add dl, 30h mov ah, 02h int 21h mov ah,4ch int 21hCODE ENDS END START 输
7、入数组为 -2,5,1,-6,-4,7,-8 输出绝对值最大数8三DATAS SEGMENT COUNT db 5 dup (0) DATAS ENDS CODES SEGMENT CODES,DS:DATAS push ds sub ax,ax push ax MOV AX,DATAS MOV DS,AX next:mov ah,01h int 21hcmp al,1jz compare1 2jz compare2 3jz compare3 4jz compare4 5jz compare5 jmp exitcompare1:mov cl,COUNT add cl,1 mov COUNT0,cl jmp nextcompare2:mov bx,1 mov cl,COUNTbx mov COUNTbx,cl jmp next compare3:mov bx,2 compare4:mov bx,3 compare5:mov bx,4 mov dl,COUNT0 add dl,30h mov ah,02 int 21h mov dl,COUNT1 mov dl,COUNT2 mov dl,COUNT3 mov ah,02mov dl,COUNT4 mov ah,4ch CODES ENDS 检验:输入非15的数字会自动跳出,输入53413,打印出10211
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1