微型计算机原理及应用技术-第二版(朱金钧版). 联系客服

发布时间 : 星期日 文章微型计算机原理及应用技术-第二版(朱金钧版).更新完毕开始阅读757f457edc36a32d7375a417866fb84ae55cc371

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 ;传送目的串的地址