MOV DS,AX MAIN ENDP MOV BX,0 SHOWNUMBER PROC NEAR MOV SI,0 COVERNUM: MOV DI,0 DAA MOV CX,20D MOV DX,AX CMPE : MOV CL,2H CMP M[BX],0 SHOW: JL IFLOW ROL DL,4H HIGHT : PUSH DX
MOV AL,BYTE PTR M[BX] AND DL,0FH MOV BYTE PTR P[SI],AL ADD DL,30H INC SI MOV AH,02H JMP COMMONCONTRL INT 21H IFLOW : POP DX
MOV AL,BYTE PTR M[BX] LOOP SHOW MOV BYTE PTR N[DI],AL RET INC DI SHOWNUMBER ENDP COMMONCONTRL: PRINTCR PROC NEAR INC BX MOV DL,0AH LOOP CMPE MOV AH,02H MOV AX,SI INT 21H CALL SHOWNUMBER MOV DL,0DH CALL PRINTCR MOV AH,02H MOV AX,DI INT 21H CALL SHOWNUMBER RET EXIT: PRINTCR ENDP
RET END START
7、编制一个汇编语言程序,求出首地址为DATA的100D字数组中的最小偶数,并把它放在AX中。 答案:
此题根据题意要求应该使用完整汇编格式,因为精简格式也使用DATA.... DATAARE SEGMENT MAIN PROC FAR
DATA DW 3322H,4555H,200H,3544H,1245H START: NUM DB ($-DATA)/2 PUSH DS DATAARE ENDS MOV AX,0H CODE SEGMENT PUSH AX
ASSUME CS:CODE,DS:DATAARE MOV AX,DATAARE MOV BX,WORD PTR DATA[SI] MOV DS,AX CMP BX,AX MOV DX,0H ;偶数数量计数 JGE COMMONCONTROL MOV CX,WORD PTR [NUM] MOV AX,BX MOV SI,0H COMMONCONTROL: ISO: ADD SI,2H
MOV BX,WORD PTR DATA[SI] LOOP ISO SHR BX,1H JMP EXIT JNC ADDDX FIRSTAXVALUE: JMP COMMONCONTROL MOV AX,WORD PTR DATA[SI] ADDDX: JMP COMPARE
ADD DX,1H EXIT: CMP DX,1H RET JE FIRSTAXVALUE MAIN ENDP COMPARE: CODE ENDS
16
END START
8、把AX中存放得16位二进制数K看作是8个二进制的“四分子一字节”。试编写一程序,要求数一下值为3(即11B)的四分之一字节数,并将该数在终端上显示出来。 .MODEL SMALL JNE NEXT .STACK INC BL .CODE NEXT: START: LOOP BEGIN MOV AX,2B03H MOV CX,8 ADD BL,30H MOV BL,0 MOV DL,BL BEGIN: MOV AH,02 INT 21H ROL AX,1 ROL AX,1 MOV AX,4C00H MOV DX,AX INT 21H AND DX,3H END START CMP DX,3H
9、编写一个汇编语言程序,要求从键盘上接收一个思维的十六位进制数,并在终端上显示与它等值的二进制数。 答案: .MODEL SMALL MOV AH,0 .DATA ADD BX,AX MESS1 DB 13,10,'PUT MOV CX,DX ERROR(0~9,A~F)',13,10,'$' LOOP PUT .STACK JMP OUTPUT .CODE SUGGEST: START: MOV DX,OFFSET MESS1 MOV AX,@DATA MOV AH,09H MOV DS,AX INT 21H MOV AX,0 JMP PUT MOV CX,4 OUTPUT: MOV BX,0 MOV DL,13 PUT: MOV AH,2 MOV AH,1H INT 21H INT 21H MOV DL,10 CMP AL,30H MOV AH,2 JB SUGGEST INT 21H CMP AL,39H MOV CX,16 JA NEXT BEGIN: SUB AL,30H ROL BX,1 JMP SAVE MOV DX,BX NEXT: AND DX,1H CMP AL,41H ADD DL,30H JB SUGGEST MOV AH,2 CMP AL,46H INT 21H JA SUGGEST LOOP BEGIN SUB AL,37H SAVE: MOV AX,4C00H MOV DX,CX INT 21H MOV CL,4 END STAR SHL BX,CL
17
11、从键盘输入一系列以$为结束符的字符串,然后对其中的非数字字符计数,并显示出计数结果。 答案:
.model small .data .code start: mov ax,@data mov ds,ax mov bl,0 next: mov ah,01h int 21h CMP al,24H JE exit CMP AL,30H JL char CMP AL,39H JG char jmp next
char: inc bl jmp next
exit: mov cx,4 rol bl,cl mov al,bl and al,0fh add al,30h mov ah,2 mov dl,al int 21h rol bl,cl mov al,bl and al,0fh add al,30h mov ah,2 mov dl,al int 21h mov ax,4c00h int 21h end start
18
第六章 子程序结构
6、写一段子程序SKIPLINES,完成输出空行的功能。空行的行数在AX寄存器中。 答案:
SKIPLINES PROC NEAR
PUSH CX MOV DL,0DH PUSH DX INT 21H MOV CX,AX LOOP NEXT NEXT: MOV AH,2 POP DX MOV DL,0AH POP CX INT 21H RET MOV AH,2 SKIPLINES ENDP
7、设有10个学生的成绩分别是76,69,84,90,73,88,99,63,100和80分。试编制一个子程序统计60—69分,70—79分,80—89分,90-99分和100分的人数并分别存放到S6,S7,S8,S9和S10单元中。 答案:
DSEG SEGMENT PUSH CX NUM DW 76,69,84,90,73,88,99,63,100,80 PUSH SI
N DW 10 MOV SI, 0 S6 DW 0 MOV CX, N S7 DW 0 NEXT: S8 DW 0 MOV AX, NUM[SI] S9 DW 0 MOV BX, 10 S10 DW 0 DIV BL DSEG ENDS MOV BL, AL CODE SEGMENT CBW MAIN PROC FAR SUB BX, 6
ASSUME CS:CODE, DS:DSEG SAL BX, 1 START: INC S6[BX]
PUSH DS ADD SI,2 SUB AX, AX LOOP NEXT PUSH AX POP SI MOV AX, DSEG POP CX MOV DS, AX POP BX CALL SUB1 POP AX RET RET MAIN ENDP SUB1 ENDP SUB1 PROC NEAR CODE ENDS
PUSH AX END START PUSH BX
8、编写一个有主程序和子程序结构的程序模块,子程序的参数是一个N字节数组的首地址TABLE,数N及字符CHAR。要求在N字节数组中查找字符CHAR,并记录该字符的出现次数。主程序则要求从键盘接收一串字符以建立字节数组TABLE,并逐个显示从键盘输入的每个字符CHAR以及它在TABLE数组中出现的次数。(为简化起见,假设出现次数≤15,可以用十六进制形式把它显示出来 。 答案:
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库IBM-PC汇编语言__课后习题答案(4)在线全文阅读。
相关推荐: