杭电微机原理第三章【习题】_第1页
杭电微机原理第三章【习题】_第2页
杭电微机原理第三章【习题】_第3页
杭电微机原理第三章【习题】_第4页
杭电微机原理第三章【习题】_第5页
已阅读5页,还剩24页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

《微机原理与接口技术》习题第三章作业习题及答案杭州电子科技大学自动化学院1/12/202312.

已知DS=1000H,BX=0200H,SI=0002H,内存

10200H~10205H单元的内容分别为10H,2AH,3CH,46H,59H,6BH。下列每条指令执行完后AX寄存器的内容是什么?

(1)MOVAX,0200H;

AX=0200H

(2)MOVAX,[200H]

物理地址=1000H×10H+200H=10200H,AX=2A10H

(3)MOVAX,BX;

AX=0200H

(4)MOVAX,3[BX];

物理地址=1000H×10H+0200H+3H=10203H,AX=5946H

(5)MOVAX,[BX+SI]

物理地址=1000H×10H+0200H+2H=10202H,AX=463CH

(6)MOVAX,2[BX+SI]

物理地址=1000H×10H+0200H+0002+2H=10204H,AX=6B59H6B59463C2A1010200H1/12/202323.

设DS=1000H,ES=2000H,SS=3500H,SI=00A0H,DI=0024H,BX=0100H,BP=0200H,数据段变量名为VAL的偏移地址值为0030H,试说明下列原操作数字段的寻址方式是什么?物理地址值是什么?

(1)MOVAX, [100H]

直接寻址方式,10100H

(2)MOVAX, VAL

直接寻址方式,10030H

(3)MOVAX, [BX]

寄存器间接寻址,10100H

(4)MOVAX, ES:[BX]

寄存器间接寻址,20100H

(5)MOVAX, [SI]

寄存器间接寻址,100A0H

(6)MOVAX, [BX+10H]

寄存器相对寻址,10110H

(7)MOVAX, [BP]

寄存器间接寻址,35200H

(8)MOVAX, VAL[BP][SI]

相对基址变址寻址,352D0H

(9)MOVAX, VAL[BX][DI]

相对基址变址寻址,10154H

(10)MOVAX, [BP][DI]

基址变址寻址,35224H1/12/20233(1)MOVDL,AX

错,寄存器寻址方式中,目的操作数与源操作数长度必须一致(2)MOV8650H,AX

错,目的操作数不可以是立即数(3)MOVDS,0300H

错,MOV指令不允许将立即数传入段寄存器(4)MOV[BX],[1200H]

错,MOV指令的两个操作数不能同时为存储器(5)MOVIP,0FFH

错,IP不能作为MOV指令的目的操作数(6)MOV[BX+SI+3],IP

错,IP不能作为MOV指令的源操作数(7)MOVAX,[BX][BP]

错,BX与BP使用的段寄存器不同,不可以同时出现在源操作数当中(8)MOVAL,ES:[BP]

对6.

指出下列指令中那些是错误的,错在什么地方?1/12/20234(9)MOVDL,[SI][DI]

错,SI与DI是两个变址寄存器,不可以同时出现在源操作数中(10)MOVAX,OFFSET0A20H

错,OFFSET后面跟的应该是符号地址,再把符号地址的值作为操作数(11)MOVAL,OFFSETTABLE

错,TABLE的偏移地址是16位,目的与源长度不一致(12)XCHGAL,50H

错,交换指令可以在寄存器之间,寄存器和存储器之间进行,不可以是立即数(13)INBL,05H

错,BL不能作为IN指令的目的操作数,只能用AL和AX(14)OUTAL,0FFEH

错,端口地址0FFEH>FFH,应用DX间接寻址,同时源操作数和目标操作数的位置颠倒了,应改为OUTDX,AL。1/12/202358.已知当前SS=1050H,SP=0100H,AX=4860H,BX=1287H,试用示意图表示执行下列指令过程中,堆栈中内容和堆栈指针SP是怎样变化的。1050:00001050:0100SPAX=4860HBX=1287H1)执行PUSHAX之前2)执行PUSHAX之后60481050:00001050:0100AX=4860HBX=1287HSP1050:00FEPUSU AXPUSH BXPOP BXPOP AX1/12/2023612604887SPAX=4860HBX=1287H3)执行PUSHBX之后1050:00001050:01001050:00FE1050:00FC12604887AX=4860HBX=1287H4)执行POPBX之后SP1050:00001050:01001050:00FE1050:00FC12604887AX=4860HBX=1287H5)执行POPAX之后SP1050:00001050:01001050:00FE1050:00FC1/12/202379.下列指令完成什么功能?(1)ADDAL,DH;加法运算,将寄存器AL和DH内容相加后的结果存入AL中;(2)ADCBX,CX;带进位加法运算,将寄存器BX和CX以及进位位CF内容相加后的结果存入BX中;(3)SUBAX,2710H;减法运算,将寄存器AX的内容减去立即数2710H后的结果存放到AX中;(4)DECBX;减1运算,将寄存器BX内容减1后的结果存入BX中;(5)NEGCX;取负运算,将寄存器CX内容取负后的结果存入CX中;(6)INCBL;加1运算,将寄存器BL内容加1后的结果存入BL中;(7)MULBX;无符号数乘法运算,将寄存器AX和BX的内容相乘后的结果存放到AX(低位)和DX(高位)中;(8)DIVCL;无符号数除法运算,将寄存器AX的内容除以寄存器CL中的内容,商存放在AL中,余数存放在AH中。1/12/20238AF(AuxiliaryFlag):辅助进位标志位低4位向高4位进位或借位时,AF=1。标志寄存器PSW1511109876543210OFDFIFTFSFZFAFPFCFCF(CarrvFlag):进位标志位

最高位有进位或借位时,CF=1。

PF

(ParityFlag):奇偶校验标志位本次运算结果中有偶数个“1”时,PF=1;有奇数个“1”时,PF=0。

ZF(ZeroFlag):全零标志位本次运算结果为0时,ZF=1,否则ZF=0。SF(SignFlag):符号标志位本次运算结果的最高位为1时,SF=1,否则SF=0。即反映了本次运算结果是正还是负。OF(OverflowFlag):溢出标志位

本次运算过程中产生溢出时,OF=1。对带符号数,字节运算结果的范围为-128~+127,字运算结果的范围为-32768~+32767,超过此范围为溢出。1/12/2023910.已知AX=2508H,BX=0F36H,CX=0004H,DX=1864H,试求下列每条指令执行后的结果是什么?标记位等于什么?(1)ANDAH,CL

AH=04H,CF=0;(2)ORBL,30H

BL=36H,CF=0;(3)NOTAX

AX=DAF7H,CF无影响;(4)XORCX,0FFF0H

CX=FFF4H,CF=0;(5)TESTDH,0FH

TEST操作并不修改结果,CF=0;(6)CMPCX,00H

CMP操作并不修改结果,CF=0;(7)SHRDX,CL

DX=0186H,CF=0;(8)SARAL,1

AL=04H,CF=0;(9)SHLBH,CL

BH=F0H,CF=0;(10)SALAX,1

AX=4A10H,CF=0;(11)RCLBX,1

若程序执行之前CF=0,BX=1E6CH,CF=0; 若程序执行之前CF=1,BX=1E6DH,CF=0。

(12)RORDX,CL

DX=4186H,CF=0。

这些指令对CF,OF影响不大,主要是ZF,SF和PF1/12/202310*11.

假设数据段定义如下:

DATA SEGMENT STRINGDB‘Thepersonalcomputer&TV’ DATAENDS试用字符串操作等指令编程完成以下功能:【答】DATA SEGMENT STRINGDB‘Thepersonalcomputer&TV’ DATAENDSEDATASEGMENT GET_CHAR DB 26DUP(?) NEW_STR DB ‘Thecomputer’CAPSDB 10DUP(?)CHARTDB 26DUP(?)EDATAENDS1/12/202311(1)把该字符串传送到附加段偏移量为GET_CHAR开始的内存单元中。

(例3-75)

MOV SI, OFFSETSTRING MOV DI, OFFSETGET_CHAR MOV CX, 001AH ;共26个字节,包括空格

CLD ;清地址标记位,地址增量

REP MOVSB

;重复传输各字节,直到CX=0HLT1/12/202312(2)(例3-76)比较该字符串是否与“Thecomputer”相同,若相同则将AL寄存器的内容置1,否则置0。并要求将比较次数送到BL寄存器中。

MOV SI, OFFSETSTRING MOV DI, OFFSETNEW_STR MOV

CX, 001AH CLD

REPZ CMPSB;DS:SI-ES:DI内容相同,则重复

JNE CLR_AL;不同则转

MOV AL, 1 JMPSET_BLCLR_AL: MOV AL, 0SET_BL: MOV BL, 001AH

SUB BL, CL HLT1/12/202313(3)(例3-77)检查该字符串是否有“&”符,若有则用空格将其替换。

MOV DI, OFFSETSTRING MOV CX, 001AHMOV AL, ‘&’CLDL1: SCASB ;AL-ES:DI JZFIND;若题目要求找到后不用再找了,则可用NEXT: LOOP L1;REPNESCASB,就可以不用LOOPL1 HLTFIND:MOVBL,‘’

MOV[DI-1], BL ;用空格替换& JMPNEXT1/12/202314(4)(例3-78) 把字符串大写字母传送到附加段中以CAPS开始的单元中,其余字符传送到以CHART开始的单元中。然后将数据段中存储上述字符串的单元清0。

MOV SI, OFFSETSTRING

;数据段,源串

MOV DI, OFFSETCAPS

;附加段,大写字符

MOV BX, OFFSETCHART

;附加段,其它字符

MOV CX, 001AH CLDL1: LODSB ;AL←DS:SI

MOV [SI-1], 00H ;取出字符后该单元清零

CMP AL, ‘A’ JB OTHER;若AL中字母<‘A’ CMP AL, ‘Z’ JA OTHER;若AL中字母>‘Z’

STOSB

;存大写字符

JMP L2OTHER:XCHG BX, DI ;存其它字符

STOSB XCHGBX, DIL2: LOOP L1 HLT1/12/202315*13.设CS=1200H,IP=0100H,SS=5000H,SP=0400H,DS=2000H,SI=3000H,BX=0300H,(20300)=4800,(20302)=00FFH,TABLE=0500H,PROG_N标号的地址为1200:0278H,PROG_F标号的地址为3400:0ABCH。说明下列每条指令执行完后,程序将分别移到何处执行?若将上述指令中的操作码JMP该为CALL,则每条指令执行完后,程序将分别移到何处执行?并请画图说明堆栈中的内容和堆栈指针如何变化。1/12/202316

(1)JMP PROG_N

段内直接近转移,目的地址为1200H:0278H(或12278H)(2)JMP BX

段内寄存器间接转移,目的地址为1200H:0300H(或12300H)(3)JMP [BX]

物理地址=DS×10H+BX=2000H×10H+0300H=20300H(20300H)=4800H

IP

段内存储器间接转移,目的地址为1200H:4800H(或16800H)(4)JMP FAR PROG_F

段间立即直接转移,目的地址为3400H:0ABCH(或34ABCH)

(5)JMP DWORD PTR[BX]

物理地址=DS×10H+BX=2000H×10H+0300H=20300H

(20300H)=4800HIP,(20302H)=00FFH

CS

段间存储器间接转移,目的地址为00FFH:4800H(或057F0H)1/12/202317JMP改为CALL后,目的地址与JMP相同。(1)CALL PROG_N

转移到1200H:0278H(或12278H)处执行,段内直接调用,3字节指令,0103H入栈(2)CALL BX

转移到1200H:0300H(或12300H)处执行,段内寄存器间接调用,2字节指令,0102H入栈(3)CALL [BX]

转移到1200H:4800H(或16300H)处执行,段内存储器间接调用,2字节指令,0102H入栈(4)CALL FAR PROG_F

转移到3400H:0ABCH(或34ABCH)处执行,段间直接调用,5字节指令,1200H和0105H分别入栈(5)CALL DWORD PTR[BX]

转移到00FFH:4800H(或057F0H)处执行,段间间接调用,2字节指令,1200H和0102H分别入栈1/12/20231811.编程将AX寄存器中的内容以相反的次序传送到DX寄存器中,并要求AX中的内容不被破坏,然后统计DX寄存器中1的个数是多少个。START: MOV CX, 16;循环移位次数初值

MOVBX,0;计数DX中1的个数初值NEXT:ROL AXJNCSHIFT

INC BX

SHIFT: RCR DX LOOPNEXTMSBLSBCFMSBLSBCFROLAXRCRDX1/12/20231914.如在下面程序段的括号中分别填入以下指令:(1)LOOP NEXT

(2)LOOPE NEXT(相等循环,即结果为0,即ZF=1,则循环)(3)LOOPNE NEXT(不相等循环,即结果为1,即ZF=0,则循环)试说明在这三种情况下,程序段执行完后,AX,BX,CX,DX寄存器的内容分别是什么?START: MOV AX, 01H MOV BX, 02H MOV DX, 03H MOV CX, 04HNEXT: INC AX ADD BX, AX SHR DX, 1 ( )

程序运行前

DX=00000011B

1/12/20232014.如在下面程序段的括号中分别填入以下指令:(1)LOOP NEXT

(2)LOOPE NEXT(相等循环,即结果为0,即ZF=1,则循环)(3)LOOPNE NEXT(不相等循环,即结果为1,即ZF=0,则循环)试说明在这三种情况下,程序段执行完后,AX,BX,CX,DX寄存器的内容分别是什么?START: MOV AX, 01H MOV BX, 02H MOV DX, 03H MOV CX, 04HNEXT: INC AX ADD BX, AX SHR DX, 1 (LOOP NEXT

)

程序运行前

DX=00000011B

(1)AX=05HBX=10HCX=00HDX=00H

1/12/20232114.如在下面程序段的括号中分别填入以下指令:(1)LOOP NEXT

(2)LOOPE NEXT(相等循环,即结果为0,即ZF=1,则循环)(3)LOOPNE NEXT(不相等循环,即结果为1,即ZF=0,则循环)试说明在这三种情况下,程序段执行完后,AX,BX,CX,DX寄存器的内容分别是什么?START: MOV AX, 01H MOV BX, 02H MOV DX, 03H MOV CX, 04HNEXT: INC AX ADD BX, AX SHR DX, 1 (LOOPE NEXT

)

程序运行前

DX=00000011B

(2)AX=02HBX=04HCX=03HDX=01H

1/12/20232214.如在下面程序段的括号中分别填入以下指令:(1)LOOP NEXT

(2)LOOPE NEXT(相等循环,即结果为0,即ZF=1,则循环)(3)LOOPNE NEXT(不相等循环,即结果为1,即ZF=0,则循环)试说明在这三种情况下,程序段执行完后,AX,BX,CX,DX寄存器的内容分别是什么?START: MOV AX, 01H MOV BX, 02H MOV DX, 03H MOV CX, 04HNEXT: INC AX ADD BX, AX SHR DX, 1 (LOOPNENEXT

)

程序运行前

DX=00000011B

(3)AX=03HBX=07HCX=02HDX=00H1/12/20232315.某班有7个同学的英语成绩低于80分,分别存在ARRAY数组中,试编程完成以下工作:(1)给每人加5分,结果存到NEW数组中。(2)把总分存到SUN单元中。(3)把平均分存到AVERAGE单元中。1/12/202324【答】 ARRAY DB………… NEW DB7DUP(?)

SUM DW0 AVERAGE DB0(1)给每人加5分,结果存到NEW数组中。

MOV CX, 07H MOV BX, 0

NEXT: MOV AL, ARRAY[BX] ADD AL, 5

DAA MOV NEW[BX],AL INC BX LOOP NEXT HLT1/12/202325(2)把总分存到SUM单元中。

MOV CX, 06H MOV BX, 01H MOV AH,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论