资源描述
东南大学微机原理与接口技术期终考试复习资料汇总
1.设置CX=0,则LOOP指令将执行多少次?例如:
mov cx, 0
delay: loop delay
A.0 B.1
C.65535 D.65536
正确答案是: D
2.REPZ CMPSB这条指令结束的时候,如果比较的串相等,则________。
A.SF=1 B.ZF=1
C.ZF=0 D.CX不为0
正确答案是: B
3.在取指令CMP BX, 100H的源操作数的时候使用的逻辑地址最可能的是________。
A.DS:100H B.CS:IP
C.ES:100H D.SS:IP
正确答案是: B
4. 在一个字符串中查找一个字符,使用REPNZ SCASB指令,执行完后,如果______表示没有找到。
A.ZF=1 B.CX=0 且ZF=0
C.CX=0,且ZF=1 D.OF=1
正确答案是: B
5. 指令RET 8是FAR过程的返回语句,执行之后,SP的值会______。
A.+8 B.-8
C.+10 D.+12
正确答案是: D
6. REPZ重复前缀重复的条件是________
A.CX<>0 且ZF=1 B.CX=0,或ZF=0
C.CX=0,且ZF=0 D.CX<>0 或ZF=1
正确答案是: A
12. 下面的指令,对CF会产生影响的指令是_____。
A.INC AX B.DEC AX
C.NEG AX D.NOT AX
正确答案是: C
15. JMP WORD PTR[SI]这条指令的最大跳转范围是________。
A.-32768字节至+32767字节 B.-128字节至+127字节
C.-32768字节至+32768字节 D.-512KB至+512KB
正确答案是: A
19. 16位汇编的寻址方式中,能作为基址变址寻址方式的寄存器是_____。
A.SI, DI, SS, DS B.AX,BX,CX,DX
C.BX, SP,SI,DI D.BX,BP,SI,DI
正确答案是: D
23. 如果(AL)=83H,则执行CBW之后,AX的值为_______。
A.0FF83H B.8883FH
C.8003FH D.0083FH
正确答案是: A
25. 以下的公式中,_________的结果是下一条指令的物理地址。
A.CS*16+IP B.CS*16+IP+本条指令的字节数
C.SS*16+IP D.CS*10+IP
正确答案是: A
1. 在内存中从Table开始的10个单元中连续存放0到9的平方值,任给一个0到9的数X,该数存放在内存单元XX中,查表求X的平方值,并将结果存于内存YY单元中。编写程序,并在DEBUG中进行调试和验证结果。(提示:考虑平方表的每一项需要什么数据类型才合适, XLAT指令是否合适?应该如何查表?)
.8086
.MODEL SMALL
.DATA
ORG 10H
TABLE BYTE 0,1,4,9,16,25,36,49,64,81
X BYTE 7
Y BYTE ?
.CODE
START: MOV AX , @DATA
MOV DS , AX
MOV BX , OFFSET TABLE
MOV AL , X
XLAT
MOV Y , AL
END START
2. 假设CX:BX中放了4位非压缩的BCD码表示的十进制数4386,请编写完整程序将这个数转成2进制数放到DI寄存器中,并用DEBUG调试和验证之
.8086
.MODEL SMALL
.DATA
.CODE
START: MOV AX , @DATA
MOV DS , AX
MOV CX , 0403H
MOV BX , 0806H
MOV DI , 0
MOV AX , 0
ADD AL , BL
ADD DI , AX
MOV AL , 10
MUL BH
ADD DI , AX
MOV AX , 100
MUL CL
ADD DI , AX
MOV AX , 1000
XCHG CH , CL
AND CX ,0FH
MUL CX
ADD DI , AX
END START
3. 利用跳转表技术实现根据用户输入的星期几的数字代号在屏幕上显示星期几的英文名称的功能。(提示:1)键盘输入的是数字的ASCII码,需要转换成数字。2)建立一张跳转表,表中存放打印每个星期的程序段的入口地址。3)考虑怎么使程序代码量最小。)
.8086
.MODEL SMALL
.DATA
TABLE BYTE 'Monday$$$$',
'Tuesday$$$',
'Wednesday$',
'Thursday$$',
'Friday$$$$',
'Saturday$$',
'Sunday$$$$'
.CODE
START: MOV AX , @DATA
MOV DS , AX
MOV AH , 01H
INT 21H
CMP AL , 30H
JBE EXIT
CMP AL , 38H
JAE EXIT
AND AX , 0FH
SUB AL , 30H
DEC AL
MOV CL , 10
MUL CL
LEA DX , TABLE
ADD DX , AX
MOV AH , 9
INT 21H
EXIT: MOV AH , 4CH
INT 21H
END START
4. 已知数据段有以下定义:
NUM DW 3570
STRING DB 5 DUP(20H),’$’ ; 20H为空格的ASCII码
请编写完整程序,在屏幕上以十进制的形式将NUM这个数打印出来,可以借助STRING这个字符串。(NUM这个数可以定义为一个任意字型数)。
.8086
.MODEL SMALL
.DATA
ORG 100H
NUM WORD 3570
STRING BYTE 4 DUP(20H),'$'
.CODE
START:MOV AX , @DATA
MOV DS , AX
LEA DI , STRING
MOV AX , NUM
MOV CX , 4
;每次循环除以10,将商作为下次的被除数,余数即为对应的十进制数字
DEC DI
LP:PUSH CX
CWD
MOV CX , 10
DIV CX
POP CX
MOV BX , CX
ADD DL , 30H ;转化为对应的ASCII码
MOV [BX][DI] , DL
LOOP LP
MOV AH , 09H ;输出字符串,以‘$’结尾
LEA DX , STRING
INT 21H
MOV AH , 4CH ;退出程序
INT 21H
END START
5. 统计以‘$’字符结束的字符串string的字符个数。
.8086
.MODEL SMALL
.DATA
ORG 100H
STRING BYTE 'HELLO,WORLD!!!','MY NAME IS ASM','$'
LEN BYTE ?
STR BYTE 3 DUP(20) , '$'
.CODE
START:MOV AX , @DATA
MOV DS , AX
LEA DI , STRING
MOV LEN , 0
MOV BL , '$'
CP:CMP BL , [DI];bl中的值是否为'$',若是则调到continue,若不是则继续比较,相应的值加1
JZ CONTINUE
INC LEN
INC DI
JMP CP
CONTINUE: MOV AL , LEN
LEA SI , STR
MOV CX , 3
DEC SI
LP:PUSH CX
CBW
MOV CL , 10
DIV CL
POP CX
MOV BX , CX
ADD AH , 30H
MOV [BX][SI] , AH
AND AX , 0FFH
LOOP LP
MOV AH , 09H
LEA DX , STR
INT 21H
MOV AH ,4CH
INT 21H
END START
6. 十进制到二进制数转换。从键盘取得一个十进制数,将其以二进数形式显示出来。要求定义回车换行子程序、从键盘获得十进制数(0~128之间),并存放在BL中的子程序,用二进制显示BL中数据的子程序。
.8086
.MODEL SMALL
.DATA
.CODE
START:MOV AX,@DATA
MOV DS,AX
MAIN PROC FAR
CALL SHURU
CALL CRLF
CALL PRT
CALL CRLF
MOV AH,4CH
INT 21H
MAIN ENDP
SHURU PROC NEAR ;出口参数BL
PUSH AX ;保护现场
PUSH CX
MOV BL,0
NEWCHAR:MOV AH,1
INT 21H ;将键盘输入的字符的ASCII码传给AL寄存器
SUB AL,30H
JL EXIT ;小于0转
CMP AL,9
JG EXIT ;大于9转
XCHG AL,BL
MOV CL,10
MUL CL ;将以前的值乘以10
XCHG AL,BL
ADD BL,AL ;加这一次读的值
JMP NEWCHAR
EXIT:POP CX
POP AX
RET
SHURU ENDP
CRLF PROC NEAR
PUSH AX
PUSH DX
MOV DL,0DH ;回车
MOV AH,2
INT 21H
MOV DL,0AH ;换行
MOV AH,2
INT 21H
POP DX
POP AX
RET
CRLF ENDP
PRT PROC NEAR ;入口参数BL
PUSH AX
PUSH CX
PUSH DX
MOV CX,8
LP:ROL BL,1 ;循环左移,将二进制最高位挪到末尾
MOV BH,BL
AND BL,01H ;只保留最后一位,即二进制的第一位
ADD BL,30H ;转化为0或1的ASCII码
MOV DL,BL ;调用DOS的输出字符功能
MOV AH,02H
INT 21H
MOV BL,BH
LOOP LP
POP DX
POP CX
POP SI
RET
PRT ENDP
END START
7. 利用递归程序,计算N!。具体要求:用键盘输入一个数N(1~6之间),利用一个递归过程FAC来计算N!(N放在AL中,结果在DX中),然后将计算的结果以十进制形式打印到屏幕上。
.8086
.MODEL SMALL
.DATA
RESULT WORD ?
STRING BYTE 5 DUP(?),'$'
.CODE
START: MOV AX,@DATA
MOV DS,AX
MAIN PROC FAR
CALL SHURU
CALL FAC
CALL CRLF
MOV DX,AX
CALL PRT
MOV AH,4CH
INT 21H
MAIN ENDP
SHURU PROC NEAR
MOV AH,1
INT 21H
SUB AL,30H
JL EXIT
CMP AL,6
JG EXIT
EXIT:
RET
SHURU ENDP
MOV RESULT,DX
FAC PROC NEAR ;入口参数AL(N的值),出口参数DX(N!)
CMP AL,0
JNZ F1
MOV DX,1
RET
F1:PUSH AX
DEC AL
CALL FAC
POP CX ; 把N的值传给CX
CALL MULT ; 把N*FAC(N-1)传给DX
RET
FAC ENDP
MULT PROC NEAR
MOV AL,CL
MUL DL
MOV DX,AX
RET
MULT ENDP
PRT PROC NEAR
LEA SI,STRING
MOV CX,4
DEC SI
LP:PUSH CX
CWD
MOV CX,10
DIV CX
POP CX
MOV BX,CX
ADD DL,30H ;转化成ASCII码
MOV [BX][SI],DL
LOOP LP
MOV AH,09H
LEA DX,STRING
INT 21H
RET
PRT ENDP
CRLF PROC NEAR
PUSH AX
PUSH DX
MOV DL,0DH ;回车
MOV AH,2
INT 21H
MOV DL,0AH ;换行
MOV AH,2
INT 21H
POP DX
POP AX
RET
CRLF ENDP
END START
展开阅读全文