者控制CPU工作方式的标志寄存器。
试画出8086CPU工作在最小模式时的总线形成示意图。
(注:BHE*引脚为34脚---即SS0,参见P25状态编码表)
四点说明:
A、,决定了8086工作在最小模式。 B、有一片8234A,作为。
C、有三片8282或74LS373,用来作为。 D、当系统中所连接的存储器和外设比较多时,需要增加系统数据总线的驱动能力, 这时,要用两片8286/8287(74LS244或74LS245)作为。
8086/8088为什么采用地址/数据引线复用技术? 答:考虑到芯片成本,8086/8088采用40条引线的封装结构。40条引线引出8086/8088的所有信号是不够用的,采用地址/数据线复用引线方法可以解决这一矛盾,从时序逻辑的角度,地址与数据信号不会同时出现,二者可以分时复用同一组引线。
怎样确定8086的最大或最小工作模式?最大、最小模式产生控制信号的方法有何不同?
答:引线MN/MX*的逻辑状态决定8086的工作模式,MN/MX*引线接高电平,8086被设定为最小模式;MN/MX*引线接低电平,8086被设定为最大模式。最小模式下所有的控制信号由CPU相关引线直接提供;最大模式下控制信号由8288专用芯片译码后提供,8288的输入由8086的S2─S0三条状态信号引线提供。
李伯成《微机原理》习题 第三章
本章作业参考书目:
1.周明德: 微型计算机IBM-PC系统原理与应用 清华大学出版社 1991 2.王永山等: 微型计算机原理与应用 西安电子科大出版社 1998 3.张怀莲: IBMPC汇编语言程序设计 电子工业出版社 1990
注:本习题解中的程序仅为代码片段,可在Emu8086 version 环境下仿真运行,如果在MASM下进行汇编,需添加段设置以及相应的伪指令。 3.1
MOV AX,00H; SUB AX,AX;
MOV AX,[BX]; MOV AX,TABLE;
MOV
立即寻址 寄存器寻址 寄存器间接寻址 直接寻址 寄存器相对寻址
MOV AL,ARAY1[SI];
AX,[BX+6];
寄存器相对寻址
3.2 若1KB的数据存放在TABLE以下,试编写程序将该数据拌到NEXT之下。
程序片段如下:
ORG 100h MOV CX,03FFH;数据个数 LEA SI,TABLE;源区首地址 LEA DI,NEXT; 目的区首地址
AL,[SI];
MOV
[DI],AL; 搬移
移动地址指针
循环计数器递减
AGAIN: MOV
INC SI
INC DI; DEC
CX;
JNZ AGAIN; 循环未结束转 HLT;
暂停
TABLE DB 1024 dup ('A'); 源数据区 NEXT
DB 1024 dup (0); 目的数据区 ORG 100h
3.3 编写10个字(16位二进制数)之和的程序
LEA SI,ADD1; LEA DI,ADD2; LEA BX,SUM; MOV MOV
CL,CONT; CH,0; 循环初始化
进位清零
读加数1
移动源区地址指针 移动目的区地址指针
CLC; ADC ADD ADD MOV ADD LOOP
MADD1: MOV AX,[SI];
AX,[DI] SI,2; DI,2;
[BX],AX; BX,2; MADD1;
回存计算结果
移动“和”存储区地址指针 循环控制
HLT; 暂停
ADD1 ADD2 SUM CONT
DB 0FEH,86H,7CH,44h,56H,1FH,24H,01H,02H,33H;加数1 DB 56H,49H,4EH,0FH,9CH,22H,45H,11H,45H,21H; 加数2 DB 10 DUP (0); 和存储单元 DB 5 ; 循环次数
某16位二进制数,放在DATA连续的两个单元中,试编程求其平方根和余数,将其分别存放在ANS和REMAIN中。
ORG 100h MOV BL,2;
CX,NUM;
BL;
MOV MUL CMP MOV
除数初值 预计最大循环次数 0、1的平方根除外 大于原始数据么? 读数
AGAIN: MOV
AL,BL; AX,CX; AX,CX;
试除
得到2的平方
若原始数据小于4转EXIT
JG EXIT; DIV BL; INC BL; DEC MOV MOV MUL MOV HLT
除数递增
继续除 去除除数自加
存商 恢复余数
JMP AGAIN;
BL;
EXIT:
ANS,BL; AL,BL; BL;
SUB CX,AX;
REMAIN,CL;
NUM DW 7;
ANS DB ?;
REMAIN DB ?;
在DATA1之下顺序存放着以ASCII码表示的千位数,将其转换成二进制数。
MOV
MOV MOV CLD XOR XOR AND CMP CMP JG
AX,AX DX,DX AL,7FH AL,'0' AL,'9' ASCB2 CL,4;
移位次数
CH,CL; 循环次数 SI,OFFSET ASCBIN
ASCB1: LODSB
;不大于‘0’结束转换
JL ERR
;大于‘9’转ASCB2
SUB AL,30H ; 数字形式二进制数减30H ;大于‘9’又小于‘A’结束转换
JMP ASCB3 ASCB2: CMP AL,'A'
JL ERR CMP JG SUB ROL DEC JNZ ROL MOV NOP HLT
AL,'F' ERR
;大于‘F’为不合理数,结束转换 ;字符形式ASCII数减37H
AL,37H
DX,CL CH
ASCB3: OR DL,AL
ASCB1
DX,CL
BIN,DX;存储转换结果
ERR:
ASCBIN DB '1','B,'4','3'
BIN DW ?
编写程序将MOLT中的一个8位数乘以20,乘积放在ANS中(用3种方式)。 解:第一种方法:常规乘法运算
ORG 100h MOV MOV MUL MOV HLT
MOLT DB 2
AL,MOLT BL,20 BL ANS,AX
ANS DW ?
第二种方法,将MOLT连加20次
ORG 100h
MOV MOV XOR CLC LOOP MOV HLT
ADD1 ANS,AX CX,20 BX,MOLT AX,AX
ADD1:ADC AX,BX
MOLT DW 5
ANS DW ?
第三种方法,将“20”连加MOLT次
ORG 100h
MOV MOV XOR CLC LOOP
ADD1 CX,MOLT BX,20 AX,AX
ADD1:ADC AX,BX
MOV HLT
ANS,AX
MOLT DW 5
ANS DW ?
在DATA之下存放100个无符号的8位数,找出其最大者并将其存放在KVFF单元。
ORG 100h
XOR LEA
DL,DL DI,KVFF;
DL中始终存目前最大值
比较次数为N-1次
NEXT0: LEA SI,BUFFER; MOV CL,99; NEXT1: MOV
AL,[SI];
SI;
INC CMP
DL,AL;
JNC NEXT2; MOV DL,AL;
CL;
NEXT2: DEC
JNZ NEXT1;
MOV [DI],DL; 最大值存储 HLT
BUFFER DB ;自行定义100个数据
KVFF DB ?
若将数据按大小顺序排序,试编写程序.. 解:此处采用 “冒泡法”予以处理:
ORG 100h LEA DI,BUFFER; MOV
BL,99;
数据区
外循环次数 内循环次数
NEXT0:
NEXT3:
MOV SI,DI; MOV CL,BL; MOV
AL,[SI]; 读数
INC SI; CMP MOV MOV MOV JNZ DEC JNZ
移动指针
比较
AL,[SI]; DL,[SI]; [SI-1],DL; [SI],AL;
JNC NEXT5; 大于转NEXT5
不大于互换
NEXT5: DEC CL; 内循环次数减一
NEXT3; BL; 外循环次数减一 NEXT0
HLT
BUFFER DB 自行定义100个字节型数据 A<20,Y=3*A; A<60,Y=A-20; A>=60,Y=80.
在BVFF单元中有一个BCD数A,试根据下列关系编写程序,计算结果存在DES中.
ORG 100h