微机原理与汇编作业
一、进制转换
1.将下列十进制数转换成二进制和十六进制:
(1)37 (2)231 (3)45.05 (4) 168.95
(3)45/2=22---1;22/2=11--0;11/2=5---1;5/2=2---1;2/2=1---0;1/2=0---1
101101.000011001100110011
2D.0CCCCCCC
0.052=0.1;0.12=0.2;0.22=0.4;0.42=0.8;0.82=1.6;0.62=1.2
1.(1)127 (2)-127
2.(1)347 (2)-347
3.(1)915 (2)-915
二、给出下列补码表示的机器数的真值(用十进制表示)
1.8位长度的补码数:
(1)1BH (2)80H (3)E3H
1110 0011 ---》0001 1101---》-29
2.16位长度的补码数:
(1)397DH (2)FFFFH (3)8000H--》1000 0000 0000 0000 -》1000 0000 0000 0000-》-2^15
1111 1111 1111 1111--》0000 0000 0000 0001---》-1
三、用补码运算完成下列运算,并指出运算是否产生溢出。
1.33H+5CH
0011 0011
0101 1100
1000 1111=8fH
OF=1
2.-29H+6EH=(-29H)+6EH= 1101 0111+0110 1110= 0011 1101=3DH OF=0
3.-30H-8AH=(-30H)+(-8AH)= 1101 0000+ 0111 0110= 0100 0110 =46H OF=0
4.4CH-78H
四、将下列十进制数分别转换位压缩BCD码、非压缩BCD码、ASCII码(用十六进制数表示)
1.38 2. 97 3. 255 4. 764 5. 1000
38H 0000 0011 0000 1000=0308H---》3338H
1000-》0001 0000 0000 0000--》1000H-》01000000H-》31303030H
五、掌握8086/8088的内部结构,并画出。
七、简述8086/8088内部寄存器及专用用途。
八、8086/8088标志寄存器FLAG包含哪几个标志位?简述各位的状态含义及用途。
答:
状态标志:存放运算结果的特征。6个状态标志位(CF,PF,AF,ZF,SF,OF)
控制标志:控制某些特殊操作。3个控制标志位(TF,IF,DF)
状态标志位:
C 进位标志
ALU进行算术运算时,反映运算结果最高位有无进位/借位。
C =“0” 无进位/借位 NC (汇编语言符号)
C =“1” 有进位/借位 C
P 奇偶标志
逻辑运算时,P反映ALU运算结果“1”的个数的奇偶性。
P = “0” 奇数个1 PO
P = “1” 偶数个1 PE
A 辅助进位标志,Ac
A位反映ALU进行算术运算时,D3向D4是否有无进位/借位。
A =“0” 无进位/借位
A =“1” 有进位/借位
A位通常供CPU内部调整用
Z 全零标志
ALU运算结果是否为零,适用于算术、逻辑运算。
Z =“0” 结果不为零 NZ
Z =“1” 有进位/借位 Z
S 符号标志
ALU运算结果最高位。
S = “0” 结果为正 NS
S = “1” 结果为负 S
O 溢出标志
判断带符号数加减运算结果是否溢出。
O =“0” 溢出 NO
O =“1” 不溢出 O
无符号数溢出判断用C标志。
控制标志位的名称和定义
T 单步标志、陷阱标志
T=1可使微处理器进入跟踪方式,即单步调试状态。
I 中断允许标志
用来控制CPU是否允许响应可屏蔽中断。
I = “0” 表示不允许CPU响应可屏蔽中断
I = “1” 表示允许CPU响应可屏蔽中断。
可用指令置位和复位
D 方向标志
用于指定字符串处理指令的步进方向。
D =“0” 递增方向 低地址向高地址方向进行
D =“1” 递减方向 高地址向低地址方向进行
可用指令置位和复位
九、在实地址方式中,设CS=0A10H,共有179字节长度的代码段,试给出该代码段末地址的逻辑地址和物理地址。
答:该代码段偏移地址位0~178,而178=256-78=100H-4EH=B2**
所以代码段点地址范围是0A10H:0000H~0A10H:00B2H**
末地址的逻辑地址:0A10H:00B2H**
末地址的物理地址:0A10H10H+00B2H=A1B2H*
十、在实地址方式中,若DS=095FH,物理地址是11820H,试给出对应的逻辑地址;当DS=2F5FH时,物理地址是多少?
答:逻辑地址=段基地址:偏移地址11820H-095F0H=8230H
逻辑地址:0995FH:8230H
物理地址:2F5F0H+8230H=37820H
十一、宏汇编语言中,符号常量定义有哪些方式?数值表达式中常用的运算符有哪些?
答:
符号常量定义方式:
(1)数值常量
常用的有二进制数、十进制数、十六进制数和ASCII字符
其中ASCII字符做数值常量时,需加单引号
如: 1010B, 10,0AH,’A’,’$’,’ABC’
(2)符号常量
程序中为经常使用的数值取的名。用EQU或“=”伪指令定义,如:
P EQU 314
P=314
数值表达式中常用的运算符有:
(1)算术运算符:+,-,×,/,MOD(求余)
(2)逻辑运算符:AND,OR,XOR,NOT
(3)关系运算符:EQ(=),NE(≠),LT(<),GT(>),LE(≤),GE(≥)
十二、八、宏汇编语言中,标号表示什么?有哪些定义方式?有哪三个属性?
答:
标号表示:
当程序中要跳转到另一位置时,需要有一个标识来指示新的位置,这就是标号,通过在目标地址的前面放上一个标号,可以在指令中使用标号来代替直接使用地址标号是为一组机器指令所起名字.标号可有可无,只有当需要用符号地址来访问该语句时,才给此语句赋予标号.标号是程序目标标志,总是和某地址相联系,供转移或循环指令控制转移使用.
标号定义方式:
标号只在代码段中定义和使用,定义的方式有两种:
(1)书写在符号指令前,用:定义,为NEAR类型, NEAR型标号只能在段内 使用!
例: CYCLE:MOV AL,[SI] ;定义近标号CYCLE
(2)用PROC…ENDP伪指令定义过程名
例:ABC PROC FAR ;定义过程名ABC为FAR型标号
.
.
.
ABC ENDP
标号的三个属性:
(1)段地址—定义该标号所在段的段首址
(2)偏移地址—标号所在段的段首址到该标号定义指令的字节距离
(3)类型—NEAR和FAR两种
NEAR—段内调用,FAR—段间调用
十三、 简述符号指令的寻址方式。
答:寻址方式——寻找操作数据存放位置(地址)的方式,寻址方式可分为三大类:
(1)立即寻址:操作数就是操作数据
(2)寄存器寻址:操作数是寄存器名
(3)存储器寻址 :操作数是地址表达式
十四、给定如下数据段,完成相应任务。
DATA SEGMENT
S DB 1,2,3,4
W DW 1921H,4567H
S2 DB ‘ABCD’
S3 DW ‘12’,’34’
DATA ENDS
1、判断下列指令是否是合法指令,如果不合法,请改正。
(1)MOV AX,S2
(2)34H,AX
(3)MOV W[AX],AX
(4)MOV [BX],15H
(5)MOV W[SI],CX
答:(1)MOV AX,S2合法
(2)34H,AX不合法,MOV AX,34H
(3)MOV W[AX],AX不合法,MOV W[BX/BP],AX
(4)MOV [BX],15H合法
(5)MOV W[SI],CX合法
十五、试给出执行下列指令后OF、SF、ZF、CF、AF、PF 6个可测试标志位的状态(要求用16进制形式给出16位标志寄存器FLAG的值,其他各位均为0)。
MOV AX, 2345H
ADD AX, 3219H
AX=555EH->0101 0101 0101 1110->OF=0,SF=0,ZF=0,AF=0,PF=0,CF=0
FLAG:0000 0000 0000 0000->0000H
MOV BX,5439H
ADD BX,456AH
0101 0100 0011 1001
+ 0100 0101 0110 1010
1001 1001 1010 0011
BX=99A3H->1001 1001 1010 0011->OF=1,SF=1,ZF=0,AF=1,PF=1,CF=0
FLAG:0000 1000 1001 0100->0894H
MOV CX,3579H
SUB CX,4EC1H
CX= E6B8H
0011 0101 0111 1001
- 0100 1110 1100 0001
1 1110 0110 1011 1000->OF=0,SF=1,ZF=0,AF=0,PF=0,CF=0
FALG=0000 0000 1000 0100->0081H
5.设AX=1234H,BX=5678H,DX=90ABH,将AX中间8位(作为高8位),BX低4位和DX高4位(作为低4位)拼成一个新字放在AX中。编写实现该要求的汇编程序DATAM1.ASM,并进行汇编和连接,得到相应的目标文件和执行文件。
stack segment stack 'stack'
dw 32 dup(0)
stack ends
data segment
dw 10 dup(0)
data ends
code segment
begin proc far
assume ss:stack,cs:code,ds:data
push ds
sub ax,ax
push ax
mov ax,data
mov ds,ax
MOV AX,1234H
MOV BX,5678H
MOV DX,90ABH
MOV CL,4
SHL AX,CL
MOV AL,BL
SHL AL,CL
SHR DH,CL
OR AL,DH
ret
begin endp
code ends
end begin
6.设CX=5678H,要求将CX中间8位取反,高4位清0,低4位置1,结果放在CX中。编写实现该要求的汇编程序DATAM2.ASM,并进行汇编和连接,得到相应的目标文件和执行文件。
stack segment stack 'stack'
dw 32 dup(0)
stack ends
code segment
begin proc far
assume ss:stack,cs:code,ds:data
push ds
sub ax,ax
push ax
mov ax,data
mov ds,ax
MOV CX, 5678H
XOR CX, 0FFFFH
AND CH,0FH
OR CL,0FH
ret
begin endp
code ends
end begin
7.给定数据段如下:
DATA SEGMENTS
D DB 12H,34H,56H,78H,90H,ABH
DATA ENDS
设BX=03H,编写汇编程序将数据段中以BX为偏移地址的连续3单元中的无符号数求和,并进行汇编和连接,得到相应的目标文件和执行文件。
stack segment stack 'stack'
dw 32 dup(0)
stack ends
data segment
D DB 12H,34H,56H,78H,90H,ABH
data ends
code segment
begin proc far
assume ss:stack,cs:code,ds:data
push ds
sub ax,ax
push ax
mov ax,data
mov ds,ax
MOV BX,03H
MOV AX, 0
MOV AL, D[BX]
ADD AL, D[BX+1]
ADC AH, 0
ADD AL, D[BX+2]
ADC AH, 0
ret
begin endp
code ends
end begin
8.给定数据段如下:
DATA SEGMENTS
D DB 12H,34H,56H,78H,90H,ABH
DATA ENDS
设BX=02H,编写汇编程序将数据段中以BX为偏移地址的连续4单元的内容颠倒过来,并进行汇编和连接,得到相应的目标文件和执行文件。
stack segment stack 'stack'
dw 32 dup(0)
stack ends
data segment
D DB 12H,34H,56H,78H,90H,ABH
data ends
code segment
begin proc far
assume ss:stack,cs:code,ds:data
push ds
sub ax,ax
push ax
mov ax,data
mov ds,ax
MOV BX,03H
MOV AL, D[BX]
XCHG AL, D[BX+3]
MOV D[BX],AL
MOV AL, D[BX+1]
XCHG AL,D[BX+2]
MOV D[BX+1],AL
ret
begin endp
code ends
end begin
9.实现“镜子”程序:从键盘输入一串字符,在下一行照原样显示。
stack segment stack 'stack'
dw 32 dup(0)
stack ends
data segment
IBUF DB 0FFH,0,0FFH DUP(0)
data ends
code segment
begin proc far
assume ss:stack,cs:code,ds:data
push ds
sub ax,ax
push ax
mov ax,data
mov ds,ax
MOV DX, OFFSET IBUF
MOV AH, 10
INT 21H
MOV BL, IBUF+1
MOV BH,0
MOV IBUF[BX+2],'$'
MOV DL,0AH
MOV AH,2
INT 21H
MOV DX, OFFSET IBUF+2
MOV AH,9
INT 21H
ret
begin endp
code ends
10.数据段中有一符号字数组变量ARRAY,第1个字是被除数,第2个字是除数,接着存放商和余数,请编写汇编程序实现。
stack segment stack 'stack'
dw 32 dup(0)
stack ends
data segment
ARRAY DW 1234H,56H,0,0
data ends
code segment
begin proc far
assume ss:stack,cs:code,ds:data
push ds
sub ax,ax
push ax
mov ax,data
mov ds,ax
MOV AX, ARRAY
CWD
MOV CX, ARRAY+2
IDIV CX
MOV ARRAY+4, AX
MOV ARRAY+6,DX
ret
begin endp
code ends
11.编写求两个4位非压缩BCD数之和,将和送显示器显示的程序。
stack segment stack 'stack'
dw 32 dup(0)
stack ends
data segment
DATA1 DB 09H,04H,03H,08H
DATA2 DB 08H,06H,05H,07H
SUM DB 5 DUP(0)
OUTBUF DB 6 DUP(0)
ARRAY DW 1234H,56H,0,0
data ends
code segment
begin proc far
assume ss:stack,cs:code,ds:data
push ds
sub ax,ax
push ax
mov ax,data
mov ds,ax
MOV AX, 0
MOV BX,0
AGAIN: MOV AL,O
ADD AL,AH
MOV AH,0
ADD AL, DATA1[BX]
ADC AH, 0
ADD AL, DATA2[BX]
ADC AH,0
MOV SUM[BX],AL
INC BX
CMP BX, 4
JB AGAIN
MOV SUM[BX], AH
MOV SI,0
AGAIN2:
MOV AL, SUM[BX]
ADD AL, 30H
MOV OUTBUF[SI],AL
DEC BX
INC SI
CMP SI,5
JB AGAIN2
MOV OUTBUF[SI],’$’
MOV DX,OFFSET OUTBUF
MOV AH,9
INT 21H
ret
begin endp
code ends
12.编写程序,将字节变量BVAR中的无符号二进制数(0~FFH)转换为BCD数,在屏幕上显示结果。
stack segment stack 'stack'
dw 32 dup(0)
stack ends
data segment
BVAR DB 0DFH
OUTBUF DB 4 DUP(0)
data ends
code segment
begin proc far
assume ss:stack,cs:code,ds:data
push ds
sub ax,ax
push ax
mov ax,data
mov ds,ax
MOV AL, BVAR
MOV SI,3
MOV OUTBUF[SI],’$’
MOV CL,10
AGAIN: MOV AH,0
DIV CL
ADD AH,30H
DEC SI
MOV OUTBUF[SI], AH
CMP AL,0
JNE AGAIN
LEA DX, OUTBUF[SI]
MOV AH,9
INT 21H
ret
begin endp
code ends一、写出下列程序段的中间结果和最后结果。
1.MOV AX, 0809H
MUL AH ;AX= 0048H
AAM ;AX= 0702H
2.MOV AX,0809H
MOV DL,5
AAD ;AX= 0059H
DIV DL ;AX= 0411H
MOV DL,AH
AAM ;AX= 0107H ,DL= 04H
3.MOV AX,0809H
ADD AL,AH
MOV AH,0 ;AX= 0011H
AAA ;AX= 0107H
4.MOV AX,0809H
MOV DL, 10
XCHG AH,DL
MUL AH ;AX= 005AH
AAM ;AX= 0900H
ADD AL, DL ;AX= 0908H
5.MOV AL, 98H
MOV AH,AL
MOV CL, 4
SHR AH,CL
AND AL, 0FH
AAD ;AL= 62 H
6.MOV CL,248
XOR AX,AX
MOV CH, 8
AG:SHL CL, 1
ADC AL, AL
DAA
ADC AH, AH
DEC CH
JNZ AG
结果:AX= 248 H
二、分别给出实现下列功能的完整汇编程序。
13.设平面上一点P的直角坐标为(X,Y),X和Y为字类型符号数,试编程实现:若P落在第i象限内,则令k=i;若P落在坐标轴上,则令k=0。
stack segment stack 'stack'
dw 32 dup(0)
stack ends
data segment
K DB 0
POINT DB -12, 89
data ends
code segment
begin proc far
assume ss:stack,cs:code,ds:data
push ds
sub ax,ax
push ax
mov ax,data
mov ds,ax
MOV CL, 0 ;记录坐标的象限,
MOV AL, POINT
MOV DL, POINT+2
CMP AL, 0
JZ XYZ
JS XS
CMP DL, 0
JZ XYZ
JS YS1
MOV CL, 1
JMP XYZ
YS1: MOV CL, 4
JMP XYZ
XS: CMP DL, 0
JZ XYZ
JS YS2
MOV CL, 2
JMP XYZ
YS2: MOV CL 3
XYZ: MOV K, CL
ret
begin endp
code ends
14.编程实现:将键盘输入的8位二进制数以十六进制数形式在显示器上显示出来。
stack segment stack 'stack'
dw 32 dup(0)
stack ends
data segment
INPUT DB 9, 0, 9 DUP(0)
OBUF DB 3 DUP(0)
data ends
code segment
begin proc far
assume ss:stack,cs:code,ds:data
push ds
sub ax,ax
push ax
mov ax,data
mov ds,ax
MOV DX, OFFSET INPUT
MOV AH,10
INT 21H 读入数据
MOV SI, 0
MOV CX, 8
MOV AL, 0
AG: SHL AL, 1
AND BYTE PTR [SI], 0FH
ADD AL, [SI]
DEC SI
LOOP AG ;实现二进制串转换为数据
MOV SI, OFFSET OBUF+2
MOV BYTE PTR[SI], ‘$’
MOV CL, 4
LOP : MOV AH, AL
AND AH, 0FH
ADD AH, 30H
CMP AH, 39H
JNA NEXT ;是否大于9
ADD AH, 7
NEXT: DEC SI
MOV [SI], AH
SHR AL, CL
AND AL, AL
JNZ LOP ;转换为对应的十六进制的ASCII码
MOV DX, SI
MOV AH,9
INT 21H
ret
begin endp
code ends
二、下列各数称为Fibonacci数:0,1,1,2,3,5,8,13,...,这些数之间的关系是:从第3项开始,每项都是前两项的之和,试编写显示第24项Fabonacci数(两字节)的程序。
stack segment stack 'stack'
dw 32 dup(0)
stack ends
data segment
OBUF DB 6 DUP(0)
data ends
code segment
begin proc far
assume ss:stack,cs:code,ds:data
push ds
sub ax,ax
push ax
mov ax,data
mov ds,ax
MOV AX, 0
MOV BX, 1
MOV CX, 22
AG: MOV DX, 0
ADD DX, AX
ADD DX, BX
MOV AX, BX
MOV BX, DX
LOOP AG ;AX存放第i-2项,BX存放第i-1项,DX存放第i项
MOV SI, OFFSET OBUF+5
MOV BYTE PTR[SI], ‘$’
MOV CX, 10
MOV AX, DX ;第24项在dx中
LOP : MOV DX, 0
DIV CX
DEC SI
ADD DL, 30H
MOV [SI], DL
AND AX, AX
JNZ LOP ;转换为对应的十进制的ASCII码
MOV DX, SI
MOV AH, 9
INT 21H
ret
begin endp
code ends
三、从键盘输入一字符串(字符数>1),然后在下一行以相反的次序显示出来(采用9号和10号系统功能调用)。
stack segment stack 'stack'
dw 32 dup(0)
stack ends
data segment
IBUF DB 255, 0, 255 DUP(0)
OBUF DB 255 DUP(0)
OBUF1 DB 0AH, 0DH, ‘
’
AG: MOV AL, [SI]
DEC DI
MOV OBUF[DI], AL
INC SI
LOOP AG ;实现字符串的逆向拷贝
MOV DX OFFSET OBUF1
MOV AH, 9
INT 21H
MOV DX, OFFSET OBUF
MOV AH, 9
INT 21H
ret
begin endp
code ends
1.什么是总线?微型计算机内常用的总线有几类?
答:总线是一种数据通道,系统各部件共享总线可同时挂接多个部件总线上任一部件发送的信息,系统内连接到总线上的部件均可收到,信息传输时,每次只能有一个发送部件可利用总线给一个接收部件发送信息。
总线分为:内部总线和CPU总线、局部总线、外部总线
2.简述8086/8088的最小组态和最大组态的区别。
答:最小组态→用8088微处理器构成一个较小系统,即所连的存储器容量不大,I/O端口也不多,此时系统的控制总线由8088直接提供.
最大组态→用8088构成一个较大系统时,系统的控制信号不能由CPU直接提供,而必须由总线控制器控制产生
最小组态,就是在系统中只有8086/8088一个微处理器;最大组态中,包含两个或多个微处理器,其中主处理器是8086/8088,其他处理器是协处理器(如数值运算处理器8087,输入/输出协处理器8089)。
3.RESET信号来到之后,8086/8088CPU的CS和IP分别等于多少?
答:高电平的RESET信号维持4个时钟周期以上时,CPU结束当前操作,复位信号RESET(高电平有效)cpu清零标志寄存器ip ds ss es以及指令队列,将cs置ffffh。因此当复位信号变为低电平时,cpu从ffff0h开始执行程序。
4.什么时指令周期、总线周期、机器周期和时钟周期?
答:指令周期→执行一条指令所需要的时间.8088中不同指令的指令周期是不等长的.最短2个时钟周期,最长200个时钟周期(如:16位乘除法指令)
总线周期→把指令周期划分为一个个总线周期.基本的总线周期有存储器读/写、I/O端口读/写和中断响应周期如,从存储器存取一个字节就是一个总线周期
机器周期:通常用从内存中读取一个指令字的最短时间来规定CPU周期(机器周期),也即CPU完成一个基本操作所需的时间。
时钟周期:一个时钟脉冲所需要的时间。在计算机组成原理中又叫T周期或节拍脉冲。是CPU和其他单片机的基本时间单位。对CPU来说,在一个时钟周期内,CPU仅完成一个最基本的动作。
5.存储器读周期和写周期的主要区别是什么?
答:读写周期:两次存储器读/写操作的最短时间间隔。存储周期:稍大于读写周期,(在读写周期的基础上加上必要的其他操作)。读周期或写周期:读写周期具体到或读或写。为了区分存储体内的存储单元,必须将它们逐一进行编号,称为地址。地址与存储单元之间一一对应,且是存储单元的唯一标志。应注意存储单元的地址和它里面存放的内容完全是两回事。存储器在计算机中处于不同的位置,可分为主存储器和辅助存储器。在主机内部,直接与CPU交换信息的存储器称主存储器或内存储器。
用2114(1k×4)、6116(2KB)和6264(8KB)分别组成容量为64k×8位的存储器,各需要多少芯片?地址需要多少位作为片内地址选择端?多少位地址作为芯片选择端?
16位地址,2114:片内10位字选,高6位作为片选
6116:片内11位,高5位
6264:片内13位,高3位
| |
| | [图片上传失败...(image-5e8e3c-1594039955154)]
| 用32片SARM 6116组成存储器,仅用74LS138译码器设计其译码电路。
16位,11位片内,高5位
A15A14 A13A12A11 xxx xxxx xxxx
用EPROM2764(8KB)和SRAM 6264(8KB)各一片组成存储器,其地址范围为FC000H~FFFFFH,试画出存储器与8088的连接图(限用74LS138)。
1111 1100 0000 0000 0000 0000
1111 1101 1111 1111 1111 1111
1111 1110 0000 0000 0000 0000
1111 1111 1111 1111 1111 1111
[图片上传失败...(image-fe7206-1594039955155)]
chabud微机原理与汇编第十五次作业
接口的传送控制方式有哪些?并分别进行介绍。
分别简述标准的I/O寻址方式和存储器映像I/O寻址方式。
试画出8个I/O端口地址260H~267H的译码电路(译码电路有8个输出端)。
10 0110 0000
10 0110 0111
[图片上传失败...(image-f746ef-1594039955155)]
已知中断向量表中,001C4H存放2200H,001C6H中存放3040H,则其中断类型码是 71 H,中断服务程序的逻辑地址和物理地址分别是3040 H:2200 H和 32600 H。