微机基础学习知识原理与接口技术(清华第二版)第四章课后复习.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
收藏
- 资源描述:
-
\\
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,3B334778H
DATA ENDS
(2)
STACKI SEGMENT PAGE STACK
SBUFF DB 100 DUP(?)
ETACKI ENDS
(3)
CODE SEGMENT
ASSUME CS:CODE,DS DATA,ES:EXT,SS:STC
START
MOV AX,DATA
MOV AX,DATA
MOV DS,AX
MOV AH,4CH
INT 21H
CODE ENDS
END START
9
(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 有效地址传给AX
12
16H
21H
41H
42H
31H
32H
43H
44H
0010H
0010H
0020H
X1的逻辑地址PA=10A0H*10H+0010H=10A10H
X2的逻辑地址PA=10A0H*10H+0022H=10A22H
13
(1)2437H
(2)00H
(3)2
(4)43H
(5)10
(6)10
14
(1) (AL)=44H
(2) (AX)=0078H
(3) (AX)=0FH
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,3B334778H
DATA ENDS
(2)
STACKI SEGMENT PAGE STACK
SBUFF DB 100 DUP(?)
ETACKI ENDS
(3)
CODE SEGMENT
ASSUME CS:CODE,DS DATA,ES:EXT,SS:STC
START
MOV AX,DATA
MOV AX,DATA
MOV DS,AX
MOV AH,4CH
INT 21H
CODE ENDS
END START
9解:
(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 有效地址传给AX
12解:
16H
21H
41H
42H
31H
32H
43H
44H
0010H
0010H
0020H
X1的逻辑地址PA=10A0H*10H+0010H=10A10H
X2的逻辑地址PA=10A0H*10H+0022H=10A22H
13解:
(1)2437H;
(2)00H;
(3)2;
(4)43H;
(5)10;
(6)10
14解:
(4) (AL)=44H;
(5) (AX)=0078H;
(6) (AX)=0FH
18.编写程序,将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 21H
CODE ENDS
END START
DATA SEGMENT
MBUF DB 5,8,3,7,5
COUNT EQU $-MBUF
NBUF DB 6 DUP(?)
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START:MOV AX,DATA
MOV DS,AX
MOV SI,OFFSET MBUF
MOV DI,OFFSET NBUF
MOV CX,COUNT
ADD SI,CX
20.编写程序,将内存中某数据块中的正数和负数分开,并分别将这些正数和负数送同一数据段的两个缓冲区中,并在屏幕上显示正数和负数的个数(数据自定)。
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 ENDS
MOV 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 21H
DISPLAY PROC NEAR
MOV CX,5
LEA SI,CONST
LEA DI,DECS
CONV: MOV BL,0
AGAIN1: SUB AX,[SI]
JC NEXT
INC BL
JMP AGAIN1
NEXT: 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,DECS
CONV1:MOV DL,[DI]
CMP DL,30H
JNZ CONV3
INC DI
LOOP CONV1
STACK SEGMENT STACK
DB 100 DUP(?)
STACK ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,SS:STACK
START:MOV AX,DATA
MOV DS,AX
LEA BX,D1
LEA SI,D2
LEA DI,D3
MOV CX,COUNT
AGAIN:MOV AL,[BX]
CMP AL,0
JGE LOP1
MOV [DI],AL
INC DI
INC NNUM
JMP LOP
LOP1: JG LOP2
JMP LOP
LOP2: MOV [SI],AL
INC SI
INC PNUM
LOP: 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 21H
CONV3:INT 21H
CMP CX,0
JZ QUIT
INC DI
MOV DL,[DI]
LOOP CONV3
QUIT: RET
DISPLAY ENDP
CODE ENDS
END START
21.编写程序,从内存BLOCK开始,存放着10个字节的有符号数,从这些数中找出绝对值最大的数,将其存入MAX中。
AGAIN:MOV AL,[SI]
CMP AL,0
JGE LOP
NEG AL
LOP: CMP AL,BL
JBE LOP1
XCHG AL,BL
LOP1: INC SI
LOOP AGAIN
ADD BL,30H
MOV MAX,BL
MOV DL,BL
MOV AH,02H
INT 21H
MOV AH,4CH
INT 21H
CODE ENDS
END START
DATA SEGMENT
BLOCK DB 1,-1,4,-3,8,9,-5,3,-1,2
COUNT EQU $-BLOCK
MAX DB ?
DATA ENDS
STACK SEGMENT STACK
DB 100 DUP(0)
STACK ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,SS:STACK
START:MOV AX,DATA
MOV DS,AX
MOV SI,OFFSET BLOCK
MOV BL,0
MOV AH,0
MOV CX,COUNT
26.编写程序,将内存中N个无符号数据从大到小排序后输出显示
LOP1:MOV SI,CX
MOV DI,1
LEA BX,BUF
LOP2:MOV AL,[BX]
CMP AL,[BX+1]
JAE LOP3
XCHG AL,[BX+1]
MOV [BX],AL
MOV DI,0
LOP3:INC BX
LOOP LOP2
CMP DI,0
JNZ OK
MOV CX,SI
LOOP LOP1
OK: MOV CX,NUM
LEA BX,BUF
OK1: 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 ENDS
STACK SEGMENT STACK
DB 100H DUP(?)
STACK ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,SS:STACK
START:MOV AX,DATA
MOV DS,AX
MOV CX,NUM
MOV ADR,0
DEC CX
LOOP CONV3
MOV AH,02H
MOV CX,5
LEA DI,DECS
CONV4: MOV DL,[DI]
CMP DL,30H
JZ NODIS
JMP DISP
NODIS: INC DI
LOOP CONV4
DISP: INT 21H
CMP CX,0
JZ QUIT
INC DI
MOV DL,[DI]
LOOP DISP
QUIT: POP CX
POP BX
POP AX
RET
DISPLAY ENDP
CODE ENDS
END START
LOOP OK1
MOV AH,4CH
INT 21H
DISPLAY PROC NEAR
PUSH AX
PUSH BX
PUSH CX
MOV CX,5
LEA SI,CONST
LEA DI,DECS
CONV3: MOV BL,0
LOP: SUB AX,[SI]
JC NEXT
INC BL
JMP LOP
NEXT: ADD AX,[SI]
OR BL,30H
MOV [DI],BL
INC SI
INC SI
INC DI
展开阅读全文