汇编语言与接口技术.docx
《汇编语言与接口技术.docx》由会员分享,可在线阅读,更多相关《汇编语言与接口技术.docx(27页珍藏版)》请在冰点文库上搜索。
汇编语言与接口技术
Studwt
ExueWaTlSludert
—BL」k*二《
J*eC-at
-ST
4CmVi甲A
nciudeindUM
制走覆世Isa补;«1工工实心■创•、wiiaaiTi-Mn
"-■>Jihbjdf:
"tMn、、7;
X\
r,
C4«皆0•
IUS*血匚■**UH禍”-科严产U**吕¥#巧1樺申,rpthT—It.旳4电BM'MiaA:
宀乎"//
//X
「•.用户茅谢验爭丿严;
■■■.
Regirfidr
习题一解答:
1.3
(1)
(2)
(3)
[0.0000]
[0.1001][-1001]
原=0.0000
原=0.1001
原=11001
[0.0000]
[0.1001]
[-1001]
反=0.0000
反=0.1001
反=10110
[0.0000]
[0.1001][-1001]
补=0.0000
补=0.1001
补=10111
1.4[N]
反=1.0101
补=1.0110N=-0.1010
1.5
(1)
原码运算:
[N]原=1.1010[N]
比较可知,正数较大,用正数减负数,结果为正
010101=[01010011]反+[-00110011]反=001010011
+[100110011]反=001010011+111001100=000100000
补码运算:
010101=[01010011]补+[-00110011]补=001010011
反码运算:
补=001010011+111001101=000100000
+[100110011]
原码运算:
比较可知,负数较大,用负数减正数,结果为负
反码运算:
0.100100-0.110010=0.100100+[1.110010]
1.001101=1.110001
反=0.100100+
补码运算:
0.100100-0.110010=0.100100+[1.110010]
1.001110=1.110010
补=0.100100+
1.6
(1)(11011011)2=(219)10=
(1)bcd
⑵(456)
10=(0)BCD
⑶(174)
8=(124)10=(0)BCD
⑷(2DA)
16=(730)10=(0)bcd
1.7
(1)9876H
(2)9876H
看成有符号数时,默认为负数的补码,转换为十进制数是:
-26506
看成无符号数时,转换为十进制数是:
39030
1.8
(1)98的压缩BCD码为:
10011000B
(2)98的非压缩BCD码为:
01000B
1.9
(1)[S1+S2]#=[S1]补+[S2]补=00010110+00100001=00110111,无溢出
[S1-S2]#=[S1]补+[-S2]补=00010110+11011111=11110101,无溢出
(2)[S1+S2]#=[S1]补+[S2]补=00010110+11011111=11110101,无溢出
[S1-S2]#=[S1]补+[-S2]补=00010110+00100001=00110111,无溢出
(3)[S1+S2]#=[S1]补+[S2]补=01100100+00011110=10000010,有溢出
[S1-S2]补=目1]补+[-S2]补=01100100+11100010=01000110,无溢出
(4)[S1+S2]#=[S1]补+[S2]补=10011100+11100010=01111110,有溢出
[S1-S2]#=[S1]补+[-S2]补=10011100+00011110=10111010,无溢出
习题二解答:
2.1答:
8086有哪些寄存器组?
各有什么用途?
1通用寄存器AXBXCXDX
它既可用作16位寄存器,又可将它拆成高、低8位,分别作为两个独立的8位寄存器
使用。
AX称累加器。
常用于存放算术逻辑运算中的操作数,所有I/O指令都使用累加器与
外设接口传送数据;BX称基址寄存器。
常用来存放访问存时的基地址或用作间接寻址时的地址寄存器。
CX称计数寄存器。
在循环和串操作指令中用作计数器,指令执行后CX寄存器
中的容会自动改变。
DX称数据寄存器。
在I/O指令中用来存放端口的地址,在乘除指令中用作辅助寄存器。
24个专用寄存器
SP堆栈指针寄存器。
它在堆栈中存放栈顶偏移指针,;BP基址指针寄存器。
一般也用来存放访问存时的基地址;SI源变址寄存器,DI目的变址寄存器。
它们常常用在变址寻址方
式中。
34个段寄存器
CS代码段寄存器。
存放当前程序所在段的段基址;DS数据段寄存器。
存放当前程序所
用数据段的段基址;SS堆栈段寄存器。
存放当前程序所用堆栈段的段基址,ES附加段寄存
器。
存放当前程序所用辅助数据段的段基址。
4指令指针寄存器IP
16位的指令指针寄存器IP用于存放下一条执行指令的偏移地址。
5标志寄存器FR
它是16位寄存器,但只使用其中的9位,这9位包括6个状态标志位和3个控制标志
位。
状态标志记录了前面算术逻辑运算结果的一些特征;控制标志是用户自己通过指令设置
的,设置后将对其后的操作产生控制作用。
2.2答:
8086流水线技术是利用8086部指令队列,使8086/8088的执行部件和总线接口部件并行工作。
其工作过程如下:
当8086的指令队列中有两个空字节,或者8088的指令队列
中有一个空字节,总线接口部件就自动执行一次指令周期,从存中取出后续的指令代码放入
队列中。
当执行部件需要数据时,总线接口部件根据执行部件给出的地址,从指定的存单元
或外设中取出数据供执行部件使用。
当运算结束时,总线接口部件将运算结果送入指定的存
单元或外设。
当指令队列空时,执行部件等待,直到有指令为止。
若总线接口部件正在取指
令,执行部件此时正好发出访问总线的请求,则必须等总线接口部件取指令完毕后,该请求
才能得到响应。
一般情况下,程序按顺序执行,但当遇到跳转指令时,总线接口部件就使指
令队列复位,从新地址取出指令,并立即传给执行部件去执行。
所以,8086流水线技术减少了CPU为取指令而等待的时间,提高了CPU的利用率,加
快了整机的运行速度,也降低了对存储器存取速度的要求。
2.3答:
为了尽可能使8086/8088CPU适应各种使用场合,8086/8088CPU通常有两种工作模式:
最大工作模式和最小工作模式。
最小工作模式,就是在系统中只有8086或者8088一个微处理器。
在这种系统中,所有的控制信号直接由8086或8088产生,因此,系统中的总线控制逻辑电路被减到最少。
最大工作模式,是相对最小工作模式而言。
在此工作模式系统中,一般包含两个或两个
以上微处理器,但是主处理器只有一个,其他的处理器均为协处理器,协助主处理器工作。
2.4答:
逻辑地址是由段基址和偏移地址两部分构成,通常由编程人员在指令中使用。
8086
系统中任何一个存储单元对应20位的物理地址,都是由逻辑地址转换得来的。
8086存储器中的物理地址是由部总线接口部件BIU――地址加法器产生。
由地址加法器
把16位段寄存器的容转换为20位物理地址,即段基址左移4位后,再加上有效偏移量地址。
物理地址=CSX4+IP=40000H+2200H=42200H
2.5答:
8086CPU为了能够对存储器进行字节和字的访问,在技术上将1M字节的存储器空间
分成两个512K字节(219)的存储体。
一个存储体中包含偶数地址,该存储体被称为偶存储体;
另一个存储体中包含奇数地址,该存储体被称为奇存储体,两个存储体之间采用交叉编址方式,然后通过Ao和BHE组合就可以确定对哪一组存储体进行访问,是对字节还是对字进行访问。
2.6答:
在存储器中,对要存放的字,其低位字节可以从奇数地址开始存放,也可以从偶数地址中开始存放;如果从奇数地址开始存放称为非规则存放,按非规则存放的字称为字不对
准存放。
从偶数地址中开始存放称为规则存放,按规则存放的字称为字对准存放。
使用字对准存放要在一个总线周期完成,用字不对准存放则需要两个总线周期才能完成。
所以为了加快程序运行速度,编程时应尽可能使用字对准存放。
习题三解答:
3.6答:
(1)MOVCX,BX
(2)MOVAX,1234H
(3)MOVAX,wordptr[20H]
(4)MOVbyteptr[BX],20H
3.7答:
(1)EA=3000H
(2)EA=1200H
(3)EA=3300H
(4)EA=4200H
(5)EA=4500H
3.8答:
(1)立即数寻址
(2)直接寻址
(3)寄存器间接寻址
(4)基址变址寻址
(5)相对基址变址寻址
3.9答:
(1)段间接寻址
(2)段间接寻址
(3)段间间接寻址
3.10答:
(1)直接寻址PA=10200H
(2)寄存间接寻址PA=10010H
(3)跨段寄存器间接寻址PA=15010H
(4)跨段寄存器间接寻址PA=20010H
(5)寄存器间接寻址PA=200A0H
(6)寄存器相对址寻址PA=0110H
(7)基址变址寻址PA=10110H
(8)相对基址变址寻址PA=10210H
(9)寄存器间接寻址PA=10100H
3.12答:
解:
(1)AX=0100H
(2)AX=1020H
(3)AX=1020H
(4)AX=5030H
(5)AX=2010H
(6)AX=2010H
(7)AX=1020H
3.13答:
(1)SI=0320H
(2)BP=1320H
(3)DI=0310H
(4)X=OFFFOH
3.15答:
(1)测试AL中1、3、5位是否均为“1”
(2)对32位数(高位在DX,低位在AX求补码
3.16答:
(1)XOR\L,2AH
(2)MOVBL,AL
NOTBL
TESTBL,2AH
JEL1
MOVAL,0
L1:
MOVAL,1
(3)MOVCL,4ROLAL,CLROLBL,CL
XCHG
AL,BL
(4)
PUSHF
POP
AX
(5)
PUSHF
POP
AX
AND
AX,OFEFFH
PUSH
AX
POPF
(6)
略
(7)
STD
MOV
AX,DS
MOV
ES,AX
MOV
SI,0163H
MOV
DI,01B3H
MOV
CX,100
REP
MOVSB
(8)
MOV
AL,A
IMUL
B
MOV
C,AL
MOV
C+1,AH
习题四解答:
4.4答:
01H
02H
03H
04H
31H
32H
33H
34H
0001H
0002H
0003H
0004H
00001234H
4.5答:
(1)STR1的偏移地址为:
100H
(2)NUM为10
(3)STR2+3的存储单元容为79H(即第四个字符’0'所对应的ASIC码)
4.6答:
分别为:
3CH,1EH0FH
4.9答:
(1)(AX)=1234H
⑵(AX)=5678H
⑶(AX)=5678H
4.10
答:
DATA
SEGMENT
ARRAY
EQUTHISWORD
ARRAY
DATA
DB100DUP(?
)
ENDS
4.11答:
(1)ARRAYDB12H,34H,56H,0ABH
(2)DARRAYDW1234H,5678H,0ABCDH
(3)BCDDW1234
(4)STRDB'STRING
(5)DATA1SEGMENT
DB12H,34H,'A,'B','C'
DW1234H,5678H,0ABCDH
DB5DUP(?
)
DATA1ENDS
4.14答:
(1)LEABX,DATA1
(2)MOVCL,BYTEPTR[DAT2+2]
(3)MOVBYTEPTR[BUF1+9],11H
(4)LEN1=13,LEN2=7
(5)MOVCX,DAT2-DAT1
lEASI,DAT1
LEADI,BUF2
MOVAX,DS
MOVES,AX
CLD
REPMOVSB
4.15答:
LEASI,STR
MOVDH,[SI]
MOVDL,[SI+6]
MOVDH,STR
MOVDL,STR+7
习题五解答:
5.7答:
(1)将一字节数据和其补码逻辑乘;
(2)AL的容为:
89H,NUI的容为:
10H。
5.8答:
(1)求DAT的平方,并将结果放到DAT+1中。
(2)DAT+1的容为51H
5.9答:
(1)将DAT第0、2位清0,1、3、7位置1;
(2)程序执行后DAT的容为DAH
5.12答:
(1)对BU啲容清0,遇到BUFF容为OFF则停止清0。
(2)求BUF中的前10个数,结果放到A冲。
(3)求DAT中的前10个数,结果放入BUF
(4)从BLOC开始的100个字节查找第一个和KEYf等的元素,找到就将结果放到ADDR中,否则DI置0。
5.13答:
判断DA■如果为0,则将AL放到RES^;如果为正,将DAT勺值加1,如果为负,将DAT勺值减1,放到RESK
5.14答:
(1)求0到9的和,结果放到预留的空间RE种
(2)将AX置0
(3)求1到99的和结果放到AX中。
(4)求两个相邻数的积,结果与前面的数相加一起保存到DX中。
(5)AX的值顺序逻辑右移,每次移一位,,同时将BX的值加1,直到AX的值为0。
5.17答:
DATASEGMENT
DATDW6DUP⑺
XDW100
YDW200
ZDW150
DATAENDS
STACKSEGMENTSTACK
DW200DUP(0)
STACKENDS
CODESEGMENT
ASSUMECSCODEDS:
DATASS:
STACKSTARTMOVAX,DATA
MOVDS,AX
MOVAX,X
MOVBX,Y
ADDAX,BX
MOVBX,Z
SUBAX,BX
MOVDAT+6,AX
MOVAH4CH
INT21H
CODEENDS
ENDSTART
5.20答:
DATASEGMENT
DAT1DB?
DAT2DB?
DAT3DB?
DATAENDS
STACKSEGMENTSTACK
DB200DUP⑺
STACKENDS
CODESEGMENT
ASSUMEDS:
DATA,CS:
CODE,SS:
STACK
START:
MOVAX,DATA
MOVDS,AX
MOVAL,7BH
MOVBL,AL
ANDBL,07H
MOVDAT1,BL
MOVCL,3
SHRAL,CL
MOVBL,AL
ANDBL,07H
MOVDAT2,BL
MOVCL,2
SHRAL,CL
MOVDAT3,AL
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
5.21答:
DATASEGMENT
DAT1DW'A>B
DAT2DW'A
ADB200
BDB100
DATAENDS
STACKSEGMENTSTACK
DB100DUP(0)
STACKENDS
CODESEGMENT
ASSUMEDS:
DATA,SS:
STACK,CS:
CODE
START:
MOVAX,DATA
MOVDS,AX
MOVAX,A
MOVBX,B
CMPAX,BX
JBNEXT
MOVDX,DAT2
MOVAH,9
INT21H
NEXT:
MOVDX,DAT1
MOVAH,9
INT21H
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
5.26答:
DATASEGMENT
NUMBER1,2,3,4,5
TABLERA,B,C,D,E
DATAENDS
STACKSEGMENTSTACK
DB100DUP(?
)
STACKENDS
CODESEGMENT
ASSUMEDS:
DATACS:
CODESS:
STACK
STARTMOVBL,NUMBER
XORBH,BH
SHLBX,1
JUMTABLE[BX]
A:
MOVDL,'1'
JMPDISPLAY
B:
MOVDL,'2'
JMPDISPLAY
C:
MOVDL,'3'
JMPDISPLAY
D:
MOVDL,'4'
JMPDISPLAY
E:
MOVDL,'5'
JMPDISPLAY
DISPLAYMOVAH,2
INT21H
MOVAH4CH
INT21H
CODEENDS
ENDSTART
习题六解答:
6.9答:
Movemacroto,from,n
Leasi,from
Leadi,to
Movcx,n
Repmovsb
endm
6.10答:
Clrbmacron,cfil
Movcx,n
Moval,''
Leadl,cfil
Repstosbendm
6.11答:
Str=”String”
Rept10
Dbstr
endm
6.12答:
Movemacrox
Ifidn,<555>
Movterminal,0
Else
Movterminal,1Endif
Endm
6.13答:
Moval,divd
Ifesign
Movah,0
Divscale
Else
Cbw
Idivscale
Endif
Movresult,al
习题七解答:
7.1答:
ARM处理器有7个基本工作模式:
1)用户模式(User):
非特权模式,正常程序执行的模式,大部分任务执行在这种模式下;
2)快速中断模式(FIQ):
当一个高优先级(fast)中断产生时将会进入这种模式,用于高
速数据传输和通道处理;
3)外部中断模式(IRQ):
当一个低优先级(normal)中断产生时将会进入这种模式,用于
通常的中断处理;
4)管理模式(Supervisor):
当复位或软中断指令执行时将会进入这种模式,是一种供操作系统使用的一种保护模式;
5)数据访问中止模式(Abort):
当数据或指令存取异常时将会进入这种模式,用于虚拟存储及存储保护;
6)未定义模式(Undef):
当执行未定义指令时会进入这种模式,可用于支持硬件协处理器的软件仿真;
7)系统模式(System):
使用和User模式相同寄存器集的特权模式,但是运行的是特权
级的操作系统任务。
ARMh理器工作状态:
1)ARM犬态:
处理器执行32位的字对齐的ARM!
令;
当操作数寄存器的状态位(位0)为1时,可以采用执行BXt令的方法,使微处理器从ARM状态切换到Thumb犬态。
此外,当处理器处于Thumb犬态时发生异常(如IRQ、FIQ、Undef、Abort、SW等),则异常处理返回时,自动切换到Thumb犬态。
2)Thumb状态:
处理器执行16位的半字对齐的Thumb!
令。
当操作数寄存器的状态位为0时,执行BX旨令时可以使微处理器从Thumb犬态切换到ARM状态。
此外,在处理器进行异常处理时,把PC旨针放入异常模式寄存器中,并从异常向量地
址开始执行程序,也可以使处理器切换到ARM犬态。
ARM旨令集和Thumb旨令集各有其优点,
若对系统的性能有较高要求,应使用32位的存储系统和ARM旨令集,若对系统的成本及功耗
有较高要求,则应使用16位的存储系统和Thumb指令集。
当然,若两者结合使用,充分发挥其各自的优点,会取得更好的效果。
7.2答:
ARM7TD后缀TDMI的含义如下:
M表示嵌硬件乘法器(Multiplier);
T:
表示支持Thumb指令集;
I:
表示支持片上断点和调试点;D:
表示支持片上调试(Debug)。
7.3答:
ARh处理器将存储器看做是一个从0开始的线性递增的字节集合,指令和数据共用一条32位
总线。
7.4答:
当控制位I置位时,IRQ中断被禁止,否则允许IRQ中断使能;当控制位F置位时,FIQ中断被禁止,否则允许FIQ中断使能。
习题八解答:
8.1答:
ARM异常中断
异常中断名称
含义
复位(Reset)
当处理器复位引脚有效时,系统产生复位,程序跳转到复位异常中断处理程序处执行,复位异常中断的优先级是最高优先级的中断。
通常复位产生有下面几种情况:
系统加电时、系统复位时、各种不同的AR
处理器的复位有一些区别的,具体的参见后面的实例中的描述
未定义的指令
Undefined
nstruction
当ARM处理器或者系统中的协处理器认为当前指令未定义时,产生该中断,可以通过该异常中断仿真浮点向量运算
软件中断Software
InterruptSWI
这是由用户定义的中断指令,可用于用户模式下的程序调用特权操作指令
数据访问中止
DataAbort
数据访冋指令的目标地址不存在,或者该地址不允许当前指令访冋,处理器产生数据访问中止异常中断
外部中断请求
IRQ
当处理器的外部中断请求引脚有效,或者CPSR寄存器的1控制位被清除时,处理器产生外部中断请求,应用中对于IRQ的中断处理是比较关键的技术
快速中断请求
FIQ
当处理器的外部中断请求引脚有效,或者CPSR寄存器的F控制位被清楚时,处理器产生外部中断请求
8.2答:
.section.rodata
.align3
丄CO:
.ascii"%d\000"
.align3
丄C1:
.ascii"%c\000"
.align3
丄C2:
.ascii"%s\000"
.text
.align2
.globalmain
.typemain,%function
main:
movip,sp
stmfdsp!
{fp,ip,lr,pc}
subfp,ip,#4
subsp,sp,#16
ldrrO,.L2
Idrr1,[fp,#-16]
blprintf
Idrbr3,[fp,#-17]zero_extendqisi2
Idrr0,.L2+4