微机基础学习知识原理与接口技术(清华第二版)第四章课后复习.doc
8(1)DATA SEGMENT ORG 0E000H TA1 DB 01234 TA2 DB 5 DUP(?) TA3 DW 1234H,5678H,1369H TA4 DW 2 DUP(?) TA5 DD 2A004455H,3B334778HDATA ENDS(2)STACKI SEGMENT PAGE STACK SBUFF DB 100 DUP(?)ETACKI ENDS(3)CODE SEGMENT ASSUME CS:CODE,DS DATA,ES:EXT,SS:STCSTART MOV AX,DATA MOV AX,DATA MOV DS,AX MOV AH,4CH INT 21HCODE ENDS END START9(1) COUNT EQU 16H为16H中字符串的长度; COUNT DW 16H为每个表达式分配两个单位的储存单元并将16H存入该单元中。(2) MOV AX,BX为将BX的内容传给AX MOV AX,BX为将BX的有效地址传给AX(3) MOV AX,OFFSET STB为将STB的偏移地址装入AX MOV AX, STB为将STB中的数据传入AX(4) MOV AX,OFFSET STB为将STB的偏移地址装入AX LEA AX,STB为将STBDE 有效地址传给AX1216H21H41H42H31H32H43H44H0010H0010H 0020HX1的逻辑地址PA=10A0H*10H+0010H=10A10HX2的逻辑地址PA=10A0H*10H+0022H=10A22H13(1)2437H(2)00H(3)2(4)43H(5)10(6)1014(1) (AL)=44H(2) (AX)=0078H(3) (AX)=0FH8解:(1)DATA SEGMENT ORG 0E000H TA1 DB 01234 TA2 DB 5 DUP(?) TA3 DW 1234H,5678H,1369H TA4 DW 2 DUP(?) TA5 DD 2A004455H,3B334778HDATA ENDS(2)STACKI SEGMENT PAGE STACK SBUFF DB 100 DUP(?)ETACKI ENDS(3)CODE SEGMENT ASSUME CS:CODE,DS DATA,ES:EXT,SS:STCSTART MOV AX,DATA MOV AX,DATA MOV DS,AX MOV AH,4CH INT 21HCODE ENDS END START9解:(5) COUNT EQU 16H为16H中字符串的长度; COUNT DW 16H为每个表达式分配两个单位的储存单元并将16H存入该单元中。(6) MOV AX,BX为将BX的内容传给AX; MOV AX,BX为将BX的有效地址传给AX(7) MOV AX,OFFSET STB为将STB的偏移地址装入AX; MOV AX, STB为将STB中的数据传入AX(8) MOV AX,OFFSET STB为将STB的偏移地址装入AX; LEA AX,STB为将STBDE 有效地址传给AX12解:16H21H41H42H31H32H43H44H0010H0010H 0020HX1的逻辑地址PA=10A0H*10H+0010H=10A10HX2的逻辑地址PA=10A0H*10H+0022H=10A22H13解:(1)2437H;(2)00H;(3)2;(4)43H;(5)10;(6)1014解:(4) (AL)=44H;(5) (AX)=0078H;(6) (AX)=0FH18.编写程序,将MBUF为起始单元的5个数按相反次序传送到NBUF开始的存储单元中AGAIN:MOV AL,SI-1 OR AL,30H MOV DI,AL DEC SI INC DI LOOP AGAIN MOV AL,$ MOV DI,AL MOV DX,OFFSET NBUF MOV AH,09H INT 21H MOV AH ,4CH INT 21HCODE ENDS END STARTDATA SEGMENT MBUF DB 5,8,3,7,5 COUNT EQU $-MBUF NBUF DB 6 DUP(?)DATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATASTART:MOV AX,DATA MOV DS,AX MOV SI,OFFSET MBUF MOV DI,OFFSET NBUF MOV CX,COUNT ADD SI,CX20编写程序,将内存中某数据块中的正数和负数分开,并分别将这些正数和负数送同一数据段的两个缓冲区中,并在屏幕上显示正数和负数的个数(数据自定)。DATA SEGMENT D1 DB 1,3,-1,-3,4,0,2 COUNT EQU $-D1 D2 DB 100 DUP(?) D3 DB 100 DUP(?) PNUM DW ? NNUM DW ? CONST DW 10000,1000,100,10,1 DECS DB 5 DUP(0) HEAD1 DB "THE NUMBER OF POSITIVE NUMBER IS:$" HEAD2 DB "THE NUMBER OF NEGATIVE NUMBER IS:$"DATA ENDSMOV AH,09H LEA DX,HEAD2 INT 21H MOV AX,NNUM CALL DISPLAY MOV DL,0AH MOV AH,02H INT 21H MOV DL,0DH MOV AH,02H INT 21H MOV AH,4CH INT 21HDISPLAY PROC NEAR MOV CX,5 LEA SI,CONST LEA DI,DECSCONV: MOV BL,0AGAIN1: SUB AX,SI JC NEXT INC BL JMP AGAIN1NEXT: ADD AX,SI OR BL,30H MOV DI,BL INC SI INC SI INC DI LOOP CONV MOV AH,02H MOV CX,5 LEA DI,DECSCONV1:MOV DL,DI CMP DL,30H JNZ CONV3 INC DI LOOP CONV1STACK SEGMENT STACK DB 100 DUP(?)STACK ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACKSTART:MOV AX,DATA MOV DS,AX LEA BX,D1 LEA SI,D2 LEA DI,D3 MOV CX,COUNTAGAIN:MOV AL,BX CMP AL,0 JGE LOP1 MOV DI,AL INC DI INC NNUM JMP LOPLOP1: JG LOP2 JMP LOPLOP2: MOV SI,AL INC SI INC PNUMLOP: INC BX LOOP AGAIN MOV AH,09H MOV DX,OFFSET HEAD1 INT 21H MOV AX,PNUM CALL DISPLAY MOV DL,0AH MOV AH,02H INT 21H MOV DL,0DH MOV AH,02H INT 21HCONV3:INT 21H CMP CX,0 JZ QUIT INC DI MOV DL,DI LOOP CONV3QUIT: RETDISPLAY ENDP CODE ENDS END START21.编写程序,从内存BLOCK开始,存放着10个字节的有符号数,从这些数中找出绝对值最大的数,将其存入MAX中。AGAIN:MOV AL,SI CMP AL,0 JGE LOP NEG ALLOP: CMP AL,BL JBE LOP1 XCHG AL,BLLOP1: INC SI LOOP AGAIN ADD BL,30H MOV MAX,BL MOV DL,BL MOV AH,02H INT 21H MOV AH,4CH INT 21HCODE ENDS END START DATA SEGMENT BLOCK DB 1,-1,4,-3,8,9,-5,3,-1,2 COUNT EQU $-BLOCK MAX DB ?DATA ENDSSTACK SEGMENT STACK DB 100 DUP(0)STACK ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACKSTART:MOV AX,DATA MOV DS,AX MOV SI,OFFSET BLOCK MOV BL,0 MOV AH,0 MOV CX,COUNT26.编写程序,将内存中N个无符号数据从大到小排序后输出显示LOP1:MOV SI,CX MOV DI,1 LEA BX,BUFLOP2:MOV AL,BX CMP AL,BX+1 JAE LOP3 XCHG AL,BX+1 MOV BX,AL MOV DI,0LOP3:INC BX LOOP LOP2 CMP DI,0 JNZ OK MOV CX,SI LOOP LOP1OK: MOV CX,NUM LEA BX,BUFOK1: MOV AL,BX CBW CALL DISPLAY MOV DL, MOV AH,02H INT 21H INC BX DATA SEGMENT BUF DB 10,68,105,7,28 NUM EQU $-BUF CONST DW 10000,1000,100,10,1 DECS DB 5 DUP(0) ADR DB ?DATA ENDSSTACK SEGMENT STACK DB 100H DUP(?)STACK ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACKSTART:MOV AX,DATA MOV DS,AX MOV CX,NUM MOV ADR,0 DEC CXLOOP CONV3 MOV AH,02H MOV CX,5 LEA DI,DECSCONV4: MOV DL,DI CMP DL,30H JZ NODIS JMP DISPNODIS: INC DI LOOP CONV4DISP: INT 21H CMP CX,0 JZ QUIT INC DI MOV DL,DI LOOP DISPQUIT: POP CX POP BX POP AX RETDISPLAY ENDPCODE ENDS END STARTLOOP OK1 MOV AH,4CH INT 21HDISPLAY PROC NEAR PUSH AX PUSH BX PUSH CX MOV CX,5 LEA SI,CONST LEA DI,DECSCONV3: MOV BL,0LOP: SUB AX,SI JC NEXT INC BL JMP LOPNEXT: ADD AX,SI OR BL,30H MOV DI,BL INC SI INC SI INC DI