START:
PUSH
MOV
NEWCHAR: MOV DS MOV PUSH AX BX,0 AH,1 INT SUB JL CMP AX,0
21H
AL,30H EXIT AL,10 ADD_TO: MOV EXIT: BINIDEC: CALL CALL MOV CALL MOV CALL RET
MAIN DEC_DIV MOV MOV DIV MOV MOV ADD MOV INT JL ADD_TO SUB AL,27H CMP AL,0AH JL EXIT CMP AL,10H JGE EXIT CL,4 SHL BX,CL MOV AH,0 ADD BX,AX JMP NEWCHAR TEST BX,8000H JZ BINIDEC NEG BX
MOV CX,10000D CALL DEC_DIV MOV CX,1000D DEC_DIV MOV
CX,100D
DEC_DIV CX,10D DEC_DIV CX,1
DEC_DIV ENDP
PROC NEAR AX,BX DX,0 CX BX,DX DL,AL DL,30H AH,2
21H
RET DEV_DIV ENDP
CODE ENDS END START
16、试编写一个汇编语言程序,要求对键盘输入的小写字母用大写字母显示出来。 【解】
CODE SEGMENT
ASSUME CS:CODE
START: MOV AH,1 INT 21H CMP AL,61H JL EXIT CMP AL,7AH JG EXIT AND AL,5FH MOV DL,AL MOV AH,02H INT 21H JMP START EXIT: MOV AH,4CH INT 21H
CODE ENDS
END START
17、编写程序,比较两个字符串STRING1和STRING2所含字符是否完全相同,若相同则显示“MATCH”,若不同则显示“NO MATCH”。 【解】
DATA SEGMENT
STRINGl DB ‘Move the cursor backward.’ STRING2 DB ‘Move the cursor backward.’ MESS1 DB ‘Match.’,13,10,‘$’ MESS2 DB ‘NO Match!’,13,10,‘$’ DATA ENDS PROG SEGMENT
ASSUME CS:PROG,DS:DATA,ES:DATA
START: MOV AX,DATA
MOV DS,AX MOV ES,AX LEA SI,STRINGl LEA DI,STRING2 CLD MOV CX,25 REPZ CMPSB JZ MATCH
LEA DX,MESS2 JMP SHORT DISP
MATCH: LEA DX,MESS1 DISP: MOV AH,09
INT 21H MOV AH,4CH INT 21H PROG ENDS
END START
18、试编写程序,要求从键盘输入3个16进制数,并根据对3个数的比较显示如下信息: (1)如果3个数都不相等则显示0;
(2)如果3个数中有2个数相等则显示2; (3)如果3个数都相等则显示3。 【解】 DATA SEGMENT MAXLEN DB 3 ACTLEN DB ? ARY DB 3 DUP(?) DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX MOV DX,OFFSET MAXLEN MOV AH,0AH INT 21H MOV BX,0 MOV CX,3 DO: SUB BYTE PTR ARY[BX],30H CMP BYTE PTR ARY[BX],10 JL NEXT SUB BYTE PTR ARY[BX],27H NEXT: INC BX LOOP DO MOV AL,ARY CMP AL,ARY+1 JZ NEXT1 CMP AL,ARY+2 JZ NEXT2 MOV DL,30H JMP DISP NEXT1: MOV AL,ARY+1 CMP AL,ARY+2 JNZ NEXT2
MOV DL,33H JMP DISP NEXT2: MOV DL,32H DISP: MOV AH,02H INT 21H MOV AH,4CH INT 21H CODE ENDS END START 19、已知整数变量A和B,试编写完成下述操作的程序:
(1)若两个数中有一个是奇数,则将该奇数存入A中,偶数存入B中; (2)若两个数均为奇数,则两数分别加1,并存回原变量; (3)若两个数均为偶数,则两变量不变。 【解】 MOV AL,A MOV AH,B XOR AH,AL TEST AH,01H JZ SHORT NEXT TEST AL,01H JZ SHORT NEXT1 JMP SHORT EXIT NEXT1: MOV AH,B MOV B,AL MOV A,AH JMP SHORT EXIT NEXT: TEST AL,01H JZ SHORT EXIT INC BYTE PTR A INC BYTE PTR B EXIT: ??
20、把0~10010之间的30个数,存入首地址为GRAD的字数组中,GRAD+i表示学号为i+1的学生成绩。另一个数组RANK是30个学生的名次表,其中RANK+I的内容是学号为i+1的学生的名次。试编写程序,根据GRAD中的学生成绩,将排列的名次填入RANK数组中(提示:一个学生的名次等于成绩高于这个学生的人数加1)。 【解】
CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX MOV DI,LENGTH RANK MOV BX,0 NEXT: MOV AX,GRAD[BX]
MOV DX,0 MOV CX,LENGTH RANK MOV SI,OFFSET GRAD NEXT1: CMP AX,[SI] JA NEXT2 INC DX NEXT2: ADD SI,2 LOOP NEXT1 MOV RANK[BX],DX ADD BX,2 DEC DI CMP DI,0 JNZ NEXT MOV AH,4CH INT 21H CODE ENDS END START
21、试编写程序,它轮流测试两个设备的状态寄存器,只要一个状态寄存器的第0位为1,则与其相应的设备就输入一个字符;如果其中任一状态寄存器的第3位为1,则整个输入过程结束。两个状态寄存器的端口地址分别是0024和0036,与其相应的数据输入寄存器的端口则为0026和0038,输入字符分别存入首地址为BUFF1和BUFF2的存储区中。 【解】 MOV SI,0 MOV DI,0 FIRST: IN AL,24H TEST AL,08H JNZ EXIT TEST AL,01H JZ SECOND IN AL,26H MOV BUFF1[SI],AL INC SI SECOND:IN AL,36H TEST AL,08H JNZ EXIT TEST AL,01H JZ FIRST IN AL,38H MOV BUFF2[DI] INC DI JMP FIRST EXIT: ??
百度搜索“70edu”或“70教育网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,70教育网,提供经典综合文库微机原理与接口技术(陈宁)课后答案(8)在线全文阅读。
相关推荐: