11. 分析下列程序,指出运行结果。
DATA SEGMENT SUM DW ? DATA ENDS CODE SEGMENT
ASSUME CS:CODE,DS:DATA START: MOV AX,DATA
MOV DS,AX XOR AX,AX MOV CX,10 MOV BX,2
LP: ADD AX,BX
INC BX INC BX LOOP LP
MOV SUM,AX MOV AH,4CH INT 21H CODE ENDS
END START
请问:
(1) 该程序完成的功能是_______________________________。 (2) 程序执行后,SUM单元的内容是_______________。 【解】
(1) 该程序完成的功能是计算0~20的偶数和。 (2) 程序执行后,SUM单元的内容是110。
12. 从ARRAY开始的单元中存有10个16位无符号数,试编一完整程序找出其中最小数并存入MIN单元。 【解】程序代码如下:
DATA SEGMENT ;数据段开始 ARRAY DW 0F454H,4540H,0D214H,8354H,8210H, 0A673H,5656H,0021H,0567H,4228H MIN DW ? DATA ENDS ;数据段结束 CODE SEGMENT ;代码段开始
ASSUME CS:CODE,DS:DATA START: MOV AX,DATA
MOV DS,AX ;装填数据段 LEA BX,ARRAY ;传送变量的地址
MOV AX,[BX] MOV CX,9 LP1: INC BX
INC BX
CMP AX,[BX] JB CONT1 ;AX<[BX],转移
MOV AX,[BX] ;AX>=[BX],AX←[BX] CONT1: LOOP LP1
MOV MIN,AX MOV AH,4CH INT 21H ;返回DOS CODE ENDS ;代码段结束
END START ;源程序结束
13. 从DAT开始的数据区中放有100个8位的无符号数,编程统计其中奇数的个数,将结果存入RESULT单元。 【解】程序代码如下:
DATA SEGMENT ;数据段开始
DAT DB 26,45,44,32,90,2,1,81,2,120,5…… RESULT DB ? DATA ENDS ;数据段结束 CODE SEGMENT ;代码段开始
ASSUME CS:CODE,DS:DATA START: MOV AX,DATA
MOV DS,AX ;装填数据段 LEA BX,DAT ;传送变量的地址 XOR AX,AX XOR DX,DX MOV DL,2 MOV CX,100 LP1: MOV AL,[BX]
DIV DL ;余数在AH中 CMP AH,0 JE CONT1
INC DH ;DH用作计数器 CONT1: INC BX
LOOP LP1
MOV RESULT,DH MOV AH,4CH INT 21H ;返回DOS
CODE ENDS ;代码段结束
END START ;源程序结束
14. 利用DOS系统功能调用,将键盘输入的小写字母转换成大写字母输出显示,直到输入“$”字符时停止输出。
【解】调用1号系统功能,键入的字符送AL寄存器,并送屏幕显示输出。调用2号系统功能,将DL寄存器中的内容送屏幕显示输出。程序代码如下:
CODE SEGMENT ;代码段开始
ASSUME CS:CODE START: XOR AX,AX INPU: MOV AH,1
INT 21H ;键盘输入单字符送AL MOV BL,‘$’ CMP AL,BL JE EXT
SUB AL,20H ;转换成大写字母 MOV DL,AL MOV AH,2
INT 21H ;将DL中的字符送屏幕显示 JMP INPU EXT: MOV AH,4CH
INT 21H ;返回DOS
CODE ENDS ;代码段结束 END START ;源程序结束
15. 建立两个过程:一个过程将16进制数变换成ASCII码,一个过程将ASCII码字符在屏幕上显示输出。 【解】程序代码如下:
DATA SEGMENT ;数据段开始
LIST DB ? ;存储一个十六进制数(1位) ASC DB ? ;存储转换的ASCII码 DATA ENDS ;数据段结束 CODE SEGMENT ;代码段开始
ASSUME CS:CODE,DS:DATA,ES:DATA START: MOV AX,DATA
MOV DS,AX ;装填数据段 CALL CHANGE CALL OUTPTR MOV AH,4CH INT 21H ;返回DOS CHANGE PROC
MOV AL,LIST CMP AL,9
JA NEXT1 ;AL>9,转移 OR AL,30H JMP NEXT2
NEXT1: ADD AL,37H NEXT2: MOV ASC,AL
RET
CHANGE ENDP OUTPTR PROC
MOV DL,ASC MOV AH,2 INT 21H RET
OUTPTR ENDP
CODE ENDS ;代码段结束
END START ;源程序结束
16. 要求编写程序比较两个最大长度为100个字符的字符串ALFA1和ALFA2是否相等,若相等则输出显示“All Right!”,否则输出显示“Error!”。
【解】完成输出显示功能时,调用9号系统功能,功能是将指定的内存缓冲区中的字符串在屏幕上显示出来,缓冲区的字符串以“$”为结束标志。
LEN指定的内存中存储两字符串中长串的长度,否则,即使两串相等,由于字符串后面的随机字符,将影响判断结果。
程序代码如下:
DATA SEGMENT ;数据段开始 ALFA1 DB 100 DUP(?) ALFA2 DB 100 DUP(?)
RESULT1 DB ‘All Right!$’ RESULT2 DB ‘Error!$’
LEN DB 100 ;字符串长度 DATA ENDS ;数据段结束 CODE SEGMENT ;代码段开始
ASSUME CS:CODE,DS:DATA,ES:DATA START: MOV AX,DATA
MOV DS,AX ;装填数据段 MOV ES,AX ;装填附加段 LEA BX,ALFA1 ;传送源串的地址 MOV SI,BX LEA BX,ALFA2 ;传送目的串的地址
相关推荐: