微机原理黄冰版--作业答案
更新时间:2023-09-10 04:14:01 阅读量: 教育文库 文档下载
1章 绪论
1.2 用8位二进制码,写出下列十进制数的原码和补码表示 解释:
原码:最高位为符号位,正数符号位为0,负数符号位为1。
补码:正数的补码与原码相同;负数的补码:由其原码除符号位保持不变外,其余各位按位取反,末位加1而成。 解:
(1) [+65]原 = 0100 0001B 注:65 = 64 + 1
[+65]补 = [+65]原 = 0100 0001B 注:正数补码与原码相同 (2) [+115]原 = 0111 0011B 注:115 = 64 + 32 + 16 + 2 + 1 [+115]补 = [+115]原 = 0111 0011B 注:正数补码与原码相同 (3) [-65]原 = 1100 0001B 注:65 = 64 + 1
[-65]补 = 1011 1110B + 1B = 1011 1111B 注:除符号位外,按位取反,末位加1 (4) [-115]原 = 1111 0011B 注:115 = 64 + 32 + 16 + 2 + 1 [-115]补 = 1000 1100B + 1B = 1000 1101B 注:除符号位外,按位取反,末位加1 1.3 用16位二进制码,写出下列十进制数的原码和补码表示。
(1) [+120]原 = 0000 0000 0111 1000B 注:120 = 64 + 32 + 16 + 8 [+120]补 = [+120]原 = 0000 0000 0111 1000B 注:正数补码与原码相同 (2) [-120]原 = 1000 0000 0111 1000B 注:120 = 64 + 32 + 16 + 8 [-120]补 = 1111 1111 1000 0111B + 1B = 1111 1111 1000 1000B 注:除符号位外,按位取反,末位加1
(3) [+230]原 = 0000 0000 1110 0110B 注:230 = 128 + 64 + 32 + 4 + 2 [+230]补 = 0000 0000 1110 0110B 注:正数补码与原码相同 (4) [-230]原 = 1000 0000 1110 0110B 注:230 = 128 + 64 + 32 + 4 + 2 [-230]补 = 1111 1111 0001 1001B + 1B = 1111 1111 0001 1010B 注:除符号位外,按位取反,末位加1 1.4 写出下列用补码表示的二进制数的真值。 解释:
正数的补码 = 原码
负数的补码:再次求补码得到其原码 解:
(1) 0011 0111 正数的补码 真值:32 + 16 + 4 + 2 + 1 = +55 (2) 0101 1001 正数的补码 真值:64 + 16 + 8 + 1 = +89
(3) 1000 1101 负数的补码 真值:1111 0010B + 1B = 1111 0011B = -115 (4) 1111 1001 负数的补码 真值:1000 0110B + 1B = 1000 0111B = -7
第2章 Intel 8086微处理器
2.2 在存储器中存放的数据如图所示。试读出75422H和75424H字节单元的内容是什么?读出75422H和75424H字单元的内容是什么? 解:
75422H字节单元的内容:9CH 75424H字节单元的内容:5DH 75422H字单元的内容:249CH 75424H字单元的内容:0E65DH
2.3 段地址和偏移地址为1000H:117AH的存储单元的物理地址是什么?而1109H:00EAH或1025H:0F2AH的存储单元的物理地址又是什么?这说明了什么问题? 解释:物理地址 = 段地址 × 10H + 偏移地址 解:
1000H : 117AH存储单元的物理地址1000H × 10H + 117AH = 1117AH 1109H : 00EAH存储单元的物理地址1109H × 10H + 00EAH = 1117AH 1025H : 0F2AH存储单元的物理地址1025H × 10H + 0F2AH = 1117AH
说明:不同的段地址不同的偏移地址可以指向同一个物理地址,即各个逻辑段可以相互重叠。
2.4 在存储器分段结构中,每个段区最大可占用多少地址范围,为什么?如果在8086的机器中,若段间不允许重叠,那么最多可分多少个段区? 解:
若为8086微处理器,每个段区最大可占用64KB,因为所有内部寄存器都只有16位。 若每段64KB,最多可分16个段区,因为8086微处理器有20条地址线,可访问存储器的最大容量为1MB。
2.5 如果从存储器的2000H地址开始分配段区,要求数据段占用1KB范围,堆栈段占用512B范围,代码段占用8KB范围。按数据段、堆栈段和代码段的顺序连续存放,试画出存储器分段地址分配示意图,图中应写明各段寄存器的内容? 解:
02000H 02400H 02600H
注:
1KB 512B 8KB DS:0200 SS:0240H CS:0260H
7542 0H 1H 2H 3H 4H 5H 存储器 ? 13H 78H 9CH 24H 5DH E6H 1KB:00 0000 0000B~11 1111 1111B
SS:起始物理地址2000H + 1KB = 2000H + 400H = 02400H 512B:0 0000 0000B~1 1111 1111B
CS:起始物理地址2400H + 512B = 2400H + 200H = 02600H 2.6 指出下列指令的源和目标操作数的寻址方式: 题号 指令 MOV ARRAY,BX ADC CX,ALPHA[BX][SI] 目的操作数的寻址方式 直接寻址 寄存器寻址 源操作数的寻址方式 寄存器寻址 带位移的基址变址寻址 立即寻址 寄存器寻址 寄存器间接寻址 (1) (2) (3) (4) (5) (6) AND GAMMA[DI],11011000B 带位移的变址寻址 INC BL TEST ES:[SI],DX SBB SI,[BP] 寄存器寻址 寄存器间接寻址 寄存器寻址 2.7 现有DS=2000H,BX=0100H,SI=0002H,(20100H)=12H,(20101H)=34H,(20102H)=56H,(20103H)=78H,(21200H)=2AH,(21201H)=4CH,(21202H)=B7H,(21203H)=65H,试说明下列各指令执行完后AX寄存器的内容。 题号 指令 MOV AX,1200H MOV AX,BX MOV AX,[1200H] MOV AX,[BX] MOV AX,1100H[BX] MOV AX,[BX][SI] AX寄存器的内容 1200H 0100H 4C2AH 3412H 4C2AH 7856H 简单解释 立即数赋给AX 寄存器BX值赋给AX PA=DS×16+1200H=21200H PA=DS×16+BX=20100H PA=DS×16+BX+1100H=21200H PA=DS×16+BX+SI=20102H PA=DS×16+BX+SI+1100H=21202H (1) (2) (3) (4) (5) (6) (7) MOV AX,1100H[BX][SI] 65B7H 2.8 假定DS=2000H,ES=2100H,SS=1500H,SI=00A0H,BX=0100H,BP=0010H,数据段中变量名VAL的偏移地址值为0050H,试指出下面源操作数字段的寻址方式是什么?其物理地址值是多少? 题号 指令 源操作数的寻址方式 立即寻址 寄存器寻址 直接寻址 寄存器间接寻址 寄存器间接寻址 带位移的基址寻址 基址变址寻址 直接寻址 源操作数的物理地址 在代码段中,与CS、IP有关 在寄存器中 DS×16+100H=20100H DS×16+BX=20100H SS×16+BP =15010H DS×16+BX +10=2010AH DS×16+BX +SI=201A0H DS×16+VAL=20050H (1) (2) (3) (4) (5) (6) (7) (8) MOV AX, 00ABH MOV AX,BX MOV AX,[100H] MOV AX,[BX] MOV AX,[BP] MOV AX,[BX+10] MOV AX,[BX][SI] MOV AX,VAL (9) MOV AX,ES:[BX] 寄存器间接寻址 寄存器间接寻址 带位移的基址寻址 ES×16+BX=21100H DS×16+SI=200A0H DS×16+BX+VAL=20150H (10) MOV AX,[SI] (11) MOV AX,VAL[BX] (12) MOV AX,VAL[BX][SI] 带位移的基址变址寻址 DS×16+BX+SI+VAL=201F0H 2.9 设AX=1122H,BX=3344H,CX=5566H,SP=2000H,试分析下列程序段执行后,AX、BX、CX、SP中的内容各为多少?并画出堆栈变化示意图。 解:
第1条指令 PUSH AX
第2条指令 PUSH BX
第3条指令 PUSH CX
第4条指令 POP AX
第5条指令 POP CX
AX=1122H BX=3344H SP→ 22H CX=5566H
11H SP=1FFEH
SP→ 44H AX=1122H 33H BX=3344H 22H CX=5566H
11H SP=1FFCH
SP→ 66H 55H
44H AX=1122H 33H BX=3344H 22H CX=5566H
11H SP=1FFAH
SP→ 44H AX=5566H 33H BX=3344H 22H CX=5566H
11H SP=1FFCH
AX=5566H BX=3344H SP→ 22H CX=3344H
11H SP=1FFEH
2.10 下列程序段中每一条指令执行完后,AX中的十六位进制内容是什么? 指令 MOV AX,0 DEC AX ADD AX,7FFFFH ADD AX,2 NOT AX SUB AX,0FFFFH ADD AX,8000H OR AX,0BFDFH AX中的内容 AX=0000H AX=0FFFFH AX=7FFEH AX=8000H AX=7FFFH AX=8000H AX=0000H AX=0BFDFH 指令 1100 1101 1010 1011算术左移 AND AX,0EBEDH AX=0ABCDH XCHG AH,AL SAL AX,1 RCL AX,1 AX=0CDABH AX=9B56H (CF=1,PF=1) AX=36ADH (CF=1,PF=1,OF=1) 1001 1011 0101 0110带进位循环左移 循环移位指令不影响除CF和OF以外的其他条件标志。
移位指令根据移位后的结果设置SF、ZF和PF位,AF位则无定义。 RCL:OF=1最高有效位的值发生变化;PF保留原来的值;
2.11 将十六进制数62A0H与下列各个数相加,试给出和数及标志位AF,SF,ZF,CF,OF和PF的状态。 (1) 9D60H
0110?10011000000101010110100000110000000000000 0000和数:0H
AF=0,SF=0,ZF=1,CF=1,OF=0,PF=1 (2) 4321H
0110?01000101000101010001100100101110000000001 0001和数:0A5C1H
AF=0,SF=1,ZF=0,CF=0,OF=1,PF=0
2.12 从下列各个数中减去4AE0H,试给出差值及标志位AF,SF,ZF,CF,OF和PF的状态。
(1)1234H (2)9090H 解:
Z DW 2 DUP (?) r db ? DATA ENDS
CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX
MOV AL, W
SUB AL, X ; W - X -> AL CBW
MOV BL, 10
IDIV BL ; (W - X) / 10 -> AL MOV r, AH ; (W - X) % 10 -> r MOV BL, Y
IMUL BL ; (W - X) / 10 * Y -> AX MOV BX, AX
IMUL BX ; ((W - X) / 10 * Y)^2 -> DX, AX MOV Z, AX
MOV Z+2, DX ; ((W - X) / 10 * Y)^2 -> Z MOV AH, 4CH INT 21H CODE ENDS END START
3.13 在数组字变量ARRAY中有10个数据,将数组中的第5个字数据求补,再放回原处,画出程序流程图和编写程序。
3.14 用重复前缀串比较指令比较两个字符串,一个是在数据段的字符串变量STR1(内容为'THIS IS A DOG'),另一个是在附加段的字符串变量STR2(内容为'THIS IS A COCK')。当比较到第一个不相同的字符时停止比较,把相同部分字符串长度存入数据段的字节变量NUM中。写出分段结构的程序段,应包括段定义,伪指令和指令序列。问:相同部分字符串长度为多少?在STR1和STR2第一个不同处的偏移地址是多少?
DATA SEGMENT
STR1 DB 'THIS IS A DOG' LEN1 DB $-STR1 NUM DB ? DATA ENDS
EDATA SEGMENT
STR2 DB 'THIS IS A COCK' LEN2 DB $-STR2 EDATA ENDS
CODE SEGMENT ASSUME CS:CODE,DS:DATA,ES:EDATA START: MOV AX,DATA MOV DS,AX MOV AX,EDATA MOV ES,AX CLD ;串操作由低地址向高地址 MOV CH,0 MOV AL,LEN1 CMP AL,ES:LEN2 JB B1L2
MOV CL,ES:LEN2 JMP CMPOK B1L2: MOV CL,AL
CMPOK: LEA SI,STR1 LEA DI,ES:STR2 REPE CMPSB MOV AX,SI
DEC AL ;不同处的字节偏移地址
MOV NUM,AL ;不同处的字节偏移地址放到NUM MOV AH, 4CH INT 21H CODE ENDS END START
答:相同长度10,不同处的偏移地址10
3.15 有两个压缩型BCD码相加,被加数(6756)和加数(7321)存放在数据段的BUFFER变量的4个连续的字节存储单元中,结果(和)存放在RESUT变量的三个字单元中(考虑到有进位的情况),编制具有数据段和代码段结构的完整程序,程序中需要作必要的注释。
注:结果存放在RESUT字节变量中,三个字单元不知要求怎么用 DATA SEGMENT
BUFFER DB 67H,56H,73H,21H RESUT DB 3 DUP (?) DATA ENDS
CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX MOV AL,BUFFER+1 ;第一个数据低两位->AL MOV BL,BUFFER+3 ;第二个数据低两位->BL ADD AL,BL ;低两位相加 DAA ;十进制调整 MOV DL,AL ;低两位相加结果放到DL MOV AL,BUFFER ;第一个数据高两位->AL MOV BL,BUFFER+2 ;第二个数据高两位->BL ADC AL,BL ;低两位相加 DAA ;十进制调整 MOV BL,0 JNC HCF INC BL
HCF: MOV RESUT,BL ;存放最高位 MOV RESUT+1,AL ;存放中间两位 MOV RESUT+2,DL ;存放最低两位 MOV AH, 4CH INT 21H CODE ENDS END START
3.16 将SRCBUF变量定义的80个字符串传送到DSTBUF变量定义的存储区去。当遇到0DH时,不将此字符传送到DSTBUF变量中去。试编写程序,并加以注释。
DATA SEGMENT
SRCBUF DB 'aaa',0DH,'bbb' DSTBUF DB 80 DUP (?) DATA ENDS
CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX MOV CX,07 ;比较次数->CX MOV SI,0 ;源串指针->SI
MOV DI,0 ;目标串指针->DI SDCMP: MOV AL,SRCBUF[SI] CMP AL,0DH JZ NSEND
MOV DSTBUF[DI],AL ;不等于0DH,保存数据,修改SI、DI INC DI
NSEND: INC SI ;等于0DH,不保存数据,修改SI LOOP SDCMP MOV AH, 4CH INT 21H CODE ENDS END START
3.17 已知有n个元素存放在以BUF为首址的字节存储区中,试统计其中负元素的个数,画出程序框图,编写程序。
DATA SEGMENT
BUF DB 92H,12H,0F3H,23H,87H LEN EQU $-BUF DATA ENDS
CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX MOV CX,LEN ;比较次数->CX MOV SI,0 ;字节存储区指针 MOV DL,0 ;负元素个数初始化 NEGCMP: MOV AL,BUF[SI] CMP AL,0 JNL C0GE
INC DL ;小于0,个数加1,指针加1 C0GE: INC SI ;不小于0,指针加1 LOOP NEGCMP MOV AH, 4CH INT 21H CODE ENDS END START
3.18 已知以BUF为首址的字存储区中存放着n个有符号的二进制数,试编写程序,将大于等于0的数送以BUF1为首址的字存储区中,将小于0的数送以BUF2为首址的字存储区中,并画出程序框图。
DATA SEGMENT
BUF DW 1212H,0FF12H,3434H,8989H,5656H,9090H LEN EQU ($ - BUF) / 2 BUF1 DW LEN DUP (?) BUF2 DW LEN DUP (?) DATA ENDS
CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX MOV CX,LEN ;循环次数,即BUF的单元数 MOV BX,0 ;BUF指针初始化 MOV SI,0 ;BUF1指针初始化 MOV DI,0 ;BUF2指针初始化 CLOOP: MOV AX,[BX] ;BUF数据->AX CMP AX,0 JGE TO1
MOV BUF2[DI],AX ;AX<0,AX->BUF2,DI+2->DI,BX+2->BX INC DI
INC DI
JMP CONTINUE
TO1: MOV BUF1[SI],AX ;AX>=0,AX->BUF1,SI+2->SI,BX+2->BX INC SI INC SI CONTINUE:INC BX INC BX
LOOP CLOOP MOV AH, 4CH INT 21H CODE ENDS END START
3.19 已知在以BUF为首地址的字节存储区中,存放着一个以′$′作结束标志的字符串,试编写程序,在CRT上显示该字符串,并要求将小写字母以大写字母形式显示出来。画出程序框图。
DATA SEGMENT
BUF DB 'abCDalskdjf$' DATA ENDS
CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX MOV SI,0 ;BUF地址指针 ALOOP: MOV DL,BUF[SI] ;BUF数据->DL CMP DL,'$' ;DL='$',EXIT JE STOP CMP DL,5AH
JBE UPPER ;大写字母,打印输出,地址指针SI加1
SUB DL,20H ;小写字母,DL减20H后打印输出,地址指针SI加1 UPPER: MOV AH,02H INT 21H INC SI
JMP ALOOP STOP: MOV AH, 4CH INT 21H CODE ENDS END START
3.20 设有三个字节变量X、Y、Z,试找出X、Y有符号数中较大者送入Z中,编写程序。
推荐检测实例:-128和127 DATA SEGMENT X DB 0F0H Y DB 12H Z DB ? DATA ENDS
CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX MOV AL,X ;X->AL CMP AL,Y ;X ? Y JGE NEXT ;X>=Y,X->Z MOV AL,Y ;X
END START
3.21 设在变量单元A、B和C中存放有三个数,若三个数都不为0,则求出三个数之和存入D中;若有一个为0,则将其他两个单元也清零,编写程序。
DATA SEGMENT A DB 0F0H B DB 12H C DB 22H D DW ? DATA ENDS
CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX CMP A,0 JZ STOP CMP B,0 JZ STOP CMP C,0 JZ STOP ;有一个为0,全部置0 MOV AH,0 ;否则作加法运算,放到D,注意加法运算结果为字 MOV BH,0 MOV AL,A MOV BL,B ADD AX,BX MOV BL,C ADD AX,BX MOV D,AX JMP STOP NEXT: MOV A,0 MOV B,0 MOV C,0 STOP: MOV AH, 4CH INT 21H CODE ENDS END START
3.22 试分析下列程序段,说明完成了什么操作?程序执行前后HEXNUM字节单元的内容是什么?
ASCNUM DB 41H HEXNUM DB ?
MOV AH,ASCNUM CMP AH,39H JBE NEXT SUB AH,7
NEXT:SUB AH,30H
MOV HEXNUM,AX HLT 解:
'0'~'9'与'A'~'F'组成的一位十六进制数的ASCII码转换为一位十六进制数。 程序执行前:[HEXNUM] = ? 程序执行后:[HEXNUM] = 0AH
3.23 在数据区STR1单元开始存放一长度为1~256个字符的字符串。要求对该字符串中每个字符在最高位配上一个偶校验位(即保持一字节数中1的个数为偶数),并存回到原单元中。
DATA SEGMENT
STR1 DB 'abcdefghi' LEN1 EQU $-STR1 DATA ENDS
CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX MOV CX,LEN1 MOV SI,0
ALOOP: MOV AL,STR1[SI]
OR AL,0 ;与0相或,不影响原来的值
JP CONTINUE ;若1的个数为偶数,不做任何处理 OR AL,80H ; 若1的个数为偶数,最高位置1 MOV STR1[SI],AL CONTINUE:INC SI
LOOP ALOOP STOP: MOV AH, 4CH INT 21H CODE ENDS END START
3.24 已知在数据区中DATA1和DATA2开始分别存放N个字节数据,编制程序检查两数据块中的数据是否相同。若完全一致,则将标志单元FLAG置FFH,否则置0。并将第一次出现的不同数据的地址分别存放ADR1和ADR2单元中,编写程序。
;假设为按顺序比较,非无序比较 DATA SEGMENT
DATA1 DB 22H,33H,44H,55H DATA2 DB 22H,33H,44H,66H N EQU $-DATA2 FLAG DB ? ADR1 DW ? ADR2 DW ? DATA ENDS
CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX MOV CX,N MOV SI,0 MOV DI,0
ALOOP1: MOV AL,DATA1[SI] CMP AL,DATA2[DI] JNZ NE12 INC SI INC DI
LOOP ALOOP1 MOV FLAG,0FFH
JMP EXIT NE12: MOV FLAG,0 MOV ADR1,SI MOV ADR2,DI EXIT: MOV AH, 4CH INT 21H
CODE ENDS END START
3.25 定义一数组GRADE存放有100个学生某门功课的考试成绩,要求编一程序,统计各分数段的人数,即要求统计90~100分,80~89分,70~79分,60~69分以及60分以下的各有多少人。
DATA SEGMENT
GRADE DB 12,65,77,88,98,23,94,75,85,62 LEN EQU $-GRADE A DB 0 B DB 0 C DB 0 D DB 0 E DB 0 DATA ENDS
CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX MOV CX,LEN ALOOP1: MOV SI,CX DEC SI
CMP GRADE[SI],60
JB GRE ;<60, E+1->E CMP GRADE[SI],70
JB GRD ;<70, D+1->D CMP GRADE[SI],80
JB GRC ;<80, C+1->C CMP GRADE[SI],90
JB GRB ;<90, B+1->B INC A ;>=90, A+1->A JMP GOON GRB: INC B
JMP GOON GRC: INC C
JMP GOON GRD: INC D
JMP GOON GRE: INC E
JMP GOON GOON: LOOP ALOOP1 MOV AH, 4CH INT 21H CODE ENDS END START
3.26 编一程序,在以BUF为首址的字节单元中存放了COUNT个无符号数,找出其中最大数送MAX单元。
DATA SEGMENT
BUF DB 11,23,43,45,67,82,38,48,98,34,67 COUNT EQU $-BUF MAX DB ? DATA ENDS
CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX MOV CX,COUNT MOV AL,0 ;AL用力存放最大数,初值为0
ALOOP: MOV SI,CX DEC SI
CMP AL,BUF[SI] ;从后面取数据,与AL比较 JAE GOON
MOV AL,BUF[SI]
GOON: LOOP ALOOP MOV MAX,AL MOV AH, 4CH INT 21H CODE ENDS END START
3.27 利用系统功能调用从键盘输入10个一位无符号数,求出其中最大和最小数,在显示器上输出显示。
DATA SEGMENT
IN_STR DB 'Please Input 10 Num of 0~9:$' MAX_STR DB 0DH,0AH,'MAX Num is:$' MIN_STR DB 0DH,0AH,'MIN Num is:$' MAX DB ? MIN DB ? DATA ENDS
CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX LEA DX,IN_STR MOV AH,09H
INT 21H ;提示输入10个数字 IND: MOV AH,01H
INT 21H ;输入一个字符 CMP AL,30H
JB IND ;<30H,ERROR CMP AL,39H
JA IND ;>39H,ERROR SUB AL,30H
MOV MIN,AL ;第一个数初始化MIN MOV MAX,AL ;第一个数初始化MAX MOV CX,3 ALOOP: MOV AH,01H
INT 21H ;输入一个字符 CMP AL,30H
JB ALOOP ;<30H,ERROR CMP AL,39H
JA ALOOP ;>39H,ERROR SUB AL,30H ;ASCII->数 CMP AL,MIN
JB GOMIN ;小于最小数,AL->MIN,输入下一个数 CMP AL,MAX
JA GOMAX ;大于最大数,AL->MAX,输入下一个数 JMP GOON GOMIN: MOV MIN,AL JMP GOON
GOMAX: MOV MAX,AL
GOON: LOOP ALOOP LEA DX,MAX_STR MOV AH,09H
INT 21H ;提示输出最大数 MOV DL,MAX ADD DL,30H MOV AH,02H
INT 21H ;输出最大数 LEA DX,MIN_STR MOV AH,09H
INT 21H ;提示输出最小数 MOV DL,MIN ADD DL,30H MOV AH,02H
INT 21H ;输出最小数 MOV AH, 4CH INT 21H CODE ENDS END START
3.28 利用系统功能调用,完成将键盘输入的小写字母转换成大写字母输出显示,直到输入$字符时,停止输出。
CODE SEGMENT ASSUME CS:CODE START: MOV AH,01H
INT 21H ;输入一个字符 CMP AL,'$'
JE STOP ;'$'符,退出 CMP AL,'a' JB START CMP AL,'z' JA START ;非小写字母,继续输入 SUB AL,20H MOV DL,AL MOV AH,02H INT 21H ;小写字母转换成大写字母输出 JMP START STOP: MOV AH, 4CH INT 21H CODE ENDS END START
3.29 设有一字符串已存放在STRBUF为首址的数据区中,编一程序找出其中的$字符,并将其存放地址送ADRBUF单元中。
DATA SEGMENT
STRBUF DB 'a;sldkfjasldkf$asdf' LEN EQU $-STRBUF ADRBUF DB ? DATA ENDS
CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX
MOV CX,LEN ;最多查询次数 MOV BX,0
ALOOP: CMP STRBUF[BX],'$'
JZ STOP ;找到,地址送ADRBUF,退出程序 INC BX
LOOP ALOOP STOP: MOV ADRBUF,BL MOV AH, 4CH INT 21H CODE ENDS END START
3.30 用子程序结构编程计算:S=1!+2!+3!+4!+?+8! 修改原有答案结果,SUM2为结果
STACK SEGMENT STACK DW 256 DUP(?) TOP LABEL WORD STACK ENDS
DATA SEGMENT BUFF DB 1,2,3,4,5,6,7,8 SUM DW 0000H SUM2 DW 0 DATA ENDS
CODE SEGMENT
ASSUME CS:CODE, DS:DATA,SS:STACK START: MOV AX,DATA MOV DS,AX MOV AX,STACK MOV SS,AX
MOV SP,OFFSET TOP MOV CH,0 MOV CL,8
MOV SI,OFFSET BUFF LOP1:
MOV AX,OFFSET SUM PUSH AX MOV AH,0 MOV AL, [SI] PUSH AX
CALL FAR PTR FACT MOV DX,SUM ADD SUM2,DX INC SI
LOOP LOP1 MOV AH,4CH INT 21H CODE ENDS
CODES SEGMENT ASSUME CS:CODES FACT PROC FAR PUSH BP MOV BP,SP PUSH BX PUSH AX
MOV BX,[BP+8] MOV AX,[BP+6] CMP AX,0 JE DONE PUSH BX DEC AX PUSH AX CALL FACT MOV BX,[BP+8] MOV AX,[BX]
MUL WORD PTR [BP+6] JMP RETURN
DONE: MOV AX,01H RETURN:MOV [BX],AX POP AX POP BX POP BP
17.ADC0809和8255A连接如图8.81所示。8255A的A口工作于方式1输入。当ADC0809转换结束时,EOC的上升沿触发单稳态电路DW,DW输出的负脉冲作为选通脉冲,将ADC0809的输出数据锁存进A口。用中断方式依次将IN7~IN0采样一遍,放到BUFFER开始的数据缓冲区,试编程。设8255A口地址为200H~203H,8259的地址为020H、021H,IRQ2中断类型号为0AH,8259已初始化。
图8.81 解:
8255的PC7为1输出启动信号,PC0~PC2实现通道选择,A/D转换结束信号可从PC4获得,PC3为1输出中断。 ;主程序
STACK SEGMENT STACK STA DB 20 DUP(?) TOP LABEL WORD STACK ENDS DATA SEGMENT
BUFFER DB 8 DUP(?) DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,SS:STACK START: MOV AX,DATA MOV DS,AX MOV AX,STACK MOV SS,AX
MOV SP,OFFSET TOP
PUSH DS ;中断向量送中断向量表 MOV AX,SEG ADINT MOV DS,AX
MOV DX,OFFSET ADINT MOV AL,0AH MOV AH,25H INT 21H
POP DS
MOV DX,021H ;开放IRQ2中断 IN AL,DX
AND AL,1111 10llB OUT DX,AL
MOV DI,OFFSET BUFFER ;缓冲区起始地址送DI STD ;DF置1
STI ;开中断 MOV CX,8 MOV BL,90H
NEXT:MOV DX,202H
MOV AL,BL
OUT DX,AL ;启动0809 AND AL,7FH OUT DX,AL
WAIT:IN AL,DX TEST AL,10H
JNZ WAIT ;检测PC4状态,非0,A/D转换没结束 MOV AL,07H MOV DX,203H
OUT DX,AL ;PC3置1,输出中断 HLT
INC BL LOOP NEXT
CLI ;采集完8口,结束 MOV AH,4CH INT 2IH ;中断服务程序
ADINT PROC NEAR
PUSH DX
MOV DX,200
IN AL,DX ;读取转换结果 STOSB ;送指定内存单元 MOV DX,20H ;发中断结束命令 MOV AL,20H OUT DX,AL POP DX
IRET
ADINT ENDP CODE ENDS
END START
18.ADC的引线图及工作时序如图8.82所示。试将此ADC与8255相连接,并编写包括初始化程序在内的、变换一次数据并将数据放在DATA中的程序。
图8.82
19. 试利用8255A、ADC0809设计一 IBM PC机 A/D转换接口卡,8255A的地址为02C0H~02C3H,由系统板上的8253定时器0控制每隔5秒采样一遍ADC0809的8路模拟输入,并将采集的数字量显示于CRT屏幕上。
解:
20.简述82380DMA控制器与8237的兼容性。
21.82380DMA控制器中,如果设置为全循环优先级,通道2最低优先级,通道4最低优先级。则开始时各通道的优先顺序是怎样排列的?若通道2完成DMA服务后,各通道的优先顺序又是如何排列的?
22.简述82380中断控制器PIC的功能。
1 0 1 0 1 1 1111111111
AFFFH 16.扩展内存(XMS)与扩充内存(EMS)有何不同?
扩展内存是指CPU能直接寻址的、地址大于1MB以上的内存存储空间。 扩充内存是在微机的CPU寻址范围之外所扩展的物理存储器。
17.简述高速缓冲存储器在微机系统中的作用。
第6章 I/O接口技术
1.CPU与外部设备通讯为什么要使用接口?
2.CPU与输入/输出设备通信时所用到的接口电路通常应具备的功能?
3.I/O端口有哪两种寻址方式?各有何优缺点?
4.8086CPU在执行输入/输出指令时,CPU的哪些控制管脚起作用?什么样的电平有效?
5.计算机输入/输出有哪几种控制方式?各有何优缺点?
6.在输入/输出的电路中为什么常常要用锁存和缓冲器?
7.利用三态门(74LS244)作为输入接口,接口地址规定为04E5H,试画出其与8086总线的连接图。
04E5H = 0000 0100 1110 0101B 部分译码
A2A1A0作为138的CBA输入,即CBA=101,Y5接74LS244的1G、2G引脚 A10A7A6A5=1111作为138的G1使能信号 A4A3=00相或后作为G2A使能信号 A9A8=00相或后作为G2B使能信号
8.在IBM PC机接口开发中用到某一大规模集成电路芯片,其内部占16个I/O端口地址300H~30FH,试设计一个片选信号CS形成电路。
300H = 11 0000 0000B 30FH = 11 0000 1111B
部分译码
A3A2A1A0:接芯片的地址线
A6A5A4:作为138的CBA输入,即CBA=000 A7:作为G2AG2B使能信号
A9A8:相与后作为G1使能信号
9.在某8086微机系统中有一外设,使用存储器映像的I/O寻址方式,要求该外设地址为01000H,试画出其译码器的连接电路,使其译码器输出满足上述地址要求,译码器使用74LS138芯片。
01000H = 0000 0001 0000 0000 0000B
A2A1A0作为138的CBA输入,即CBA=000 A12=1,作为G1使能信号
其他相或后作为G2A、G2B使能信号
10.若第9题中的外设要求用I/O映像的I/O寻址,端口地址为38H,试画出其译码器的连接图。
部分译码
38H = 011 1000B
A2A1A0作为138的CBA输入,即CBA=000 A5A4A3=111,三位地址相与后作为G1使能信号 A7A6=00,可分别作为G2A,G2B使能信号
A5A4A3A7A6A2A1A0&+Y0G1Y1G2AY2G2BY374LS138Y4CY5BY6AY7译码信号M/IO
11.试根据图6.22所示的接口原理,编写一程序段,使从键盘输入一行字符(最大长度为80个字节),该行字符以回车符结尾,输入的字符存放在BUFF开始的内存缓冲区中,并要求每读入一个字符,在终端上显示出来(使用BIOS中断或系统功能调用)。
INPUT1 PROC MOV CX,80 LEA DI,BUFF
LOP1: CMP CX,0 JZ DONE
IN AL,29H AND AL,01H JZ LOP1 IN AL, 28H CMP AL,0DH JZ DONE MOV [DI],AL MOV DL,AL MOV AH,02H
INT 21H DEC CX INC DI JMP LOP1
DONE: RET INPUT1 ENDP
12.试画一个流程图,说明如何用程序控制的I/O把N个字节的数据块输入到存储器中。
13.CPU响应DMA请求和响应中断请求有什么本质性的区别?
14. DMAC(8237A)占几个端口地址?这些地址在读写时的作用是什么?叙述DMAC由内存向端口传送一个数据块的过程。若希望利用8237A把内存中的一个数据块传送到内存的另一个区域,应当如何处理?当考虑8237A工作在8086系统,数据是由内存的某一段向另一段传送且数据块长度大于64K时,应当如何考虑?
15.当DMA8237A获得总线控制权后,它是怎样发出20位地址信号的?写出DMA在PC/XT机中4个通道的分工情况。
16.设8237A口址为00~0FH,编写一个以请求方式进行数据块传送,数据块长为1000H,从内存00000H传送到01000H,传送完不自动预置,DREQ、DACK均为高电平有效的程序。
第7章 中断系统
1.什么是中断?简述一个中断的全过程。
2.8086的可屏蔽中断与非屏蔽中断有何不同?
3.中断向量表的作用是什么?如何设置中断向量表,常用的方法有哪些?
4.类型26H的中断向量在存储器的哪些单元里?
5.已知SP=0100H,SS=0300H,FLAGS=0240H,00020H至00023H单元内容分别是40H,00H,00H,01H,同时还已知INT 8的偏移量00A0H在段基址为0900H的CS段内,试指出在执行INT 8指令并进入该指令相应的中断程序时,SP、SS、IP、CS、FLAGS和堆栈最上面三个字的内容。
解:
(1) 中断响应时,将当前的FLAGS(0240H)、CS(0900H)和IP(00A0H)内容依次压入堆栈,以便返回时恢复。
0300 : 00FA 0300 : 00FB 0300 : 00FC 0300 : 00FD 0300 : 00FE 0300 : 00FF
A0H 00H 00H 09H 40H 02H SS = 0300H,SP = 00FAH
(2) 将FLAGS中的IF标志和TF标志清零
0240H = 0000 0010 0100 0000H(从左到右:第15~0位) IF = 1(第9位),TF = 0(第8位),清零后,FLAGS = 0040H (3) 根据中断类型码,转入中断服务程序入口。 向量地址 = 08H × 4 = 00020H CS = 0100H,IP = 0040H
6.假设中断类型9的中断服务程序的起始地址为INT-POUT,试写出主程序为建立对应中断向量的程序段。
; 设置中断向量-方法1 PUSH DS ; 数据段地址压栈 MOV AX, 0 ; 中断向量表段地址→DS MOV DS, AX MOV BX, 9*4 ; 中断向量地址→BX MOV AX, OFFSET INT-POUT ; 中断向量填入中断向量表 MOV [BX], AX MOV AX, SEG INT-POUT MOV [BX+2], AX POP DS ; 恢复数据段地址 ; 设置中断向量-方法2 PUSH DS MOV AX, SEG INT-POUT MOV DS, AX MOV DX, OFFSET INT-POUT
MOV MOV INT POP AH, 25H AL, 9 21H DS
7.设备D1、D2、D3、D4、D5是按优先级次序排列的,D1的优先权最高,而中断请求的次序如下所示,试给出各设备的中断处理程序的运行次序。假设所有的中断服务程序开始后就有STI指令,并在中断返回之前发出结束命令。
(1) D3和D4同时发出中断请求。
(2) 在D3的中断服务程序完成之前,D2发出中断请求。 (3) 在D4的中断服务程序完成之前,D5发出中断请求。
(4) 以上所有的中断服务程序完成并返回主程序后,D1、D3、D5同时发出中断请求。
8.在上题中,假设所有中断中都没有STI指令,而它们的IRET指令都可以由于FLAGS出栈而使IF=1,则各设备的中断服务程序的运行次序应是怎样的?
9.试定义一个软中断,中断类型码为79H,要求:
(1) 在中断服务程序中,完成ASCII码到BCD码的转换,ASCII码首地址为ASCMM,字节数为NUMB,转换后的BCD码放在BCDMM为首地址的存储区中;
(2) 能正确地转到中断服务程序,即需给出中断向量。试编写出中断服务程序和主程序片断。 解:(完成的是数字的ASCII码到数字的转换) ; 主程序片断
; 设置中断向量-方法1 PUSH DS ;数据段地址压栈 MOV AX, 0 ;中断向量表段地址→DS MOV DS, AX MOV BX, 79H*4 ;中断向量地址→BX MOV AX, OFFSET ATOBCD ;中断向量填入中断向量表 MOV [BX], AX MOV AX, SEG ATOBCD MOV [BX+2], AX POP DS ;恢复数据段地址 ; 设置中断向量-方法2 PUSH DS MOV AX, SEG ATOBCD MOV DS, AX MOV DX, OFFSET ATOBCD MOV AH, 25H MOV AL, 79H INT 21H POP DS ; 中断服务程序
ATOBCD: MOV CX, NUMB
LEA SI, ASCMM LEA DI, BCDMM CLD
正在阅读:
微机原理黄冰版--作业答案09-10
苏教版六年级综合实践上册教案2017.909-06
框架混凝土结构设计计算书 - 图文04-12
鄂东职院校园网设计方案09-13
马克思的资本循环和周转理论及现实意义04-16
感恩节南瓜赛跑游戏推荐02-24
梦想萌芽作文800字07-02
- exercise2
- 铅锌矿详查地质设计 - 图文
- 厨余垃圾、餐厨垃圾堆肥系统设计方案
- 陈明珠开题报告
- 化工原理精选例题
- 政府形象宣传册营销案例
- 小学一至三年级语文阅读专项练习题
- 2014.民诉 期末考试 复习题
- 巅峰智业 - 做好顶层设计对建设城市的重要意义
- (三起)冀教版三年级英语上册Unit4 Lesson24练习题及答案
- 2017年实心轮胎现状及发展趋势分析(目录)
- 基于GIS的农用地定级技术研究定稿
- 2017-2022年中国医疗保健市场调查与市场前景预测报告(目录) - 图文
- 作业
- OFDM技术仿真(MATLAB代码) - 图文
- Android工程师笔试题及答案
- 生命密码联合密码
- 空间地上权若干法律问题探究
- 江苏学业水平测试《机械基础》模拟试题
- 选课走班实施方案
- 微机
- 原理
- 作业
- 答案
- 黄冰版
- 《直线、射线和线段》优秀教学设计
- 中国石油天然气集团公司带压作业技术规程(试行)
- 自动控制实验三控制系统的根轨迹分析
- 在思想政治工作座谈会上的讲话
- 2011年7月全国自考《质量管理(一)》试题及答案
- dfs - service - 2013年海淀区中小学生信息学奥林匹克竞赛 - 小学组试题
- 农村不动产确权登记发证测绘技术设计书
- 2014年广西崇左教师招考职位表
- 钢轨探伤工题库
- 重灰工段物料衡算1
- 监理工作手册繁昌戴家殿至新淮改建 - 图文
- 暨南大学
- 备稿六步
- 员工行为排查流程
- 一般过去时讲解与练习小学生
- 专科学业总结1500字
- 2018二建《市政实务》新版教材变化对比说明
- 数据挖掘考试题目 - 简答题
- 2008-化工热力学期末考试闭卷A1及答案
- 板桥中学教育教学管理制度 - 图文