1、DATA MAIN PROC START: MOV AX,DATA MOV DS,AX MOV ES,AX LEA AX,BUF1 MOV SRCADR,AX MOV LEN,100 CALL MVDAT MOV AX,4CH INT 21H MAIN ENDP MVDAT PROC MOV SI,SRCADR MOV DI,DSTADR MOV CX,LEN CLD CMP SI,DI JA DONE STD ADD SI,CX DEC SI ADD DI,CX DEC DI DONE: REP MOVSB RET MVDAT ENDP CODE ENDS END START4. 编写一个程
2、序,实现SUM=a1+a2+a20。已知a1a20依次存放在以BUF为首址的数据区,每个数据占两个字节,SUM也是两个字节。 DAT DW 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2 SUM DW ? MAIN PROC FAR MOV AX,0 MOV SUM,AX MOV SI,OFFSET DAT MOV CX,20 LP1: ADD AX,SI INC SI LOOP LP1 MOV AH,4CH5.试编写一程序,将AX中的各位去反,然后统计出AX中“0”的个数,将结果存到CL中。CODE MOV AX,0E001H MOV DL,0 MOV CL,
3、16 NOT AX RETEST: AND AX,AX JS SKIP INC DL SKIP: SHL AX,1 LOOP RETEST MOV CL,DL EXIT:6.在内存数据段存储器中,从ADDR单元开始存有一个字符串,它以“$”符号作为结束标志,试编写程序统计该字符串的长度($字符不计入长度),并把长度值存入LETH字单元。 ADDR DB LIUBIN$ LETH DW ? STACK SEGMENT PARA STACK DB 100 DUP(?STACK MOV BX,OFFSET ADDR MOV CX,0 LP: MOV AL,BX CMP AL,$ JE DONE IN
4、C CX INC BX JMP LP MOV ADDR,CX7. 试编写一程序,要求实现将ASCII码表示的两位十进制数转换为一字节二进制数,其中高地址单元存放十位数。课本200页8. 编程在显示器上输出你自己的汉语拼音姓名的子程序。课本155页.9将数据0-63置入到内存中以BUF为首址的连续64个字节单元中。课本198页10.试编写一程序,把数组STRING中存放的20个8位二进制数分成正数数组和负数数组,并统计正数、负数和零的个数,结果分别存放到P、M、Z三个单元。 STRING DW 2 DUP(3045H,0FD34H,0D3DH,9899H,0,3DF2H,0,0FFDEH,93F
5、DH,0DE6CH) P DW 20 DUP(? M DW 20 DUP(? Z DW 20 DUP(? XOR BP,BP LEA SI ,P ;正数 LEA DI ,M ;负数 LEA BP ,Z ;零 PUSH SI PUSH DI PUSH BP LEA BX,STRING LL: MOV AX,BX PUSH AX ADD AX,AX JZ L1 POP AX SAL AX,1 JC L2 MOV SI ,AX ADD SI,2 JMP LA LA: ADD BX ,2 LOOP LL XOR CX,CX MOV CX,2 MOV DX,BP SUB DX,AX SHR DX,CL
6、MOV BP ,DX MOV DX,DI MOV DI ,DX MOV DX,SI MOV SI ,DX L1: MOV BP,AX ADD BP ,2 L2: MOV DI ,AX ADD DI,2 COD ENDS11、试编写一程序,完成10个一位十进制数累加,累加结果以分离式BCD码形式存放于AH(高位)、AL(低位)寄存器中。 DATAS SEGMENT TAB DB 41H,42H,43H,44H,45H,46H BIN DB 1101101110011110 BUF DB 4 DUP(? DATAS ENDS CODES SEGMENTCODES,DS:DATAS MOV AX,D
7、ATAS LEA BX,TAB LEA SI,BIN LEA DI,BUF MOV CX,4 MOV AX,SI+2 PUSH CX MOV CL,8 ROR AX,CL SUB AX,3030H MOV DX,SI ROR DX,CL SUB DX,3030H SHL AH,1 ADD AH,AL MOV CL,2 SHL DL,CL MOV CL,3 SHL DH,CL ADC DH,DL ADC AH,DH CMP AH,0AH JB LP2 SUB AH,0AH MOV AL,AH XLAT LP3: MOV DI,AL ADD DI,1 ADD SI,4 POP CX LP2: AD
8、D AH,30H JMP LP3 CODES ENDS12、试编写一程序,将2个字节二进制数,变换成用ASCII码表示的四位十六进制数(用四字节表示)。13. 试用串操作指令SCAS,在10个字节的数据块BLOCK中,搜索与2EH相等的数,若找到,则将该数地址存放于ADR中,并在SIGNAL单元中做标记0FFH;否则,SIGNAL单元中为00H。 BLOCK DB N DUP(0) SINGAL DB 00H ADR DB 00H ASSUME DS:DATA,CS:CODE,ES: MOV DI OFFSET BLOCK MOV CX,10 MOV SL,IEH REPNI SCASB JN
9、Z AAA MOV SIGNAL,0FFH MOV ADR,IEH AAA: MOV SIGNAL,00H14. 编写一程序,计算100个16位正整数之和,如果和不超过16位值的范围,则保存其和到SUM,如果超过则显示“Overflow”。 DAT SEGMENT DAT1 DW 25 DUP (2D4EH,5611H,1234H,7891H) BUF DW ? STR1 DB overflow!,0DH,0AH, DAT ENDS COD SEGMENTCOD,DS:DAT MOV AX,DAT MOV SI,OFFSET DAT1 MOV BX,OFFSET BUF MOV CX,100 XOR AX,AX JC DISP LOOP L1 MOV BX,AX DISP PROC NEAR MOV DX,OFFSET STR1 MOV AH,9 DISP ENDP
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1