第四章
1. 下列变量各占多少字节?
A1 DW 23H,5876H
A2 DB 3 DUP(?),0AH,0DH, ‘$’
A3 DD 5 DUP(1234H, 567890H)
A4 DB 4 DUP(3 DUP(1, 2,’ABC’))
答:A1占4个字节
A2占6个字节
A3占40个字节
A4占60个字节
2. 下列指令完成什么功能?
MOV AX,00FFH AND 1122H+3344H
MOV AL,15 GE 1111B
MOV AX,00FFH LE 255+6/5
AND AL, 50 MOD 4
OR AX, 0F00FH AND 1234 OR 00FFH
答:(1)将0066H传送给AX
(2)将0FFH传送给AL
(3)将0FFFFH传送给AX
(4)AND AL,02H
(5)OR AX,00FFH
3. 有符号定义语句如下:
BUF DB 3,4,5,’123’
ABUF DB 0
L EQU ABUF-BUF
求L的值为多少?
答:L=6
4. 假设程序中的数据定义如下:
PAR DW ?
PNAME DB 16 DUP(?)
COUNT DD ?
PLENTH EQU $-PAR
求PLENTH的值为多少?表示什么意义?
答:PAR的偏移地址为0,PLENTH当前偏移地址$=2+16+4=22, $-PAR=22,故PLENTH 的值为22。
若在PLENTH所在行有变量定义,则$表示该变量的偏移地址,即$表示PLENTH所在行的当前偏移地址。故PLENTH表示从当前行到PAR之间定义的变量所占的字节个数。
5. 对于下面的数据定义,各条MOV指令执行后,有关寄存器的内容是什么?
DA1 DB ?
DA2 DW 10 DUP(?)
DA3 DB ‘ABCD’
MOV AX, TYPE DA1
MOV BX, SIZE DA2
MOV CX, LENGTH DA3
答:AX=1,BX=20,CX=1
6. 下段程序完成后,AH等于什么?
IN AL, 5FH
TEST AL, 80H
JZ L1
MOV AH, 0
JMP STOP
L1: MOV AH, 0FFH
STOP: HLT
答:讨论从端口5FH输入的数据最高位的情况。若最高位为1,则AH=0;若最高位为0,则AH=0FFH。
7. 编程序完成下列功能:
(1)利用中断调用产生5秒延时。
(2)利用中断调用,在屏幕上显示1~9之间随机数。
答:(1)可以利用中断类型1CH来处理,因为在系统时钟的中断处理程序中,时钟中断一次要调用一次INT 1CH,即每隔55ms,产生一次1CH中断,要产生5秒延时,只要中断5s/55ms=91次即可。又因1CH中断处理程序中只有一条IRET指令,故可将用户的程序代替原有的INT 1CH程序。
DATA SEGMENT
COUNT DW 91 ;计数器
MESS DB ‘5 s delayed!’,0AH,0DH,’$’
DATA ENDS
CODE SEGMENT
MAIN PROC FAR
ASSUME CS:CODE,DS:DATA,ES:DATA
START: PUSH DS
MOV AX,0
PUSH AX
MOV AX,DATA
MOV DS,AX
MOV AL,1CH ;得到原中断向量
MOV AH,35H
INT 21H
PUSH ES ;存储原中断向量
PUSH BX
PUSH DS
MOV DX,OFFSET DELAY ;DELAY的偏移地址和段地址
MOV AX,SEG DELAY
MOV DS,AX
MOV AL,1CH ;设置中断向量
MOV AH,25H
INT 21H
POP DS
IN AL,21H ;设置中断屏蔽位
AND AL,0FEH
OUT 21H,AL
STI
MOV DI,2000H ;主程序延迟,在执行此段程序期间A1: MOV SI,3000H ;产生中断
A2: DEC SI
JNZ A2
DEC DI
JNZ A1
POP DX ;取原中断向量
POP DS
MOV AL,1CH
MOV AH,25H
INT 21H
RET
MAIN ENDP
DELAY PROC NEAR
PUSH DS
PUSH AX
PUSH CX
PUSH DX
MOV AX,DATA
MOV DS,AX
STI
DEC COUNT ;5秒计数
JNZ EXIT
MOV DX,OFFSET MESS ;显示信息
MOV AH,09H
INT 21H
MOV COUNT,91 ;5秒的值
EXIT: CLI
POP DX
POP CX
POP AX
POP DS
IRET
DELAY ENDP
CODE ENDS
END START
(2)可以利用INT 1AH,读取当前时间的1/100秒为随机数。
CODE SEGMENT
ASSUME CS:CODE
START:MOV AH,0
INT 1AH ;读取当前时间CH:CL=时:分
MOV AL,DL ;DH:DL=秒:1/100秒
MOV AH,0
MOV BL,9
DIV BL
INC AH
MOV DL,AH
ADD DL,30H
MOV AH,2
INT 21H
MOV AH,4CH
INT 21H
CODE ENDS
END START
8. 编两个通过过程完成将AX中存放的二进制数转换成压缩型BCD码以及将BCD码转换成二进制数。
答:(1)将AX中的二进制数先后除以1000,100和10,每次除法所得的商,即是BCD数的千位、百位和十位数,余数是个位数。
子程序名:B2TOBCD
输入参数:AX=十六位二进制数
输出参数:CF=0,则AX=4位压缩型BCD码。CF=1,则要转换的数大于9999,AX不变。
使用寄存器:CX:存放除数,DX:存放中间结果。
B2TOBCD PROC FAR
CMP AX,9999 ;AX>9999,则CF置1
JBE TRAN
STC
JMP EXIT
TRAN: PUSH CX
PUSH DX
SUB DX,DX ;DX清0
MOV CX,1000 ;计算千位数
DIV CX
XCHG AX,DX ;商在DX中,余数在AX中
MOV CL,4
SHL DX,CL ;DX左移4位
MOV CL,100 ;计算百位数
DIV CL
ADD DL,AL ;百位数加到DL中,DX左移4位
MOV CL,4
SHL DX,CL
XCHG AL,AH ;余数保留在AL中
SUB AH,AH
MOV CL,10 ;计算十位数
DIV CL
ADD DL,AL ;十位数加到DL中,DX左移4位MOV CL,4
SHL DX,CL
ADD DL,AH ;加个位数
MOV AX,DX ;结果送到AX中
POP DX
POP CX
EXIT: RET
B2TOBCD ENDP
(2)将AX中4位BCD码顺序乘以1000,100,10和1,然后求和即得。
子程序名:BCDTOB2
输入参数:AX=4位压缩BCD码
输出参数:AX=十六位二进制数
使用寄存器:BX:暂存数据,CX:存放乘数,DX:存放中间结果
BCDTOB2 PROC FAR
PUSH BX
PUSH CX
PUSH DX
MOV BX,AX
MOV CL,4
ROL AX,CL
AND AX,000FH
MOV CX,1000 ;乘以1000
MUL CX
MOV DX,AX
MOV AX,BX
MOV CL,8
ROL AX,CL
AND AX,000FH
MOV CL,100 ;乘以100
MUL CL
ADD DX,AX
MOV AX,BX
MOV CL,4
SHR AX,CL
AND AX,000FH
MOV CL,10 ;乘以10
MUL CL
ADD DX,AX
AND BX,000FH
ADD DX,BX
MOV AX,DX
POP DX
POP CX
POP BX
RET
BCDTOB2 ENDP
9. 编写两个通用过程,一个完成ASCII码转换成二进制数功能,另一个完成ASCII字符显示输出功能。
答:(1)将AX中两位ASCII码先转化成数字,然后AH*10+AL。
子程序名:ASCIITOB2
输入参数:AX=2位ASCII码
输出参数:AX=转换后二进制数
使用寄存器:BX,CX,DX
ASCIITOB2 PROC FAR
PUSH BX
PUSH CX
PUSH DX
MOV BX,AX
SUB AH,30H
MOV AL,AH
MOV CL,10 ;乘以10
MUL CL
MOV DX,AX
MOV AX,BX
SUB AL,30H
MOV AH,0
ADD AX,DX
POP DX
POP CX
POP BX
RET
ASCIITOB2 ENDP
(2)使用2号DOS功能调用显示字符。
子程序名:DISPLAY
输入参数:AX=2位ASCII码
输出参数:无
使用寄存器:BX,DX
DISPLAY PROC FAR
PUSH BX
PUSH DX
MOV BX,AX
MOV DL,AH
MOV AH,2
INT 21H
MOV AX,BX
MOV DL,AL
MOV AH,2
INT 21H
POP DX
POP BX
RET
DISPLAY ENDP
10. 编制两个通用过程,完成十六进制数转换成ASCII码并将ASCII码字符显示。答:(1)子程序名:HEXTOASC
输入参数:AX:4位十六进制数
输出参数:DX,AX:4位ASCII码,DX高2位,AX低2位
使用寄存器:BX,CX,DX
HEXTOASC PROC FAR
PUSH BX
PUSH CX
PUSH DX
MOV BX,AX
MOV CL,4 ;转换AH高4位
SHR AX,CL
AND AX,0F00H
ADD AH,30H
CMP AH,3AH
JB A1
ADD AH,7
A1: MOV DH,AH
MOV AX,BX ;转换AH低4位
AND AX,0F00H
ADD AH,30H
CMP AH,3AH
JB A2
ADD AH,7
A2: MOV DL,AH
MOV BH,BL ;转换AL高4位
MOV CL,4
SHR BL,CL
ADD BL,30H
CMP BL,3AH
JB A3
ADD BL,7
A3: MOV AH,BL
AND BH,0FH ;转换AL低4位
ADD BH,30H
CMP BH,3AH
JB A4
ADD BH,7
A4: MOV AL,BH
POP DX
POP CX
POP BX
RET
HEXTOASC ENDP
(2)子程序名:DISPLAYASC
输入参数:DX,AX:4位ASCII码
输出参数:无
使用寄存器:BX,CX
DISPLAYASC PROC FAR
PUSH BX
PUSH CX
MOV BX,DX
MOV CX,AX
MOV DL,BH
MOV AH,02H
INT 21H
MOV DL,BL
INT 21H
MOV DL,CH
INT 21H
MOV DL,CL
INT 21H
MOV DL,’H’
INT 21H
POP CX
POP BX
RET
DISPLAYASC ENDP
11. 某程序可从键盘接收命令(0~5),分别转向6个子程序,子程序入口地址分别为P0~P5,编制程序,用跳转表实现分支结构。
答:DATA SEGMENT
TABLE DW 6 DUP(?)
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START: MOV AX,DATA
MOV DS,AX
LEA SI, TABLE
MOV WORD PTR[SI],OFFSET P0
MOV WORD PTR[SI+2],OFFSET P1
MOV WORD PTR[SI+4],OFFSET P2
MOV WORD PTR[SI+6],OFFSET P3
MOV WORD PTR[SI+8],OFFSET P4
MOV WORD PTR[SI+10],OFFSET P5
MOV AH,1
INT 21H
SUB AL,30H
SHL AL,1
MOV AH,0
MOV SI,AX
JMP TABLE[SI]
P0:
P1:
P2:
P3:
P4:
P5:
MOV AH,4CH
INT 21H
CODE ENDS
END START
12. 在首地址为TABLE的数组中按递增次序存放着100个16位补码数,编写一个程序,把出现次数最多的数及其出现次数分别存放于AX和BL中。
答:DATA SEGMENT
TABLE DW 100 DUP (?) ;数组中的数据是按增序排列的
NUM DW ?
COUNT DW 0
DATA ENDS
CODE SEGMENT
MAIN PROC FAR
ASSUME CS: CODE, DS: DATA
START: PUSH DS ;设置返回DOS
SUB AX, AX
PUSH AX
MOV AX, DATA
MOV DS, AX ;给DS赋值
BEGIN: MOV CX, 100 ;循环计数器
MOV SI, 0
NEXT: MOV DX, 0
MOV AX, TABLE[SI]
COMP: CMP TABLE [SI], AX ;计算一个数的出现次数
JNE ADDR
INC DX
ADD SI, 2
LOOP COMP
ADDR: CMP DX, COUNT ;此数出现的次数最多吗?
JLE DONE
MOV COUNT, DX ;目前此数出现的次数最多,记下次数
MOV NUM, AX ;记下此数
DONE: LOOP NEXT ;准备取下一个数
MOV CX, COUNT ;出现最多的次数存入(CX)
MOV AX, NUM ;出现最多的数存入(AX)
RET
MAIN ENDP
CODE ENDS ;以上定义代码段
END START
13. 将键盘上输入的十六进制数转换成十进制数,在屏幕上显示。
答:DATA SEGMENT
STRING DB 'INPUT 4 HEX NUM:',0AH,0DH,'$'
NUM DB 10 DUP(?)
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START: MOV AX,DATA
MOV DS,AX
LEA DX,STRING ;显示提示信息
MOV AH,9
INT 21H
MOV BP,4
MOV DX,0
CONT: MOV CL,4 ;输入4位十六进制数?DX
SHL DX,CL
D1: MOV AH,1
INT 21H
CMP AL,'0'
JB D1
CMP AL,'F'
JA D1
CMP AL,'A'
JB A1
SUB AL,7
A1: SUB AL,30H
MOV AH,0
ADD DX,AX
DEC BP
JNZ CONT
MOV SI,0 ;将DX转换成十进制数,再转换成ASCII码—>NUM MOV AX,DX
MOV DX,0
MOV BX,10
D2: DIV BX
ADD DL,30H
MOV NUM[SI],DL
INC SI
CMP AX,0
JZ EXIT
MOV DX,0
JMP D2
EXIT: MOV DL,0AH ;显示十进制数
MOV AH,2
INT 21H
MOV DL,0DH
INT 21H
D3: DEC SI
MOV DL,NUM[SI]
MOV AH,2
INT 21H
JNZ D3
MOV AH,4CH
INT 21H
CODE ENDS
END START
14. 将AX中的无符号二进制数转换成ASCII字符串表示的十进制数。
答:将13题输入过程和输出过程去掉即得。
DATA SEGMENT
NUM DB 10 DUP(?) ;转换后ASCII码按倒序存放于NUM
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START: MOV AX,DATA
MOV DS,AX
MOV AX, ×××× ;无符号二进制数
MOV SI,0 ;将AX转换成十进制数,再转换成ASCII码—>NUM MOV DX,0
MOV BX,10
D2: DIV BX
ADD DL,30H
MOV NUM[SI],DL
INC SI
CMP AX,0
JZ EXIT
MOV DX,0
JMP D2
EXIT: MOV AH,4CH
INT 21H
CODE ENDS
END START
15. 从键盘输入20个有符号数,将它们排序并在屏幕上显示。
答:DATA SEGMENT
NUM DW 20 DUP(?) ;存放20个有符号数
ASC DB 10 DUP(?) ;输出时暂时保存每一个数的ASCII码DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START: MOV AX,DATA
MOV DS,AX
MOV CX,20
MOV BX,10
MOV SI,0
MOV BP,0
BEGIN: MOV DX,0 ;输入20个有符号数(十进制),并
A1: MOV AH,1 ;转化为二进制数存放于NUM数组INT 21H
CMP AL,' ' ;判断是否空格
JZ A2
CMP AL,0DH ;是否回车符
JZ A2
CMP AL,'-' ;是否‘-’
JZ A3
JMP A4
A3: MOV BP,1
JMP A1
A4: PUSH AX
MOV AX,DX
MUL BX
MOV DX,AX
POP AX
SUB AL,30H
MOV AH,0
ADD DX,AX
JMP A1
A2: CMP BP,1
JNZ A5
NEG DX ;若为负数,则取负
A5: MOV NUM[SI],DX
MOV BP,0
ADD SI,2
LOOP BEGIN
MOV DL,0DH ;回车换行
MOV AH,2
INT 21H
MOV DL,0AH
INT 21H
MOV BX,0 ;对20个有符号数按由小到大顺序排序
MOV CX,19 ;采用冒泡法,排序后依然存放于NUM数组L1: MOV DX,CX
L2: MOV AX,NUM[BX]
CMP AX,NUM[BX+2]
JLE CONT1
XCHG AX,NUM[BX+2]
MOV NUM[BX],AX
CONT1: ADD BX,2
LOOP L2
MOV CX,DX
MOV BX,0
LOOP L1
MOV CX,20 ;将20个有符号数(二进制)转换为十进制数
MOV SI,0 ;再转换为ASCII码并输出屏幕
D1: MOV AX,NUM[SI]
ADD SI,2
TEST AX,1000H
JZ D4
PUSH AX
MOV DL,'-'
MOV AH,2
INT 21H
POP AX
NEG AX
D4: MOV DI,0
MOV DX,0
MOV BX,10
D2: DIV BX
ADD DL,30H
MOV ASC[DI],DL
INC DI
CMP AX,0
JZ D3
MOV DX,0
D3: MOV DL,ASC[DI-1]
MOV AH,2
INT 21H
DEC DI
JNZ D3
MOV DL,' '
MOV AH,2
INT 21H
LOOP D1
MOV AH,4CH ;返回DOS
INT 21H
CODE ENDS
END START
16. 编写多字节有符号数的加法程序,从键盘接收两个加数,在屏幕上显示结果。答:DATA SEGMENT
STRING1 DB 'INPUT FIRST NUM(HEX):',0DH,0AH,'$'
STRING2 DB 'INPUT SECOND NUM(HEX):',0DH,0AH,'$'
STRING3 DB 'THE RESULT IS(HEX):',0DH,0AH,'$'
NUM1 DW 0,0 ;存放加数1
NUM2 DW 0,0 ;存放加数2
RESULT DB 0,0,0,0 ;存放结果
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START: MOV AX,DATA
MOV DS,AX
LEA DX,STRING1 ;输入第一个加数(4位十六进制数)
MOV AH,9
INT 21H
MOV SI,2
MOV CX,8
CONT: PUSH CX
CMP CX,4
JNZ B1
SUB SI,2
B1: MOV CL,4
SHL NUM1[SI],CL
C1: MOV AH,1
INT 21H
CMP AL,'0'
JB C1
CMP AL,'F'
CMP AL,'A'
JB A1
SUB AL,7
A1: SUB AL,30H
MOV AH,0
ADD NUM1[SI],AX
POP CX
LOOP CONT
MOV DL,0DH ;回车换行
MOV AH,2
INT 21H
MOV DL,0AH
INT 21H
LEA DX,STRING2 ;输入第二个加数(4位十六进制数)
MOV AH,9
INT 21H
MOV SI,2
MOV CX,8
CONT1: PUSH CX
CMP CX,4
JNZ B2
SUB SI,2
B2: MOV CL,4
SHL NUM2[SI],CL
C2: MOV AH,1
INT 21H
CMP AL,'0'
JB C2
CMP AL,'F'
JA C2
CMP AL,'A'
JB A2
SUB AL,7
A2: SUB AL,30H
MOV AH,0
ADD NUM2[SI],AX
POP CX
LOOP CONT1
MOV DL,0DH ;回车换行
MOV AH,2
INT 21H
MOV DL,0AH
INT 21H
LEA SI,NUM1 ;两数相加
LEA BX,NUM2
LEA DI,RESULT
MOV CX,4
CLC
AD: MOV AL,[SI]
ADC AL,[BX]
MOV [DI],AL
INC SI
INC BX
INC DI
LOOP AD
LEA DX,STRING3 ;显示结果(4位十六进制数)
MOV AH,9
INT 21H
MOV CX,4
MOV DI,3
TT: PUSH CX
MOV DL,RESULT[DI]
MOV CL,4
SHR DL,CL
ADD DL,30H
CMP DL,3AH
JB D1
ADD DL,7
D1: MOV AH,2
INT 21H
MOV DL,RESULT[DI]
AND DL,0FH
ADD DL,30H
CMP DL,3AH
JB D2
ADD DL,7
D2: MOV AH,2
INT 21H
DEC DI
POP CX
LOOP TT
MOV AH,4CH ;返回DOS
INT 21H
CODE ENDS
END START
17. 编写2位非压缩型BCD码相乘的程序。答:转化成加法进行累加运算。
DATA SEGMENT
DA1 DB 09H,09H
DA2 DB 09H,08H
RESULT DB 4 DUP(0)
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START: MOV AX,DATA
MOV DS,AX
MOV AL,DA2+1 ;计算加法次数
MOV BL,10
MUL BL
MOV BL,DA2
MOV BH,0
ADD AX,BX
MOV CX,AX
CONT: MOV AH,0 ;通过循环做累加MOV AL,RESULT
ADD AL,DA1
AAA
MOV RESULT,AL
MOV AL,RESULT+1
ADD AL,AH
MOV AH,0
AAA
ADD AL,DA1+1
AAA
MOV RESULT+1,AL
MOV AL,RESULT+2
ADD AL,AH
MOV AH,0
AAA
MOV RESULT+2,AL
MOV AL,RESULT+3
ADD AL,AH
MOV AH,0
AAA
MOV RESULT+3,AL
LOOP CONT
MOV AH,4CH ;返回DOS
INT 21H
CODE ENDS
END START
18. 编写完整的程序求N!,求N大于6时的运算结果,并在屏幕上显示结果。答:DATA SEGMENT
N DB 8 ;求8的阶乘
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START: MOV AX,DATA
MOV DS,AX
MOV AL,N
MOV AH,0
CALL FACT ;调用过程求N!,AX=N,BX=N!
CALL B2TODEC ;调用过程将结果转换为十进制,然后屏幕显示
MOV AH,4CH
INT 21H
FACT PROC
CMP AL,0
JNZ CHN
MOV BX,1
RET
CHN: PUSH AX
DEC AL
CALL FACT ;递归调用N!=N*(N-1)!
POP AX
MUL BX
MOV BX,AX
RET
FACT ENDP
B2TODEC PROC
MOV CX,10000
CALL BIN
MOV CX,1000
CALL BIN
MOV CX,100
CALL BIN
MOV CX,10
CALL BIN
MOV CX,1
CALL BIN
RET
B2TODEC ENDP
BIN PROC
MOV AX,BX
MOV DX,0
DIV CX
MOV BX,DX
MOV DL,AL
ADD DL,30H
MOV AH,2
INT 21H
RET
BIN ENDP
CODE ENDS
END START
19. 在附加段有一个数组,首地址为BUFF,数组中第一个字节存放了数组的长度。编一个程序在数组中查找0,找到后把它从数组中删去,后续项向前压缩,其余部分补0。
答:DATA SEGMENT
BUFF DB 10, 1,0,2,3,4,0,5,6,7,0 ;10个数
M EQU 0
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE, ES:DATA, DS:DATA
START: MOV AX, DATA ; 初始化ES,DS
MOV ES, AX
MOV DS, AX
MOV AL, M ; 关键字M存入AL
MOV DI, OFFSET BUFF
MOV CL, [DI] ; 数组长度存入CX
MOV CH, 0
INC DI ;指向数组起始地址
CLD ;清方向标志
L1: REPNE SCASB ;重复搜索关键字
JNZ STOP ; 未找到,转STOP结束
JCXZ STOP ; 最后一个数是M,转STOP
PUSH DI ;关键字下一单元地址和循
PUSH CX ;环次数入栈保护
DEL: MOV BL, [DI] ; 前移,末尾补0
MOV [DI-1], BL
INC DI
LOOP DEL
MOV BYTE PTR[DI-1], 0
POP CX ; 恢复CX,DI
POP DI
DEC DI ; 由于REPNE SCASB已自动加1
JMP L1
STOP: MOV AH, 4CH
INT 21H
CODE ENDS
END START
20. 编程完成将第二个字符串插入到第一个字符串的指定位置上。
答:DATA SEGMENT
STRING1 DB 'THIS IS THE FIRST STRING!','$'
DB 100 DUP(0) ;缓冲区
NUM1 DW ? ;字符串1的长度
STRING2 DB 'the second string!','$'
NUM2 DW ? ;字符串2的长度
POS DW 8 ;插入位置
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,ES:DATA
START: MOV AX,DATA
MOV DS,AX
MOV ES,AX
LEA DI,STRING1 ;求字符串1的长度存入NUM1
MOV AL,'$'
MOV NUM1,0
CLD
D1: SCASB
JZ D2
INC NUM1
JMP D1
D2: LEA DI,STRING2 ;求字符串2的长度存入NUM2
MOV AL,'$'
MOV NUM2,0
CLD
D3: SCASB
JZ D4
INC NUM2
JMP D3
D4: LEA SI,STRING1 ;将字符串1自插入位置开始的字符向后移动, ADD SI,NUM1 ;空出位置以便插入字符串2
MOV DI,SI
ADD DI,NUM2
STD
MOV CX,NUM1
SUB CX,POS
INC CX
REP MOVSB
LEA SI,STRING2 ;将字符串2插入到字符串1指定位置
第一章 一、选择题 7.(D)8.(B)9.(D)10.(C)11.(A) 二、填空题 l.(运算器)2.(冯·诺依曼、输出器、存储器、存储器)9.(尾数、指数) 第二章 一、选择题 1.(C)4.(B)5.(D)7.(A)8.(D)18.(B) 二、填空题 4.(TF、DF、IF) 5. (9E100H)10.(0、0、 1、1)15.(FFFFH、0000H、0000H、0000H) 三、问答题 2.完成下列补码运算,并根据结果设置标志SF、ZF、CF和OF,指出运算结果是否溢出? (1)00101101B+10011100B (2) 01011101B-10111010B (3)876AH-0F32BH (4)10000000B十 11111111B (1)00101101B +10011100B 11001001B=C9H SF=1 ZF=0 CF=0 OF=0 (2) -10111010B=01000110B 01011101B-10111010B=01011101B +01000110B 10100011B SF=1 ZF=0 CF=0 OF=1 (3)876AH-0F32BH=876AH +0CD5H 943FH SF=1 ZF=0 CF=0 OF=0 (4) 10000000B +11111111B 101111111B=7FH SF=0 ZF=0 CF=1 OF=1 习题3 一、选择题 1.D 4.B 5.A 14.D 17.C 二、填空题 7. 3400H;5000H 8. 9AH;6CH;0;1;1;1;0 17.低8位;高8位;0FFA4H 三,问答题 1、(1)源操作数是基址寻址,目的操作数是寄存器寻址(2)逻辑地址是0705H,物理地址是10705H (3)(AX)=1234H (BX)=0700H 10、(1)MOV SI,2500H MOV DI,1400H MOV CX,64H CLD REP MOVSB (2) MOV SI,2500H MOV DI,1400H MOV CX,64H CLD REPE CMPSB JNZ L1 XOR BX,BX HLT L1:DEC SI MOV BX,SI MOV AL,[SI] HLT 习题4 一、选择题 1.B 4.C 二、填空题 1..ASM;.OBJ;.EXE 6.( AX)= 1 (BX)= 2 (CX)= 20 (DX)= 40
第一章 2、完成下列数制之间的转换。 (1)01011100B=92D (3)135D=10000111B (5)10110010B=262Q=B2H 3、组合型BCD码和非组合型BCD码有什么区别?写出十进制数254的组合型BCD数和非组合型数。 答:组合型BCD码用高四位和低四位分别对应十进制数的个位和十位,其表示范围是0~99;非组合型BCD码用一个字节的低四位表示十进制数,高四位则任意取值,表示范围为0~9。 组合型:254=(001001010100)BCD 非组合型:254=(00000010 00000101 00000100)BCD 7、计算机为什么采用补码形式存储数据?当计算机的字长n=16,补码的数据表示范围是多少? 答:在补码运算过程中,符号位参加运算,简化了加减法规则,且能使减法运算转化为加法运算,可以简化机器的运算器电路。+32767~ -32768。 9、设计算机字长n=8,求下列各式的[X+Y]补和[X-Y]补,并验证计算结果是否正确。 (1)X=18,Y=89 [X+Y]补=00010010+01011001=01101011B=107D 正确 [X-Y]补=10111001B=00010010+10100111=(-71D)补正确 (2)X=-23,Y=-11 [X+Y]补=11101001+11110101=11011110B=(-34D)补正确[X-Y]补=11101001+00001011=11110100B=(-12D)补正确 (3)X=18,Y=-15 [X+Y]补=00010010+11110001=00000011B=(3D)补正确 [X-Y]补=00010010+00001111=00100001B=(33D)补正确 (4)X=-18,Y=120 [X+Y]补=11101110+01111000=01100110B=(102D)补正确[X-Y]补=11101110+10001000=01110110B=(123D)补由于X-Y=-138 超出了机器数范围,因此出错了。 13、微型计算机的主要性能指标有哪些? 答:CPU字长、存储器容量、运算速度、CPU内核和IO工作电压、制造工艺、扩展能力、软件配置。 第二章 2、8086标志寄存器包含哪些标志位?试说明各标志位的作用。 答:进位标志:CF;奇偶校验:PF;辅助进位:AF;零标志:ZF;符号标志:SF;溢出标志:OF。 5、逻辑地址与物理地址有什么区别?如何将逻辑地址转换为物理地址? 答:物理地址是访问存储器的实际地址,一个存储单元对应唯一的一个物理地址。逻辑地址是对应逻辑段内的一种地址表示形式,它由段基址和段内偏移地址两部分组成,通常表示为段基址:偏移地址。 物理地址=段基址*10H+偏移地址。 6、写出下列逻辑地址的段基址、偏移地址和物理地址。 (1)2314H:0035H (2)1FD0H:000AH 答:(1)段基址:2314H;偏移地址:0035H;物理地址:23175H。 (2)段基址:1FD0H;偏移地址:000AH;物理地址:1FD0AH。 8、设(CS)=2025H,(IP)=0100H,则当前将要执行指令的物理地址是多少? 答:物理地址=(CS)*10H+(IP)=20350H 9、设一个16字的数据区,它的起始地址为70A0H:DDF6H(段基址:偏移地址),求这个数据区的首字单元和末字单元的物理地址。
1、 2、B 3、十,非压缩的BCD码 4、 5、微型计算机、微型计算机系统 6、,, 二、 B D B 三、 1、微型计算机系统的基本组成。 答案:以微型计算机为主体,配上相应的系统软件、应用软件和外部设备之后,组成微型计算机系统。 2、简述冯.诺依曼型计算机基本组成。 答案:冯.诺依曼型计算机是由运算器,控制器,存储器,输入设备和输出设备组成的。其中,运算器是对信息进行加工和运算的部件;控制器是整个计算机的控制中心,所以数值计算和信息的输入,输出都有是在控制器的统一指挥下进行的;存储器是用来存放数据和程序的部件,它由许多存储单元组成,每一个存储单元可以存放一个字节;输入设备是把人们编写好的程序和数据送入到计算机内部;输出设备是把运算结果告知用户。 3、什么是微型计算机 答案:微型计算机由CPU、存储器、输入/输出接口电路和系统总线构成。 4、什么是溢出 答案:在两个有符号数进行家减运算时,如果运算结果超出了该符号数可表示的范围,就会发生溢出,使计算出错。
1、4、100ns 2、Ready ,Tw(等待) 3、ALE 4、INTR 5、85010H 6、存储器或I/O接口未准备好 7、非屏蔽中断 8、指令周期 9、4 二、 1、在内部结构上,微处理器主要有那些功能部件组成 答案:1) 算术逻辑部件2) 累加器和通用寄存器组 3) 程序计数器4) 时序和控制部件 2、微处理器一般应具有那些基本功能 答案:1.可以进行算术和逻辑运算2.可保存少量数据 3.能对指令进行译码并完成规定的操作4.能和存储器、外部设备交换数据 5.提供整个系统所需的定时和控制6.可以响应其他部件发来的中断请求 3、什么是总线周期 答案:CPU通过外部总线对存储器或I/O端口进行一次读/写操作的过程;一个基本的总线周期包含4个T状态,分别称为T1、T2、T3、T4。 三、×、×、×、×、×、√、√
李伯成《微机原理》习题第一章 本章作业参考书目: ①薛钧义主编《微型计算机原理与应用——Intel 80X86系列》 机械工业出版社2002年2月第一版 ②陆一倩编《微型计算机原理及其应用(十六位微型机)》 哈尔滨工业大学出版社1994年8月第四版 ③王永山等编《微型计算机原理与应用》 西安电子科技大学出版社2000年9月 1.1将下列二进制数转换成十进制数: X=10010110B= 1*27+0*26+0*25+1*24+0*23+1*22+1*21 +0*21 =128D+0D+0D+16D+0D+0D+4D+2D=150D X=101101100B =1*28+0*27+1*26+1*25+0*24+1*23+1*22+0*21+0*20 =256D+0D+64D+32D+0D+16D+4D+0D=364D X=1101101B= 1*26+1*25+0*24+1*23+1*22+0*21 +1*20 =64D+32D+0D+8D+4D+0D+1D=109D 1.2 将下列二进制小数转换成十进制数: (1)X=0.00111B= 0*2-1+0*2-2+1*2-3+1*2-4+1*2-5= 0D+0D+0.125D+0.0625D+0.03125D=0.21875D (2) X=0.11011B= 1*2-1+1*2-2+0*2-3+1*2-4+1*2-5= 0.5D+0.25D+0D+0.0625D+0.03125D=0.84375D (3) X=0.101101B= 1*2-1+0*2-2+1*2-3+1*2-4+0*2-5+1*2-6= 0.5D+0D+0.125D+0.0625D+0D+0.015625D=0.703125D 1.3 将下列十进制整数转换成二进制数: (1)X=254D=11111110B (2)X=1039D=10000001111B (3)X=141D=10001101B 1.4 将下列十进制小数转换成二进制数: (1)X=0.75D=0.11B (2) X=0.102 D=0.0001101B (3) X=0.6667D=0.101010101B 1.5 将下列十进制数转换成二进制数 (1) 100.25D= 0110 0100.01H (2) 680.75D= 0010 1010 1000.11B 1.6 将下列二进制数转换成十进制数 (1) X=1001101.1011B =77.6875D
4.9练习题 10、写一个宏定义,要求能把任意一个寄存器的最低位移至另一个存储器的最高位中。 DATA SEGMENT VAR1 DB 4,6 VAR2 DD 200 DUP(?) DATA ENDS STACKS SEGMENT STACKS ENDS CODES SEGMENT ASSUME CS:CODES,DS:DATA,SS:STACKS START: MOV AX,DATA MOV DS,AX XTY MACRO X,Y MOV AX,X AND AX,1 ROR AX,1 MOV Y,AX ENDM MOV DX,1 MOV AX,0 XTY DX,AX, MOV AH,4CH INT 21H CODES ENDS END START 11、利用DOS功能调用从键盘输入60个字符到缓冲区BUF中,在按下ENTER键后在屏幕上显示这些字符。请写出程序段。 DATA SEGMENT ST1 DB 'Please input 60 characters from keyboard.',0DH,0AH,'$' BUF DB 61 DUP(?) DATA ENDS COD SEGMENT ASSUME CS:COD,DS:DATA START: MOV AX,DATA MOV DS,AX MOV DL,07H MOV AH,2 INT 21H MOV DX,OFFSET ST1 MOV AH,9 INT 21H LEA SI, BUF MOV CX,60 LP: MOV AH,7 INT 21H MOV [SI],AL CMP AL,0DH JZ EXIT INC SI LOOP LP EXIT: MOV BX,60 SUB BX,CX MOV CX,BX LEA SI, BUF LP2: MOV DL,[SI] MOV AH,6 INT 21H INC SI LOOP LP2 MOV AH,4CH INT 21H COD ENDS END START
第一章 6、[+42]原=00101010B=[+42]反=[+42]补 [-42]原 [-42]反 [-42]补 [+85]原=01010101B=[+85]反=[+85]补 [-85]原 [-85]反 [-85]补 10、微型计算机基本结构框图 微处理器通过一组总线(Bus)与存储器和I/O接口相连,根据指令的控制,选中并控制它们。微处理器的工作:控制它与存储器或I/O设备间的数据交换;进行算术和逻辑运算等操作;判定和控制程序流向。 存储器用来存放数据和指令,其内容以二进制表示。每个单元可存8位(1字节)二进制信息。 输入——将原始数据和程序传送到计算机。 输出——将计算机处理好的数据以各种形式(数字、字母、文字、图形、图像和声音等)送到外部。 接口电路是主机和外设间的桥梁,提供数据缓冲驱动、信号电平转换、信息转换、地址译码、定时控制等各种功能。 总线:从CPU和各I/O接口芯片的内部各功能电路的连接,到计算机系统内部的各部件间的数据传送和通信,乃至计算机主板与适配器卡的连接,以及计算机与外部设备间的连接,都要通过总线(Bus)来实现。 13、8086有20根地址线A19~A0,最大可寻址220=1048576字节单元,即1MB;80386有32根地址线,可寻址232=4GB。8086有16根数据线,80386有32根数据线。
1、8086外部有16根数据总线,可并行传送16位数据; 具有20根地址总线,能直接寻址220=1MB的内存空间; 用低16位地址线访问I/O端口,可访问216=64K个I/O端口。 另外,8088只有8根数据总线 2、8086 CPU由两部分组成:总线接口单元(Bus Interface Unit,BIU) BIU负责CPU与内存和I/O端口间的数据交换: BIU先从指定内存单元中取出指令,送到指令队列中排队,等待执行。 执行指令时所需的操作数,也可由BIU从指定的内存单元或I/O端口中获取,再送到EU去执行。 执行完指令后,可通过BIU将数据传送到内存或I/O端口中。 指令执行单元(Execution Unit,EU) EU负责执行指令: 它先从BIU的指令队列中取出指令,送到EU控制器,经译码分析后执行指令。EU的算术逻辑单元(Arithmetic Logic Unit,ALU)完成各种运算。 6、见书P28-29。 7.(1) 1200:3500H=1200H×16+3500H=15500H (2) FF00:0458H=FF00H×16+0458H=FF458H (3) 3A60:0100H=3A80H×16+0100H=3A700H 8、(1)段起始地址 1200H×16=12000H,结束地址 1200H×16+FFFFH=21FFFH (2)段起始地址 3F05H×16=3F050H,结束地址 3F05H×16+FFFFH=4F04FH (3)段起始地址 0FFEH×16=0FFE0H,结束地址 0FFEH×16+FFFFH=1FFD0H 9、3456H×16+0210H=34770H 11、堆栈地址范围:2000:0000H~2000H(0300H-1),即20000H~202FFH。执行 两条PUSH指令后,SS:SP=2000:02FCH,再执行1条PUSH指令后,SS: SP=2000:02FAH。 12、(2000H)=3AH, (2001H)=28H, (2002H)=56H, (2003H)=4FH 从2000H单元取出一个字数据需要1次操作,数据是 283AH; 从2001H单元取出一个字数据需要2次操作,数据是 5628H; 17、CPU读写一次存储器或I/O端口的时间叫总线周期。1个总线周期需要4个系统时钟周期(T1~T4)。8086-2的时钟频率为8MHz,则一个T周期为125ns,一个总线周期为500ns,则CPU每秒最多可以执行200万条指令。
第1章微型计算机系统 〔习题〕简答题 (2)总线信号分成哪三组信号 (3)PC机主存采用DRAM组成还是SRAM组成 (5)ROM-BIOS是什么 (6)中断是什么 (9)处理器的“取指-译码-执行周期”是指什么 〔解答〕 ②总线信号分成三组,分别是数据总线、地址总线和控制总线。 ③ PC机主存采用DRAM组成。 ⑤ ROM-BIOS是“基本输入输出系统”,操作系统通过对BIOS 的调用驱动各硬件设备,用户也可以在应用程序中调用BIOS中的许多功能。 ⑥中断是CPU正常执行程序的流程被某种原因打断、并暂时停止,转向执行事先安排好的一段处理程序,待该处理程序结束后仍
返回被中断的指令继续执行的过程。 ⑨指令的处理过程。处理器的“取指—译码—执行周期”是指处理器从主存储器读取指令(简称取指),翻译指令代码的功能(简称译码),然后执行指令所规定的操作(简称执行)的过程。 〔习题〕填空题 (2)Intel 8086支持___________容量主存空间,80486支持___________容量主存空间。 (3)二进制16位共有___________个编码组合,如果一位对应处理器一个地址信号,16位地址信号共能寻址___________容量主存空间。 (9)最初由公司采用Intel 8088处理器和()操作系统推出PC机。 ② 1MB,4GB ③ 216,64KB (9)IBM,DOS 〔习题〕说明微型计算机系统的硬件组成及各部分作用。 〔解答〕
CPU:CPU也称处理器,是微机的核心。它采用大规模集成电路芯片,芯片内集成了控制器、运算器和若干高速存储单元(即寄存器)。处理器及其支持电路构成了微机系统的控制中心,对系统的各个部件进行统一的协调和控制。 存储器:存储器是存放程序和数据的部件。 外部设备:外部设备是指可与微机进行交互的输入(Input)设备和输出(Output)设备,也称I/O设备。I/O设备通过I/O接口与主机连接。 总线:互连各个部件的共用通道,主要含数据总线、地址总线和控制总线信号。 〔习题〕区别如下概念:助记符、汇编语言、汇编语言程序和汇编程序。 〔解答〕 助记符:人们采用便于记忆、并能描述指令功能的符号来表示机器指令操作码,该符号称为指令助记符。 汇编语言:用助记符表示的指令以及使用它们编写程序的规则就形成汇编语言。 汇编语言程序:用汇编语言书写的程序就是汇编语言程序,或称汇编语言源程序。
6、[+42]原=00101010B=[+42]反=[+42]补 [-42]原=B [-42]反=B [-42]补=B [+85]原=01010101B=[+85]反=[+85]补 [-85]原=B [-85]反=B [-85]补=B 10、微型计算机基本结构框图 微处理器通过一组总线(Bus)与存储器和I/O接口相连,根据指令的控制,选中并控制它们。微处理器的工作:控制它与存储器或I/O设备间的数据交换;进行算术和逻辑运算等操作;判定和控制程序流向。 存储器用来存放数据和指令,其内容以二进制表示。每个单元可存8位(1字节)二进制信息。 输入——将原始数据和程序传送到计算机。 输出——将计算机处理好的数据以各种形式(数字、字母、文字、图形、图像和声音等)送到外部。 接口电路是主机和外设间的桥梁,提供数据缓冲驱动、信号电平转换、信息转换、地址译码、定时控制等各种功能。 总线:从CPU和各I/O接口芯片的内部各功能电路的连接,到计算机系统内部的各部件间的数据传送和通信,乃至计算机主板与适配器卡的连接,以及计算机与外部设备间的连接,都要通过总线(Bus)来实现。 13、8086有20根地址线A19~A0,最大可寻址220=1048576字节单元,即1MB;80386有32根地址线,可寻址232=4GB。8086有16根数据线,80386有32根数据线。
1、8086外部有16根数据总线,可并行传送16位数据; 具有20根地址总线,能直接寻址220=1MB的内存空间; 用低16位地址线访问I/O端口,可访问216=64K个I/O端口。 另外,8088只有8根数据总线 2、8086 CPU由两部分组成:总线接口单元(Bus Interface Unit,BIU) BIU负责CPU与内存和I/O端口间的数据交换: BIU先从指定内存单元中取出指令,送到指令队列中排队,等待执行。 执行指令时所需的操作数,也可由BIU从指定的内存单元或I/O端口中获取,再送到EU去执行。 执行完指令后,可通过BIU将数据传送到内存或I/O端口中。 指令执行单元(Execution Unit,EU) EU负责执行指令: 它先从BIU的指令队列中取出指令,送到EU控制器,经译码分析后执行指令。EU的算术逻辑单元(Arithmetic Logic Unit,ALU)完成各种运算。 6、见书P28-29。 7.(1)1200:3500H=1200H×16+3500H=15500H (2)FF00:0458H=FF00H×16+0458H=FF458H (3)3A60:0100H=3A80H×16+0100H=3A700H 8、(1)段起始地址1200H×16=12000H,结束地址1200H×16+FFFFH=21FFFH (2)段起始地址3F05H×16=3F050H,结束地址3F05H×16+FFFFH=4F04FH (3)段起始地址0FFEH×16=0FFE0H,结束地址0FFEH×16+FFFFH=1FFD0H 9、3456H×16+0210H=34770H 11、堆栈地址范围:2000:0000H~2000H(0300H-1),即20000H~202FFH。执行两条PUSH指令后,SS:SP=2000:02FCH,再执行1条PUSH指令后,SS:SP=2000:02FAH。 12、(2000H)=3AH, (2001H)=28H, (2002H)=56H, (2003H)=4FH 从2000H单元取出一个字数据需要1次操作,数据是283AH; 从2001H单元取出一个字数据需要2次操作,数据是5628H; 17、CPU读写一次存储器或I/O端口的时间叫总线周期。1个总线周期需要4个系统时钟周期(T1~T4)。8086-2的时钟频率为8MHz,则一个T周期为125ns,一个总线周期为500ns,则CPU每秒最多可以执行200万条指令。
1.2 课后练习题 一、填空题 1.将二进制数1011011.1转换为十六进制数为__5B.8H_____。 2.将十进制数199转换为二进制数为____ 11000111____B。 3.BCD码表示的数,加减时逢__10____进一,ASCII码用来表示数值时,是一种非压缩的BCD 码。 4.十进制数36.875转换成二进制是___100100.111____________。 5.以_微型计算机____为主体,配上系统软件和外设之后,就构成了__微型计算机系统____。6.十进制数98.45转换成二进制为__1100010.0111_B、八进制__142.3463________Q、十六进制__62.7333________H。(精确到小数点后4位) 二、选择题 1.堆栈的工作方式是__B_________。 A)先进先出B)后进先出C)随机读写D)只能读出不能写入 2.八位定点补码整数的范围是____D_________。 A)-128-+128 B)-127-+127 C)-127-+128 D)-128-+127 3.字长为16位的数可表示有符号数的范围是___B___。 A)-32767-+32768 B)-32768-+32767 C)0-65535 D)-32768-+32768 三、简答题 1.微型计算机系统的基本组成? 微型计算机,系统软件,应用软件,输入输出设备 2.简述冯.诺依曼型计算机基本思想? ●将计算过程描述为由许多条指令按一定顺序组成的程序,并放入存储器保存 ●指令按其在存储器中存放的顺序执行; ●由控制器控制整个程序和数据的存取以及程序的执行; ●以运算器为核心,所有的执行都经过运算器。 3.什么是微型计算机? 微型计算机由CPU、存储器、输入/输出接口电路和系统总线构成。 4.什么是溢出? 运算结果超出了计算机所能表示的范围。 2.2 一、填空题 1. 8086/8088的基本总线周期由___4____个时钟周期组成,若CPU主频为10MHz,则一个时钟周期的时间为___0.1μs_____。 2. 在8086CPU的时序中,为满足慢速外围芯片的需要,CPU采样___READY_________信号,若未准备好,插入___TW__________时钟周期。 3. 8086系统总线形成时,须要用_____ALE__________信号锁定地址信号。 4. 对于8086微处理器,可屏蔽中断请求输入信号加在_____INTR__________引脚。
1 思考与练习题 一、选择题 1.计算机硬件中最核心的部件是( )。C A.运算器 B.主存储器 C.CPU D.输入/输出设备 2.微机的性能主要取决于( )。 A (B——计算机数据处理能力的一个重要指标) A.CPU B.主存储器 C.硬盘 D.显示器 3.计算机中带符号数的表示通常采用( )。C A.原码 B.反码 C.补码 D.BCD码 4.采用补码表示的8位二进制数真值范围是( )。C A.-127~+127 B.-1 27~+128 C.-128~+127 D.-128~+128 5.大写字母“B”的ASCII码是( )。B A.41H B.42H C.61H D.62H 6.某数在计算机中用压缩BCD码表示为10010011,其真值为( )。C A.10010011B B.93H C.93 D.147 二、填空题 1.微处理器是指_CPU_;微型计算机以_CPU_为核心,配置_内存和I/O接口_构成;其特点是_(1)功能强 (2)可靠性高 (3)价格低 (4)适应性强 (5)体积小 (6)维护方便_。P8 P5 2.主存容量是指_RAM和ROM总和_;它是衡量微型计算机_计算机数据处理_能力的一个重要指标;构成主存的器件通常采用_DRAM和PROM半导体器件_。P5 P9 3.系统总线是_CPU与其他部件之间传送数据、地址和控制信息_的公共通道;根据传送内容的不同可分成_数据、地址、控制_3种总线。P9 4.计算机中的数据可分为_数值型和非数值型_两类,前者的作用是_表示数值大小,进行算术运算等处理操作_;后者的作用是_表示字符编码,在计算机中描述某种特定的信息_。P12 5.机器数是指_数及其符号在机器中加以表示的数值化_;机器数的表示应考虑_机器数的范围、机器数的符号、机器数中小数点位置_3个因素。P15 P16 6.ASCII码可以表示_128_种字符,其中起控制作用的称为_功能码_;供书写程序和描述命令使用的称为_信息码_。P18 P19 三、判断题 1.计算机中带符号数采用补码表示的目的是为了简化机器数的运算。( )√ 2.计算机中数据的表示范围不受计算机字长的限制。( )× 3.计算机地址总线的宽度决定了内存容量的大小。( )√ 4.计算机键盘输入的各类符号在计算机内部均表示为ASCII码。( )× (键盘与计算机通信采用ASCII码) 2 思考与练习题 一、选择题 1.在EU中起数据加工与处理作用的功能部件是( )。A A.ALU B.数据暂存器 C.数据寄存器 D.EU控制电路 2.以下不属于BIU中的功能部件是( )。 B A.地址加法器 B.地址寄存器 C.段寄存器 D.指令队列缓冲器
微机原理习题 第一章绪论 习题与答案 1、把下列二进制数转换成十进制数、十六进制数及BCD码形式。 (1) 10110010B= (2) 01011101、101B = 解: (1) 10110010B = 178D =B2H=(00010111 1000)BCD (2) 01011101、101B =93、625D=5D.AH =(1001 0011、0110 0010 0101)BCD 2. 把下列十进制数转换成二进制数。 (1) 100D= (2) 1000D= (3) 67、21D= 解: (1) 100D = 01100100B (2) 1000D=1111101000B (3) 67、21D=1000011、0011B 3. 把下列十六进制数转换成十进制数、二进制数。 (1) 2B5H = (2) 4CD、A5H= 解: (1) 2B5H = 693D = 00101011 0101B (2) 4CD、A5H=1229.6445D=0100 11001101.10100101B 4、计算下列各式。 (1) A7H+B8H = (2) E4H-A6H = 解: (1) A7H+B8H = 15FH (2) E4H-A6H =3EH 5、写出下列十进制数的原码、反码与补码。 (1)+89 (2)-37
解: (1) [+89 ] 原码、反码与补码为: 01011001B (2) [-37] 原码= 10100101 B [-37] 反码= 11011010 B [-37] 补码=11011011 B 6.求下列用二进制补码表示的十进制数 (1)(01001101)补= (2)(10110101)补= 解: (1)(01001101)补= 77D (2)(10110101)补=-75D 7.请用8位二进制数写出下列字符带奇校验的ASCII码。 (1)C: 1000011(2)O: 1001111 (3)M: 1001101 (4)P: 1010000 解: (1)C:0 1000011 (2)O: 01001111 (3)M:11001101 (4)P: 1 1010000 8、请用8位二进制数写出下列字符带偶校验的ASCII码。 (1)+:0101011 (2)=: 0111101 (3)#:0100011(4)>: 0111110 解: (1)+:00101011 (2)=: 10111101 (3)#:10100011 (4)>: 1 0111110 9、叙述CPU 中PC的作用。 解:PC就是CPU中的程序计数器,其作用就是提供要执行指令的地址。
部分习题答案 (3) 0.1101 1B= 0.84375 = 0.D8H (4) 11110.01 B= 30.25 =1E.4H 3、完成下列二进制数的加减法运算 (1) 1001.11 + 100.01 = 1110.0001110101.0110 (4) 01011101.0110 — 101101.1011 = 101111.1011 4、 完成下列十六进制数的加减法运算 (1) 745CH + 56DFH= D14B H (2) ABF.8H — EF6.AH = 9C28.E H (3) 12AB.F7 + 3CD.05= 1678 .FC H (4) 6F01H — EFD8H= 7F29 H 5、 计算下列表达式的值 103.CEH (3) 18.9 + 1010.1101B + 12.6H — 1011.1001 = 36.525 6、选取字长n 为8位和16位两种情况,求下列十进制数的补码。 (1) X=— 33的补码: ⑵ Y=+ 33的补码: 0010 0001 , 0000 0000 0010 0001 ⑶ Z=— 128 的补码:1000 0000 , 1111 1111 1000 0000 ⑷ N=+ 127的补码: 0111 1111 , 0000 0000 0111 1111 A=— 65的补码: 1011 1111 , 1111 1111 1011 1111 ⑹ B=+ 65的补码: 0100 0001 , 0000 0000 0100 0001 ⑺ C=— 96的补码: 1010 0000 , 1111 1111 1010 0000 (8) D=+ 96的补码: 0110 0000 , 0000 0000 0110 0000 7、写出下列用补码表示的二进制数的真值 (1) [X 补=1000 0000 0000 0000 H X = — 1000 0000 0000 0000 H =— 32768 (2) [Y 补=0000 0001 0000 0001 H Y = + 0000 0001 0000 0001 H = + 257 (3) [Z 补=1111 1110 1010 0101 H Z= — 0000 0001 0101 1011 H =—347 (4) [A 补=0000 0010 0101 0111 H A= + 0000 0010 0101 0111 H =+ 599 8、设机器字长为8位,最高位为符号位,试对下列格式进行二进制补码运算,并判断结果是否溢出。 (1) 43 + 8 [43]补=00101011B , [8]补=00001000B [43]补+ [8]补=00101011B + 00001000B = 00110011B = 33H 00101011B + 00001000B 00110011B T C s = 0, C D = 0, OF= C S ? C D = 0 ? 0= 0 ??? 无溢出 (1) 43 + 8 33H (无溢出) 第二章 1、 将十进制数转换为二进制和十六进制 (1) 129.75 = 1000 0001.11B = 81.CH (3) 15.625 = 1111.101B = F.AH 2、 将下列二进制数转换为十进制和十六进制 (1) 111010 B= 58 =3A H 计算机中的数值和编码 (2) 218.8125 = 1101 1010.1101B = DA.DH ⑷ 47.15625 = 10 1111.0010 1B = 2F.28 H (2) 1011 1100.111B= 188.875 = BC.E H (2) — 52 + 7 D3 H (无溢出)
第一章 1.选择题 (1)C (2) D A (3) C 3填空 (1)CPU,微型计算机,系统软件,外围设备,微型计算机系统 (2)10,3,12 (3)阶数 (4)10010010B,01000100B,11010110B,FF4EH (5)3F7H,1C3H,243H,277H, 4简答题 (1)微处理器,微型计算机和微型计算机系统三者有何联系与区别? 微处理器是把原来的中央处理单元CPU的复杂电路(包括运算器和控制器)做在一片或几片大规模集成电路的芯片上。把这种微缩的CPU大规模集成电路称为微处理器。 微型计算机是以微处理器为核心,再配备上用大规模集成电路工艺制成的存储器和I/O接口就构成了微型计算机。 以微计算机为核心,再配备上系统软件、I/O设备、辅助电路和电源就构成了微机系统。微型计算机系统包括硬件和软件了两大部分。 (2)试述在计算机中常采用二进制的缘由? (3)简述如何从补码判断真值的符号? (4)BCD码与纯二进制数有何区别? 主要区别是二者对应的二进制位所表示的二进制真值不同, (5)试述机器数的定点和浮点数表示形式。 第2章 2填空题 (1)递增,A7,A5,A3,A1. (2)地址总线的宽度,00000H~0FFFFFH (3)寄存器,运算器,控制器;运算和控制 (4)SS,SP (5)MN/MX (6)主频,总线宽度 (7)20,16 3简答题 (1)什么是指令周期?什么是总线周期?一个总线周期至少包括几个时钟周期?指令周期是一条指令执行所需的时钟周期,cpu在执行指令过程中,凡需执行访问存储器或访问I/O端口的操作都统一交给BIU的外部总线完成,进行一次访问所需的时间称为一个总线周期。一般一个基本的总线周期由4个时钟周期组成。 (2)8086CPU在最小模式下构成计算机系统至少应该包括哪几个基本的部分?(3)8086CPU中,标志寄存器包含哪些标志位?各标志位为‘0’,‘1’分别表示什么含义? (4)8086CPU中有哪些通用寄存器和专用寄存器?说明他们的作用。 (5)在8086CPU中,已知CS寄存器和IP寄存器的内容分别如下所示,请确定其物
第一章微型计算机的基础知识 1-1 将下列十进制数转换为二进制数、十六进制数。 (1)110 (2)1 039 (3)0.75 (4)0.156 25 1-2 将下列十进制数转换为BCD 码。 (1)129 (2)5 678 (3)0.984 (4)93.745 1-3 将下列二进制数转换为十进制数、十六进制数。 (1)10101010 (2)10000000 (3)11000011.01 (4)01111110 1-4 将下列十六进制数转换为二进制数、十进制数。 (1)8E6H (2)0A42H (3)7E.C5H (4) 0F19.1DH 1-5 将下列二进制数转换为BCD 码。 (1)1011011.101 (2)1010110.001 1-6 将下列BCD 码转换为二进制数。 (1)(0010 0111 0011) BCD (2)(1001 0111.0010 0101) BCD 1-7 完成下列二进制数的运算。 (1)1001.11+11.11 (2)1101.01-0110.11 (3)1000.011-1001.101 (4)1111+1101 1-8 完成下列十六进制数的运算。 (1)6AH+0A6H (2)0AB1FH+0EFCH (3)12ADH-1DEH (4)117H-0ABH 1-9 已知X=01H,Y=0FFH ,在下面的情况下比较两数的大小。 (1)无符号数 (2)符号数 (均为补码) 1-10 计算下列各表达式。 (1)101+‘A’+01101001B+0D5H+57Q (2)127.8125+10111101.101+375.63Q+1FC.8AH 1-11 写出下列字符串的ASCII 码。 (1)HELLO (2)A8=
第一章 学习指导: 1.掌握十六进制、二进制、BCD(十进制数)、ASCII码 2.掌握有符号数(补码、原码)、无符号数计算机的表示方法以及表示范围 3.掌握补码运算 4.了解计算机基本组成及工作原理 5.了解新技术 6.了解计算机主要性能指标 2、完成下列数制之间的转换。 (1)01011100B=92D (3)135D=10000111B (5)10110010B=262Q=B2H 3、组合型BCD码和非组合型BCD码有什么区别?写出十进制数254的组合型BCD数和非组合型数。 答:组合型BCD码用高四位和低四位分别对应十进制数的个位和十位,其表示范围是0~99;非组合型BCD码用一个字节的低四位表示十进制数,高四位则任意取值,表示范围为0~9。 组合型:254=(001001010100)BCD 非组合型:254=(00000010 00000101 00000100)BCD 7、计算机为什么采用补码形式存储数据?当计算机的字长n=16,补码的数据表示范围是多少? 答:在补码运算过程中,符号位参加运算,简化了加减法规则,且能使减法运算转化为加法运算,可以简化机器的运算器电路。+32767~ -32768。 9、设计算机字长n=8,求下列各式的[X+Y]补和[X-Y]补,并验证计算结果是否正确。 (1)X=18,Y=89 [X+Y]补=00010010+01011001=01101011B=107D 正确 [X-Y]补=10111001B=00010010+10100111=(-71D)补正确 (2)X=-23,Y=-11 [X+Y]补=11101001+11110101=11011110B=(-34D)补正确[X-Y]补=11101001+00001011=11110100B=(-12D)补正确 (3)X=18,Y=-15 [X+Y]补=00010010+11110001=00000011B=(3D)补正确 [X-Y]补=00010010+00001111=00100001B=(33D)补正确 (4)X=-18,Y=120 [X+Y]补=11101110+01111000=01100110B=(102D)补正确[X-Y]补=11101110+10001000=01110110B=(123D)补由于X-Y=-138 超出了机器数范围,因此出错了。 13、微型计算机的主要性能指标有哪些? 答:CPU字长、存储器容量、运算速度、CPU内核和IO工作电压、制造工艺、扩展能力、软件配置。 第二章 学习指导: 1.了解8086微处理器的基本组成及工作原理 2.掌握通用寄存器(AX、BX、DX、CX、SI、DI、SP、BP)段寄存器(CS、SS、DS、ES)标志寄存器(状态标志位和控制标志位含义)作用 3.掌握逻辑地址、物理地址以及它们之间的关系物理地址=段基址x16+偏移地址 4.掌握逻辑地址和物理地址表示形式2000:0100,20100 5.存储器地址的表示图2-5 6.主要引脚RD、WR、M/IO、INTR、INTA、NMI、HOLD、HLDA
15. 已知:在内存BUF开始的单元中,存在一串数据:58,75,36,42,89。编程找出其中的最小值存入MIN单元中,并将这个数显示在屏幕上。 解: STACK SEGMENT STACK DB 100 DUP(?) STACK ENDS DATA SEGMENT BUF DB 58H, 75H, 36H, 42H, 89H MIN DB 0 DATA ENDS CODE SEGMENT ASSUME CS:CODE, DS:DATA, SS:STACK START: PUSH DS MOV AX, DATA MOV DS, AX MOV CX, 4 MOV BX, OFFSET BUF MOV AL, [BX] ST1: INC BX CMP AL, [BX] JBE NEXT MOV AL, [BX] NEXT:LOOP ST1 MOV MIN, AL AND AL, 0F0H MOV CL,4 ROR AL, CL ADD AL, 30H MOV DL, AL MOV AH, 02H INT 21H MOV AL, MIN AND AL, 0FH ADD AL, 30H MOV DL, AL MOV AH, 02H INT 21H POP DS MOV AH, 4CH INT 21H HLT CODE ENDS
END START 18. 某班有20个同学的微机原理成绩存放在LIST开始的单元中,要求编程先从高到低的次序排列好,再求出总分和平均值,分别存放在SUM和AVER开始的单元中。 解: STACK ENDS DATA SEGMENT LIST DB 65H,76H,78H,54H,90H,85H,68H,66H,77H,88H DB 99H, 89H, 79H, 69H,75H,85H,63H,73H,83H,93H SUM DW 0 AVER DB 0 BUF DB 100 DUP (?) DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACK START: PUSH DS MOV AX,DATA MOV DS,AX MOV DI, OFFSET LIST MOV BX, 19 LP0: MOV SI, DI MOV CX, BX LP1: MOV AL, [SI] INC SI CMP AL, [SI] JNC LP2 MOV DL, [SI] MOV [SI-1], DL MOV [SI], AL LP2: LOOP LP1 DEC BX JNZ LP0 LP3: MOV CX, 20 MOV BX, OFFSET LIST MOV SUM, 0 XOR AX, AX LP4: ADD AL, [BX] DAA ADC AH, 0 INC BX LOOP LP4 MOV SUM, AX MOV BL, 20H DIV BL ADD AL,0