微机原理第3章习题与答案解析
- 格式:doc
- 大小:61.50 KB
- 文档页数:9
《微机原理与接口技术》第3章作业答案1. 简要分析8086的指令格式由哪些部分组成,什么是操作码?什么是操作数?寻址和寻址方式的含义是什么?8086指令系统有哪些寻址方式?【解答】8086的指令格式由操作码和操作数字段组成。
操作码:要完成的操作。
操作数:参与操作的对象。
寻址:寻找操作数或操作数地址的过程。
寻址方式:指令中给出的找到操作数或操作数地址采用的方式。
8086指令系统的寻址方式主要有立即数寻址、寄存器寻址、存储器寻址和I/O端口寻址。
其中,存储器寻址可进一步分为直接寻址、寄存器间接寻址、寄存器相对寻址、基址变址寻址、相对基址变址寻址;I/O 端口指令IN和OUT使用的端口寻址方式有直接寻址和间接寻址。
2. 设(DS)=2000H,(ES)= 2100H,(SS)= 1500H,(SI)= 00A0H,(BX)= 0100H,(BP)= 0010H,数据变量V AL 的偏移地址为0050H,请指出下列指令的源操作数字段是什么寻址方式?它的物理地址是多少?(1) MOV AX,21H (2) MOV AX,BX (3) MOV AX,[1000H](4) MOV AX,V AL (5) MOV AX,[BX] (6) MOV AX,ES:[BX](7) MOV AX,[BP] (8) MOV AX,[SI] (9) MOV AX,[BX+10](10) MOV AX,V AL[BX] (11) MOV AX,[BX][SI] (12) MOV AX,V AL[BX][SI]【解答】(1) MOV AX,21H立即寻址,源操作数直接放在指令中(2) MOV AX,BX寄存器寻址,源操作数放在寄存器BX中(3) MOV AX,[1000H]直接寻址,EA = 1000H,PA =(DS)×10H+EA = 2000H×10H+1000H = 21000H(4) MOV AX,V AL直接寻址,EA = [V AL] = 0050H,PA =(DS)×10H+EA = 2000H×10H+0050H = 20050H(5) MOV AX,[BX]寄存器间接寻址,EA =(BX)= 0100H,PA =(DS)×10H+EA = 2000H×10H+0100H = 20100H(6) MOV AX,ES:[BX]寄存器间接寻址,EA =(BX)= 0100H,PA =(ES)×10H+EA = 2100H×10H+0100H = 21100H(7) MOV AX,[BP]寄存器间接寻址,EA =(BP)= 0010H,PA =(SS)×10H+EA = 1500H×10H+0010H = 15010H(8) MOV AX,[SI]寄存器间接寻址,EA =(SI)= 00A0H,PA =(DS)×10H+EA = 2000H×10H+00A0H = 200A0H(9) MOV AX,[BX+10]寄存器相对寻址,EA =(BX)+10D = 0100H+000AH= 010AH,PA =(DS)×10H+EA = 2000H×10H+010AH = 2010AH(10)MOV AX,V AL[BX]寄存器相对寻址,EA =(BX)+[V AL]= 0100H+0050H= 0150H,PA =(DS)×10H+EA = 2000H×10H+0150H = 20150H(11)MOV AX,[BX][SI]基址变址寻址,EA = (BX)+(SI)= 0100H+00A0H = 01A0H,PA = (DS)×10H+EA = 2000H×10H +01A0H = 201A0H(12)MOV AX,V AL[BX][SI]基址变址相对寻址,EA = (BX)+(SI)+[V AL]= 0100H+00A0H+0050H = 01F0H,PA =(DS)×10H +EA = 2000H×10H+01F0H = 201F0H3. 给定寄存器及存储单元的内容为:(DS) = 2000H,(BX) = 0100H,(SI) = 0002H,(20100) = 32H,(20101) = 51H,(20102) = 26H,(20103) = 83H,(21200) = 1AH,(21201) = B6H,(21202) = D1H,(21203) = 29H。
第3章指令系统习题解答1. 若DS=3000H,BP=2000H,SI=1000H,[32000H]=00H,[32001H]=40H,SS=3000H,[31000H]=20H,[31001H]=60H,[33000H]=50H,[33001H]=60H,说明下列各条指令执行后,AX中的内容是什么?并说明各条指令中源操作数的寻址方式。
(1) MOV AX,DS (2) MOV AX,[2000H](3) MOV AX,[SI] (4) MOV AX,[BP](5) MOV AX,[BP+SI]【解】(1)AX=3000H 寄存器寻址(2)AX=4000H 直接寻址(3)AX=6020H 寄存器间接寻址(4)AX=4000H 寄存器间接寻址(5)AX=6020H 基址加变址寻址2. 指出下列指令中的非法指令。
(1) MOV BX,AL (2) MOV CS,2000H(3) PUSH 4567H (4) XCHG VAR1,VAR2(5) ADD AL,148H (6) MOV DS,2000H(7) MOV BH,SI (8) SUB 38H,AL【解】非法指令:(1) MOV BX,AL BX和AL的长度不一致(2) MOV CS,2000H CS段寄存器不能作目的操作数(3) PUSH 4567H 只能将寄存器或存储单元的内容压入堆栈,不能是立即数(4) XCHG VAR1,V AR2 两个存储单元之间不能直接交换数据(5) ADD AL,148H 运算溢出(6) MOV DS,2000H 立即数不能直接传送给DS段寄存器(7) MOV BH,SI BH和SI的长度不一致(8) SUB 38H,AL 目的操作数不能是立即数3. 若SP=2000H,AX=3355H,BX=4466H,试指出下列指令或程序段执行后有关寄存器的内容。
(1) PUSH AX执行后AX=?,SP=?(2) PUSH AXPUSH BXPOP DXPOP CX执行后AX=?,CX=?,DX=?,SP=?【解】(1) 执行后AX=3355H,SP=1FFEH(2) 执行后AX=3355H,CX=3355H,DX=4466H,SP=2000H4. 请按下面的要求写出相应的汇编指令或指令序列。
3.1已知DS=091DH,SS=1E4AH,AX=1234H,BX=0024H,CX=5678H,BP=0024H,SI=0012H,DI=0032H,(09226H)=00F6H,(09228H)=1E40H , (1E4F6H)=091DH。
在以上给出的环境下,试问下列指令段之行后的结果如何?(1)MOV CL,[BX+20H][SI];物理地址=DS*10H+BX+SI+20H=091D0H+0024H+0012H+0020H=09226H(09226H)=00F6H,(09226H)=F6H, (09227H)=00H执行后:CL=F6H(2)MOV [BP][DI], CX物理地址=SS*10H+BP+DI=1E4A0H +0024H+0032H=1E4F6HCX=5678H 执行后:(1E4F6H) = 5678H(3)LEA BX, [BX+20H][SI];BX=BX+20H+SI=0056HMOV AX, [BX+2];物理地址=DS*10H+BX+2=091D0H +0058H=09228H(09228H)=1E40H 执行后:AX=1E40H(4)LDS SI, [BX][DI];物理地址=DS*10H+BX+DI=091D0H +0056H=09226H(09226H)=00F6H (09228H)=1E40H执行后:BX=(09226H)=00F6HDS=(09228H)=1E40HMOV [SI],BX物理地址=DS*10H+SI =1E400H +0012H=1E412HBX=0024H,执行后:(1E412H)=0024H(5)XCHG CX,[BX+32H]物理地址=DS*10H+BX+32H =091D0H +0056H =09226H(09226H)=00F6H , CX=5678H执行后:(09226H)=5678H , CX=00F6HXCHG [BX+20H][SI], AX物理地址=DS*10H+BX+20H+SI =091D0H +0056H =09226H(09226H)=5678H , AX=1234H执行后: (09226H)=1234H , CX=5678H3.2设DS=1000H,SS=2000H,AX=1A2BH,BX=1200H,CX=339AH,BP=1200H,SP=1350H,SI=1354H,(11350H)=0A5H,(11351H)=3CH,(11352H)=0FFH,(11353H)=26H,(11354H)=52H,(11355H)=0E7H,(126A4H)=9DH,(126A5H)=16H,(21350H)=88H,(21351H)=51H。
习题1.指出下列指令中操作数的寻址方式(1) MOV BX, 20H (2) MOV AX, [1245H](3) MOV DX, [SI] (4) MOV 100[BX], AL(5) MOV [BP][SI], AX (6) MOV [BX+100][SI], AX(7) MOV [1800H], AL (8) MOV [SI], AX答:源操作数目的操作数1 立即寻址寄存器寻址2 直接寻址寄存器寻址3 寄存器间接寻址寄存器寻址4 寄存器寻址寄存器相对寻址5 寄存器寻址基址加变址寻址6 寄存器寻址相对基址加变址寻址7 寄存器寻址直接寻址8 寄存器寻址寄存器间接寻址2. 判断下列操作数寻址方式的正确性,对正确的指出其寻址方式,错误的说明其错误原因:(1) [AX] (2) [SI+DI](3) BP (4) BH(5) DS (6) [BL+44](7) [BX+BP+32] (8) [DX](9) [CX+90] (10) [BX*4](11) BX+90H (12) SI[100H]答:(1) 错误,AX不能用于访问内存单元(2) 错误,两个变址寄存器SI和DI不能同时用于内存单元的有效地址(3) 正确,寄存器寻址方式(4) 正确,寄存器寻址方式(5) 正确,寄存器寻址方式(6) 错误,寄存器BL不能用于表示内存单元的有效地址(7) 错误,BX和BP都是基址寄存器,不能同时用于内存单元的有效地址(8) 错误,DX不能用于表示内存单元的有效地址(9) 错误,CX不能用于表示内存单元的有效地址(10)错误,16位寄存器不能乘以比例因子(11) 错误,没有这样的寻址方式(12) 错误,书写方式不对,应该写成100H[SI]3. 已知DS=2000H,ES=1000H,SS=1010H,SI=1100H,BX=0500H,BP=0200H,请指出下列源操作数字段是什么寻址方式?源操作数字段的物理地址是多少?(1) MOV AL, [2500H](2) MOV AX, [BP](3) MOV AX, ES:[BP+10](4) MOV AL, [BX+SI+20]答:(1)源操作数属于直接寻址,物理地址=DS⨯16+2500H=20000H+2500H=22500H;(2)源操作数属于寄存器间接寻址,物理地址=SS⨯16+(BP)=10100H+0200H=10300H(3)源操作数属于寄存器相对寻址,物理地址=ES⨯16+(BP)+100=10000H+0200H+0AH=1020AH(4)源操作数属于基址加变址寻址,物理地址=DS⨯16+(BX)+(SI)+20=20000H+0500H+1100H+14H=21614H4. 判断下列指令的对错,如果错误请说明原因。
一、选择题1、CPU执行算术运算指令不会影响的标志为是_D__。
A.溢出标志 B.符号标志C.零标志 D.方向标志2、TEST指令和__A__指令执行同样的操作,但不送回操作结果,仅影响标志位。
A.AND B.ORC.NOT D.XOR3、下列指令中,影响标志位的指令是__D____。
A.从寄存器取数指令 B.条件转移指令C.压栈指令 D.循环移位指令4、执行指令INC AX后,不受影响的标志为__B___。
A.ZF B.CF C.SF D.OF5、当无符号数运算产生溢出时,__D__标志位为1.A.SF B.ZF C.CF D.OF6、若用户堆栈位于存储区10000H-1FFFFH,则该堆栈的段地址是___D____。
A.10000H B.1FFFFH C.1000H D.0FFFFH7、使用直接寻址方式时,操作数总是在 C 中。
A.通用寄存器B. 堆栈C. 主存单元D. 段寄存器8、指令MOV AX,[BP+SI]指令源操作数的段地址是 C 。
A. CSB. DSC. SSD. ES9、假定(AX)=96H,(BX)=65H,依此执行ADD AX,BX指令和DAA指令后,(AL)=___C_。
A.0FBH B.01H C.61H D.0BH10、设AX=C544H,在执行指令ADD AH,AL后, C 。
A. CF=0,OF=0B. CF=0,OF=1C.CF=1,OF=0D. CF=1,OF=111、由379AH得到FFFFH,可采用的逻辑运算是 D 。
A.与 B.或C.求反 D.或、异或二、填空题1.若物理地址为2D0H,偏移量为0B0H,则段地址为___22H_____。
2.8086指令系统中有_逻辑_移位和_算术_移位两类,其中__SHL__和SAL两条指令属于不同的移位指令,但其功能完全相同。
3.串操作指令规定目的操作数使用___DI___寄存器,目的串必须在__附加_段中。
4.在8086中进行寄存器间接寻址时,可采用的寄存器有____BX____、_BP_____、__SI______和__DI______。
微机原理作业第三章汇编语言程序设计题3.1A在下列程序运行后,给相应的寄存器及存储单元填入运行的结果:MOV AL,10HMOV CX,1000HMOV BX,2000HMOV [CX],AL BH XCHG CX,BXMOV DH,[BX] CLMOV DL,01HXCHG CX,BX CLMOV [BX],DLHLT DL AL=1OHBL=OOHBH=2OHCL=OOHCH=1OHDH=1OH(10O0H)=lOH(200OH)=0lH题 3.1B DL要求同题3.1A程序如下;MOV AL,50H ALMOV BP,1000HMOV BX,2000HMOV [BP],ALMOV DH,20HMOV [BX],DHMOV DL,01HMOV DL,[BX]MOV CX,3000HHLTAL=5OHBL=OOHBH=20HCL=OOHCH=30HDL=20HDH=2OHBP=100OH(10OOH)=5OH(20OOH)=20H题3.2,如在自1000H单元开始有一个100个数的数椐块。
要把它传送到自2000H开始的存储区中去,用以下三种方法,分别编制程序;1;不用数据块转送指令;2;用单个转送的数据块转送指令;3;用数据块成组转送指令;(1) LEA SI, 1OOOHLEA DI, 200OHMOV CX, 100L1: MOV AX, [SI]MOV[DI],AXLOOPLlHLT(2) LEASI,100OHLEADI,2000HMOVCX,100CLDL1: MOVSBLOOP L1HLT(3) LEASI, 100OHLEADI, 200OHMOVCX, 100CLDREP MOVSBHLT题3.3A 利用变址寄存器遍一个程序,把自1000H单元内开始的100个数转送到自1070H开始的存储区中去,LEASI,100OHLEADI,1070HMOVCX,100CLDREP MOVSBHLT题3.3B 要求用3.3A,源地址为2050H,目的地址为2000H,数据块长度为50,LEASI,205OHLEADI,200OHMOVCX,50CLDREPMOVSBHLT题3.4 编一个程序,把自1000H单元开始的100个数转送至1050H开始的存储区中(注意数据区有重叠)。
习题1.指出下列指令中操作数的寻址方式(1) MOV BX, 20H (2) MOV AX, [1245H](3) MOV DX, [SI] (4) MOV 100[BX], AL(5) MOV [BP][SI], AX (6) MOV [BX+100][SI], AX(7) MOV [1800H], AL (8) MOV [SI], AX答:源操作数目的操作数1 立即寻址寄存器寻址2 直接寻址寄存器寻址3 寄存器间接寻址寄存器寻址4 寄存器寻址寄存器相对寻址5 寄存器寻址基址加变址寻址6 寄存器寻址相对基址加变址寻址7 寄存器寻址直接寻址8 寄存器寻址寄存器间接寻址2. 判断下列操作数寻址方式的正确性,对正确的指出其寻址方式,错误的说明其错误原因:(1) [AX] (2) [SI+DI](3) BP (4) BH(5) DS (6) [BL+44](7) [BX+BP+32] (8) [DX](9) [CX+90] (10) [BX*4](11) BX+90H (12) SI[100H]答:(1) 错误,AX不能用于访问内存单元(2) 错误,两个变址寄存器SI和DI不能同时用于内存单元的有效地址(3) 正确,寄存器寻址方式(4) 正确,寄存器寻址方式(5) 正确,寄存器寻址方式(6) 错误,寄存器BL不能用于表示内存单元的有效地址(7) 错误,BX和BP都是基址寄存器,不能同时用于内存单元的有效地址(8) 错误,DX不能用于表示内存单元的有效地址(9) 错误,CX不能用于表示内存单元的有效地址(10)错误,16位寄存器不能乘以比例因子(11) 错误,没有这样的寻址方式(12) 错误,书写方式不对,应该写成100H[SI]3. 已知DS=2000H,ES=1000H,SS=1010H,SI=1100H,BX=0500H,BP=0200H,请指出下列源操作数字段是什么寻址方式?源操作数字段的物理地址是多少?(1) MOV AL, [2500H](2) MOV AX, [BP](3) MOV AX, ES:[BP+10](4) MOV AL, [BX+SI+20]答:(1)源操作数属于直接寻址,物理地址=DS⨯16+2500H=20000H+2500H=22500H;(2)源操作数属于寄存器间接寻址,物理地址=SS⨯16+(BP)=10100H+0200H=10300H(3)源操作数属于寄存器相对寻址,物理地址=ES⨯16+(BP)+100=10000H+0200H+0AH=1020AH(4)源操作数属于基址加变址寻址,物理地址=DS⨯16+(BX)+(SI)+20=20000H+0500H+1100H+14H=21614H4. 判断下列指令的对错,如果错误请说明原因。
第三章作业1答案思考题:1、简述80C51的指令寻址方式。
答:80C51的指令寻址方式有:寄存器寻址、立即寻址、寄存器间址、直接寻址、变址寻址、相对寻址、位寻址2、访问特殊功能寄存器SFR,可使用哪些寻址方式?答SFR只能直接寻址3、若访问外部RAM单元,可使用哪些寻址方式?答:外间RAM单元,只能通过MOVX指令进行寄存器间接寻址。
4、若访问内部RAM单元,可使用哪些寻址方式?答:片内RAM低128字节,可直接寻址、寄存器间接寻址。
(只能使用R0, R1作为间址寄存器。
片内RAM20~2FH单元,可以位寻址。
5、MOV、MOVC、MOVX指令有什么区别?分别用于哪些场合?答:MOV指令用于对内部RAM的访问。
MOVC指令用于对程序存储器的访问,从程序存储器中读取数据(如表格、常数等)。
MOVX指令采用间接寻址方式访问外部数据存储器,有Ri和DPTR两种间接寻址方式。
执行MOVX 指令时,在P3.7引脚上输出RD有效信号,或在P3.6 引脚上输出WR有效信号,可以用做外部数据存储器或I/O的读/写选通信号,与单片机扩展电路有关。
作业:1.给下段汇编语句加注释,汇编成机器语言,并说明该段程序的作用ORG 0000H 机器码MOV SP,#5FH ;栈顶指针指向内部RAM5FH单元C:0X0000 75815FMOV R7,#08H ;R7<- 08H,R7为计数器0X0003 7F08MOV R0,#3FH ;R0指向内部RAM3FH单元0X0005 783FCLOOP: POP ACC ; ACC<- (SP), SP<- SP-1 0X0007 D0E0 MOV @R0,A;把A中内容送入R0指向的单元(3FH)0X0009 F6DEC R0 ;R0<- R0-1 0X000A 18DJNZ R7,CLOOP ;R7<-R7-1 ,R7不为0跳转0X000B DFFASJMP $ ;原地踏步0X000D 80FE程序段作用:把内部RAM中58H-5FH单元的内容依次存入从38H-3FH的八个单元2.阅读下列程序,分析其功能。
3.1给定(BX)=637DH,(SI)=2A9BH,位移量D=7237H,试确定在以下各种寻址方式下的有效地址是什么?(1) 立即寻址(2) 直接寻址(3) 使用BX的寄存器寻址(4) 使用BX的简接寻址(5) 使用BX的寄存器相对寻址(6) 基址变址寻址(7) 相对基址变址寻址答:(1) 操作数在指令中,即立即数;(2) EA=D=7237H;(3) 无EA,操作数为(BX)=637DH;(4) EA=(BX)=637DH;(5) EA=(BX)+D=0D5B4H;(6) EA=(BX)+(SI)=8E18H;(7) EA=(BX)+(SI)+D=1004FH;超过了段的边界,最高进位位丢失,因此EA=004FH。
3.2试根据以下要求写出相应的汇编语言指令(1) 把BX寄存器和DX寄存器的内容相加,结果存入DX寄存器中。
(2) 用寄存器BX和SI的基址变址寻址方式把存储器中的一个字节与AL寄存器的内容相加,并把结果送到AL寄存器中。
(3) 用寄存器BX和位移量0B2H的寄存器相对寻址方式把存储器中的一个字和(CX)相加,并把结果送回存储器中。
(4) 用位移量为0524H的直接寻址方式把存储器中的一个字与数2A59H相加,并把结果送回存储单元中。
(5) 把数0B5H与(AL)相加,并把结果送回AL中。
答:(1) ADD DX, BX(2) ADD AL, [BX][SI](3) ADD [BX+0B2H], CX(4) ADD WORD PTR [0524H], 2A59H(5) ADD AL, 0B5H3.3写出把首地址为BLOCK的字数组的第6个字送到DX寄存器的指令。
要求使用以下几种寻址方式:(1) 寄存器间接寻址(2) 寄存器相对寻址(3) 基址变址寻址答:(1) MOV BX, OFFSET BLOCK ADD BX, (6–1)*2MOV DX, [BX](2) MOV BX, OFFSET BLOCKMOV DX, [BX+(6–1)*2]BLOCK[BX](3) MOV BX, OFFSET BLOCKMOV SI, (6–1)*2MOV DX, [BX][SI]3.4现有(DS)=2000H,(BX)=0100H,(SI)=0002H,(20100H)=12H,(20101H)=34H,(20102H)=56H,(20103H)=78H,(21200H)=2AH,(21201H)=4CH,(21202H)=B7H,(21203H)=65H,试说明下列各条指令执行完后AX寄存器的内容。
习题31.假定(DS)=2000H,(ES)=2100H,(SS)=1500H,(SI)=00A0H,(BX)=0100H,(BP)=0010H,数据变量V AL的偏移地址为0050H,请指出下列指令原操作数是什么寻址方式,其物理地址是多少?(1)MOV AX, 0ABH (2) MOV AX, [100H](3) MOV AX, V AL (4) MOV BX, [SI](5) MOV AL, V AL[BX] (6) MOV CL, [BX][SI](7) MOV V AL[SI], BX (8) MOV [BP][SI], 100答:(1) 立即数寻址,无物理地址(2) 直接寻址,物理地址=2000H×10H+100H=20100H(3) 直接寻址,物理地址=2000H×10H+0050H=20050H(4) 寄存器间接寻址,物理地址=2000H×10H+00A0=200A0H(5) 相对寄存器寻址,物理地址=2000H×10H+(0050+0100H)=20150H(6) 基址加变寻址,物理地址=2000H×10H+(0100H+00A0H)=201A0H(7) 寄存器寻址,无物理地址(8) 立即数寻址,无物理地址2.已知(SS)=0FFA0H,(SP)=00B0H,先执行两条把8057H和0F79H分别进栈的PUSH指令,再执行一条POP指令,试画出堆栈区和SP内容变化的过程示意图。
答:“8057H”进栈,则SP自动从00B0H指向00B2H,“0F79H”进栈,则SP 自动从00B2H指向00B4H;执行一条POP指令,“0F79H”被弹出栈,SP从00B4H 指向00B2H。
图略。
3.设有关寄存器及存储单元的内容如下:(DS)=2000H, (BX)=0100H, (AX)=1200H, (SI)=0002H, (20100H)=12H, (20101H)=34H, (20102H)=56H, (20103H)=78H, (21200H)=2AH, (21201H)=4CH, (21202H)=0B7H, (21203H)=65H.试说明下列各条指令单独执行后相关寄存器或存储单元的内容。
8086第三章作业3-11在实模式下,若段寄存器中装入如下数值,试写出每个段的起始地址和结束地址(1)1000H 10000H-1FFFFH(2)1234H 12340H-2233FH(3)E000H E0000H-EFFFFH(4)AB00H AB000H-BAFFFH3-12对于下列CS:IP组合,计算出要执行的下条指令存储器地址。
(1)CS=1000H和IP=2000H 答:下条指令存储器地址:12000H(2)CS=2400H和IP=1A00H 答:下条指令存储器地址:25A00H(3)CS=1A00H和IP=B000H 答:下条指令存储器地址:25000H(4)CS=3456H和IP=ABCDH 答:下条指令存储器地址:3F12DH3-37 指出下列指令源操作数的寻址方式(1)MOV AX,1200H;立即数寻址(2)MOV BX,[1200H];直接寻址(3)MOV BX,[SI];变址寻址(4)MOV BX,[BX+SI+1200];相对基变址寻址(5)MOV [BX+SI],AL;寄存器寻址(6)ADD AX,[BX+DI+20H];相对基变址寻址(7)MUL BL ;寄存器寻址(8)JMP BX ;间接寻址(9)IN AL,DX ;寄存器间接寻址(10)INC WORD PTR[BP+50H] ;相对基址寻址小结:虽然对存储器的访问指令、输入/输出指令(IN指令和OUT指令)、跳转指令(JMP指令)都有直接寻址和间接寻址,但是形式是有很大差别的:1.直接寻址:(1)对于存储器的访问用方括号括起来的二进制数,如:MOV BX,[1200H](2)对于输入/输出指令(IN指令和OUT指令)用二进制数如:IN AX,8FH 又如: OUT 78H,AL(3)对于跳转指令(JMP指令)是以目标标号为直接地址的如: JMP ADDR12.间接寻址:(1)对于存储器的访问有分为基址寻址、变址寻址、基址加变址寻址以及带位移量的所谓相对基址寻址、相对变址寻址、相对基址加变址寻址如:MOV AX,[BP](2)对于输入/输出指令用DX做间接寻址寄存器如:IN AX,DX 又如: OUT DX,AL(3)跳转指令直接写明寄存器即可 (段内)如: JMP BX段间需组合:如: JMP DWORD PTR [BX+ADDR1]3-38指出8086/8088下列指令中存储器操作数地址的计数表达式。
16 32位微机原理第3章课后习题答案1632位微机原理第3章课后习题答案>第3章3.1:汇编语言是一种以处理器指令系统为基础的低级程序设计语言,它采用助记符表达指令操作码,采用标识符号表示指令操作数,可以直接、有效地控制计算机硬件,因而容易创建代码序列短小、运行快速的可执行程序3.2解决方案:(1)完整的汇编语言源程序由段组成(2)汇编语言源程序可以包含多个代码段、数据段、附加段或堆栈段,段之间的顺序可以随意排列(3)需独立运行的程序必须包含一个代码段,并指示程序执行的起始点,一个程序只有一个起始点(4)所有可执行语句必须在一个代码段中,描述性语句可以根据需要在任何段中开始位置:用标号指明返回DOS:使用DOS函数调用的4CH子函数停止汇编:执行end伪指令时停止汇编3.5解:段定位、段组合和段类型。
3.6给出采用一个源程序格式书写的例题3.1源程序示例3.1:创建一个在屏幕上显示信息的程序??解决方案:stacksegmentstackdb1024(0)个stackends41hdatasegmentstringdb'hello,assembly!',0dh,0ah,“$”数据结束codesegment'code'假设:代码,ds:data,ss:stackstart:movdx,offsetstringmovah,9int21hcodeendsendstart3.7 DOS支持的两种可执行程序结构是什么?在编写这两个程序时,我们应该注意什么?解决方案:(1).exe程序只有一个逻辑段,程序长度不超过64KB3.8举例说明等价“euq”伪指令和等号“=”伪指令的用途解:符号定义的伪指令有“equal equ”和“equal sign=”:symbol name equ数值表达式symbol name equ symbol name=数值表达式equ用于数值等价时不能重复定义符号名,但“=”允许有重复赋值。
《微机原理与接口技术》第三章作业一、书上P95作业题.4、5、6、710、11、12、13、14、1516、17、18、22、274、指出下列指令中的源操作数和目标操作数的寻址方式.〔1〕MOV BX,1000H源操作数:立即寻址;目标操作数:寄存器寻址〔2〕MOV AL,[BX] 源操作数:寄存器间接寻址;目标操作数:寄存器寻址〔3〕MOV CX,[BP+10H] 源操作数:寄存器相对寻址;目标操作数:寄存器寻址〔4〕MOV AL,ES:[BX+SI] 源操作数:基址加变址寻址;目标操作数:寄存器寻址〔5〕MOV [DI+1000H],BX 源操作数:寄存器寻址;目标操作数:寄存器相对寻址〔6〕MOV [1000H],CX 源操作数:寄存器寻址;目标操作数:直接寻址〔7〕MOV AL,[BX+DI+1234H] 源操作数:寄存器相对寻址;目标操作数:寄存器寻址〔8〕MOV AL,1000H[BX+SI] 源操作数:寄存器相对寻址;目标操作数:寄存器寻址〔9〕MOV [EBX+ESI+2010H],DX 源操作数:寄存器寻址;目标操作数:带位移的基址加变址寻址〔10〕MOV AX,0100H[EBX+ESI*4] 源操作数:基址加比例变址寻址;目标操作数:寄存器寻址5、设〔DS〕=2000H、〔ES〕=2100H、〔SS〕=1500H、〔BX〕=0100H、〔BP〕=0040H、〔SI〕=00A0H、〔DI〕=0120H,在指令MOV AX,src中,求用下列表示源操作数src的有效地址EA和物理地址PA各是多少?〔1〕100H[BX] EA=<100H+0100H>=0200H ; PA=2000*10H+0200H=20200H〔2〕ES:[BX+DI] EA=0100H+0120H=0220H ;PA=2100*10H+0220H=21220H〔3〕[BP] EA=0040H ; PA=1500*10H+0040H=15040H〔4〕ES:[BX+10H] EA=0100H+0010H=0110H ;PA=21000H+0110H=21110H<5> [BP+SI] EA=0040H+00A0H=00E0H ; PA=1500*10H+OOEOH=150E0H<6> [1000H] EA=1000H ; PA=2000*10H+1000H=21000H<7> ES:[DI] EA=0120H ; PA=2100*10H+0120H=21120H<8> 1050H[BX+SI] EA=1050H+0100H+00A0H=11F0H ; PA=2000*10H+11F0H=211F0H<9> DS:10C0H[BP+SI] EA=10C0H+0040H+00A0H=11A0H ; PA=2000*10H+11A0H=211A0H<10> [BX+DI] EA=0100H+0120H=0220H ; PA=2000*10H+0220H=20220H6、指出下列指令中的错误,并改正.〔1〕MOV BL,30A0H操作数不匹配改:MOV BX,30A0H〔2〕MOV 0010H,AL立即数不可以作为目标操作数改:MOV AX,0010H〔3〕XCHG AL,BX操作数类型不匹配改:XCHG AX,BX〔4〕MOV [AX],3456H立即数送入存储器需要说明改:MOV WORDPTR [AX],3456H〔5〕PUSH AL堆栈以字为操作单元改:PUSH AX〔6〕POP CS POP不可以用CS为目标操作数改:POP AX〔7〕MOV DS,1000H立即数不能直接送入段寄存器改:MOV AX,1000H MOV DS,AX〔8〕MOV [BX],[1000H]存储器不可以相互传送改:MOV AX,[1000H]MOV [BX],AX〔9〕LDS 〔BX〕,[1000H]LDS使用时期目标为16位通用寄存器改:LDS BX,[1000H] 〔10〕LEA BX,CX LEA源操作数为存储器改:LEA BX,[CX]7、已知〔AX〕=4A0BH,[1020H]单元中的内容为260FH,写出下列每条指令单独执行后的结果.〔1〕MOV AX,1020H ;〔AX〕=1020H〔2〕XCHG AX, [1020H] ;〔AX〕=260FH〔3〕MOV AX,[1020H] ;〔AX〕=260FH〔4〕LEA AX,[1020H] ;〔AX〕=1020H10、设一个堆栈段共有100H个字节单元,堆栈的起始地址为1250H:0000H,若在堆栈中存有5个字数据,问:〔1〕栈顶的物理地址多少?栈底:12600H〔2〕栈底的物理地址是多少?栈顶:12600-A=125F6H〔3〕当前SS和SP的内容是多少?SS:[1250H:0000H ]SP: [1250H:00F6H ]〔4〕若弹出两个数据,SP的内容是多少?SP:[1250H:00FAH ]11、编程完成下列程序段,根据运算结果置标志位OF、SF、ZF、AF、PF、CF,并分析程序执行结果是否正确?为什么?〔设字长n=8〕〔1〕30+64〔2〕122-64〔3〕96+52〔4〕-68+〔-72〕答:〔1〕MOV AL,30MOV BL,64ADD AL,BL结果:0101111O F=0 SF=0 ZF=0 AF=0 PF=1 CF=0〔2〕MOV AL,122MOV BL,64SUB AL,BL结果:00111010 OF=0 SF=0 ZF=0 AF=0 PF=1 CF=0〔3〕MOV AL,96MOV BL,52ADD AL,BL结果:10010100 F=0 SF=0 ZF=0 AF=0 PF=1 CF=0〔4〕MOV AL,-68MOV BL,-72ADD AL,BL结果:01110100 OF=1 SF=0 ZF=0 AF=1 PF=1 CF=117、判断下列指令格式的对与错,并解释错在哪里.〔1〕ADD 25H,AX 〔×〕目标操作数不可以为立即数〔2〕INC BX,1 〔×〕INC只有目标操作数〔3〕MUL AL,BL 〔×〕乘法指令目标操作数是隐含的〔4〕SUBB AL,3 〔×〕减法指令是SUB〔5〕DAA AL 〔×〕DAA后无操作数〔6〕NEG CX,0 〔×〕NEG后只有目标操作数〔7〕CMP [BX],1000H[BX+SI]〔√〕18、设〔AL〕=10010010B,将AL的内容算术右移2位,AL的内容和CF是多少?再将AL的内容逻辑右移2位,AL的内容和CF是多少?算术右移2位 AL:11100100 CF:1逻辑右移2位 AL:00100100 CF:122、写出下列程序段执行后的结果.MOV CL,4MOV AL,87MOV DL,ALAND AL,0FHOR AL,30HSHR DL,CLOR DL,30H〔AL〕=37H,〔DL〕=35H27、试用CMP指令和条件转移指令实现下列判断〔1〕AX和CX中的内容为无符号数:若〔AX〕>〔CX〕则转至BIGGER符号执行;若〔AX〕<〔CX〕则转至LESS符号执行.CMP AX,CXJA BIGGERLESS〔2〕BX和DX中的内容为无符号数:若〔BX〕>〔DX〕则转至BIGGER符号执行;若〔BX〕<〔DX〕则转至LESS符号执行.CMP BX,DXJG BIGGERJL LESS。
微机原理及接口第三章作业答案“微机系统原理与接口技术”第三章习题解答1.下列各条指令是否有错?如果有,请指出错误之处并改正。
(1)movds,1000h(2)mov[100],23h(3)addax,[bx+bp+6](4)pushdl(5)inax,[3fh](6)out3ffh,al(7)lesss,[si](8)pop[ax](9)imul4ch(10)shlbx,5(11)int300(12)xchgdx,0fffh请问:(1)错误。
不容许轻易向段寄存器送来立即数,可以改成:movmovax,1000hds,ax(2)错误。
该指令在语法上是对的,即可以把一个立即数送入一个存储单元;但是如果考虑实际编译,则第一操作数前应加上byteptr或wordptr说明,否则汇编程序会因不能确定操作数长度而指示出错。
可改为:movaddpushinbyteptr[100],23hax,[bx+di+6]dxax,3fh(3)错误。
无法同时采用两个基址寄存器bx、bp展开间接串行,可以改成:(4)错误。
堆栈操作方式需以字为单位展开,而dl就是一个字节。
可以改成:(5)错误。
在输出/输入指令中,8十一位端口地址应当轻易写下在操作数处。
可以改成:(6)错误。
端口地址3ffh已远远超过8十一位二进制则表示范围,16十一位端口地址应用领域dx。
可以改成:movoutlesdx,3ffhdx,alax,[si](7)错误。
les指令的目操作数应该是通用寄存器,不能是段寄存器。
可改为:(8)错误。
ax不能用于间接寻址,间接寻址只能用bx、bp、si、di四个寄存器之一。
可改为:popmovimulmovshl[bx]bl,4chblcl,5bx,cl(9)错误。
立即数无法搞乘法指令的操作数,可以改成:(10)错误。
当逻辑移位的次数大于1时,应该用cl指示次数。
可改为:(11)错误。
操作数300?255,已远远超过有效率的中断类型码范围。
16 32位微机原理第3章课后习题答案1632位微机原理第3章课后习题答案>第3章3.1:汇编语言就是一种以处理器指令系统为基础的低级程序设计语言,它使用助记符抒发指令操作码,使用标识符号则表示指令操作数,可以轻易、有效地掌控计算机硬件,因而难建立代码序列短小、运转快速的可执行程序3.2解:(1)完备的汇编语言源程序由段共同组成(2)一个汇编语言源程序可以包含若干个代码段、数据段、附加段或堆栈段,段与段之间的顺序可随意排列(3)须要单一制运转的程序必须涵盖一个代码段,并命令程序执行的初始点,一个程序只有一个初始点(4)所有的可执行性语句必须位于某一个代码段内,说明性语句可根据需要位于任一段内已经开始边线:用标号阐明返回dos:利用dos功能调用的4ch子功能来实现汇编停止:执行到一条end伪指令时,停止汇编3.5求解:段定位、段组合和段类型。
3.6得出使用一个源程序格式书写的例题3.1源程序例题3.1:创建一个在屏幕上显示一段信息的程序??解:stacksegmentstackdb1024(0)stackends41hdatasegmentstringdb'hello,assembly!',0dh,0ah,‘$’dataendscodesegment'code'assumecs:code,ds:data,ss:stackstart:movdx,offsetstringmovah,9int21hcodeendsendstart3.7dos支持哪两种可执行程序结构,编写这两种程序时需要注意什么?解:(1).exe程序只有一个逻辑段,程序长度不超过64kb3.8举例说明等价“euq”伪指令和等号“=”伪指令的用途求解:符号定义伪指令有“等价equ”和“等号=”:符号名equ数值表达式符号名equ符号名=数值表达式equ用作数值等价时无法重复定义符号名,但“=”容许存有重复赋值。
1.(1) 立即数寻址无物理地址(2)寄存器寻址无物理地址(3)存储器直接寻址2000H:0050H=20050H(4)存储器间接寻址2000H:00A0H=200A0H(5)存储器间接寻址2200H:00A0H=220A0H(6)存储器间接寻址1500H:0010H=15010H(7)存储器相对寻址2000H:(00A0H+0050H)=200F0H(8)存储器间接寻址2000H:0020H=20020H(9)存储器相对寻址2000H:(00A0H+0032H)=200D2H(10)基址变址寻址2000H:(00A0H+0020H)=200C0H(11)相对基址变址寻址1500H:(0010H+0020H+000AH)=1503AH(12)相对基址变址寻址2000H:(00A0H+0020H+0050H)=20110H3.(1) 1200H (2)0100H (3)2211H (4)4B2AH (5)4B2AH题目有误(6)4433H (7)6DC7H 题目有误(8)2000H4.(1)×目的操作数和源操作数类型不匹配 BX 16位 AH 8位(2) ×在汇编语言中是不允许两个内存单元间传递数据(3) ×不能连用两个变址,其中一个应为基址(4) ×在汇编语言中是不允许两个内存单元间传递数据(5) √(6) × CS不作为目的操作数,故不能对CS赋值(7) ×不能将立即数直接送入段寄存器(8)× 1000超出AL的0~255(9)×不允许在段寄存器间用mov传送(10) √(11) ×不能弹出一个数据到CS中(12) × 269H超出AL的256H(13) ×立即数不能作为目的操作数(14)× PUSH是字操作(15) ×字操作,与BYTE不符(16) √(17) √(18)×SRC不能为立即数(19)×未说明是字还是字节加;未指出操作类型(20)×移位位数大于1时由CL寄存器的值表示6. CF ZF SF OF PFAL=79H 不变AL=0F2H 0 0 1 1 0AL=8FH 1 0 1 0 0AL=8FH 1 0 1 0 1AL=0 0 1 0 0 1AL=0FFH 0 0 1 0 1AL=0 0 1 0 0 19.CLCNOT AXADD AX,0001HNOT DXADC DX,0000H11.AX=5000H BX=5000H SP=1FFEHPUSH AX 将AX里的值压入堆栈,PUSH BX 将BX里的值再压入堆栈,POP AX将堆栈顶的值弹出到AX里,即将BX的值赋给AX。