当前位置:首页 > 微机课后习题答案
END START
17. 编写2 位非压缩型BCD 码相乘的程序。 答:转化成加法进行累加运算。 DATA SEGMENT DA1 DB 09H,09H DA2 DB 09H,08H RESULT DB 4 DUP(0) DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX
MOV AL,DA2+1 ;计算加法次数 MOV BL,10 MUL BL
MOV BL,DA2 MOV BH,0 ADD AX,BX MOV CX,AX
CONT: MOV AH,0 ;通过循环做累加 MOV AL,RESULT ADD AL,DA1 AAA
MOV RESULT,AL MOV AL,RESULT+1 ADD AL,AH MOV AH,0 AAA
ADD AL,DA1+1 AAA
MOV RESULT+1,AL MOV AL,RESULT+2 ADD AL,AH MOV AH,0 AAA
MOV RESULT+2,AL MOV AL,RESULT+3 ADD AL,AH MOV AH,0 AAA
MOV RESULT+3,AL LOOP CONT
MOV AH,4CH ;返回DOS INT 21H
CODE ENDS END START
18. 编写完整的程序求N!,求N 大于6 时的运算结果,并在屏幕上显示结果。 答:DATA SEGMENT N DB 8 ;求8 的阶乘 DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX MOV AL,N MOV AH,0
CALL FACT ;调用过程求N!,AX=N,BX=N!
CALL B2TODEC ;调用过程将结果转换为十进制,然后屏幕显示
MOV AH,4CH INT 21H FACT PROC CMP AL,0 JNZ CHN MOV BX,1 RET
CHN: PUSH AX DEC AL
CALL FACT ;递归调用N!=N*(N-1)! POP AX MUL BX MOV BX,AX RET
FACT ENDP
B2TODEC PROC MOV CX,10000 CALL BIN MOV CX,1000 CALL BIN MOV CX,100 CALL BIN MOV CX,10 CALL BIN MOV CX,1 CALL BIN RET
B2TODEC ENDP
BIN PROC MOV AX,BX MOV DX,0 DIV CX
MOV BX,DX MOV DL,AL ADD DL,30H MOV AH,2 INT 21H RET
BIN ENDP CODE ENDS END START
19. 在附加段有一个数组,首地址为BUFF,数组中第一个字节存放了数组的长度。编一个
程序在数组中查找0,找到后把它从数组中删去,后续项向前压缩,其余部分补0。 答:DATA SEGMENT
BUFF DB 10, 1,0,2,3,4,0,5,6,7,0 ;10 个数 M EQU 0 DATA ENDS
CODE SEGMENT
ASSUME CS:CODE, ES:DATA, DS:DATA START: MOV AX, DATA ; 初始化ES,DS MOV ES, AX MOV DS, AX
MOV AL, M ; 关键字M 存入AL MOV DI, OFFSET BUFF
MOV CL, [DI] ; 数组长度存入CX MOV CH, 0
INC DI ;指向数组起始地址 CLD ;清方向标志
L1: REPNE SCASB ;重复搜索关键字 JNZ STOP ; 未找到,转STOP 结束
JCXZ STOP ; 最后一个数是M,转STOP PUSH DI ;关键字下一单元地址和循 PUSH CX ;环次数入栈保护
DEL: MOV BL, [DI] ; 前移,末尾补0 MOV [DI-1], BL INC DI LOOP DEL
MOV BYTE PTR[DI-1], 0 POP CX ; 恢复CX,DI POP DI
DEC DI ; 由于REPNE SCASB 已自动加1 JMP L1
STOP: MOV AH, 4CH INT 21H CODE ENDS END START
20. 编程完成将第二个字符串插入到第一个字符串的指定位置上。
答:DATA SEGMENT
STRING1 DB 'THIS IS THE FIRST STRING!','$' DB 100 DUP(0) ;缓冲区
NUM1 DW ? ;字符串1 的长度 STRING2 DB 'the second string!','$' NUM2 DW ? ;字符串2 的长度 POS DW 8 ;插入位置 DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,ES:DATA START: MOV AX,DATA MOV DS,AX MOV ES,AX
LEA DI,STRING1 ;求字符串1 的长度存入NUM1 MOV AL,'$' MOV NUM1,0 CLD
D1: SCASB JZ D2
INC NUM1 JMP D1
D2: LEA DI,STRING2 ;求字符串2 的长度存入NUM2 MOV AL,'$' MOV NUM2,0 CLD
D3: SCASB JZ D4
INC NUM2 JMP D3
D4: LEA SI,STRING1 ;将字符串1 自插入位置开始的字符向后移动,
ADD SI,NUM1 ;空出位置以便插入字符串2 MOV DI,SI ADD DI,NUM2 STD
MOV CX,NUM1
共分享92篇相关文档