微机原理习题答案3、4.doc_第1页
微机原理习题答案3、4.doc_第2页
微机原理习题答案3、4.doc_第3页
微机原理习题答案3、4.doc_第4页
微机原理习题答案3、4.doc_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

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

文档简介

3.1机器指令分为哪几部分?每部分的作用是什么?【解】:每条机器指令由两部分组成:操作码字段和地址码字段。操作码字段:用来说明该指令所要完成的操作。地址码字段:用来描述该指令的操作对象。一般是直接给出操作数,或者给出操作数存放的寄存器编号,或者给出操作数存放的存储单元的地址或有关地址的信息。3.2指出下列MOV指令的源操作数的寻址方式。MOVAX,1234HMOVAX,BXMOVAX,BXMOVAX,TABLE;TABLE ;TABLE是一个变量名MOVAX,1234HMOVAX,BX+1234HMOVAX,BPSIMOVAX,BX+SI1234H 【解】:MOVAX,1234H立即寻址MOVAX,BX寄存器寻址MOVAX,BX寄存器间接寻址MOVAX,TABLE;TABLE是一个变量名直接寻址方式MOVAX,1234H直接寻址方式MOVAX,BX+1234H寄存器相对寻址MOVAX,BPSI基址变址寻址MOVAX,BX+SI1234H相对基址变址寻址3.3 设:(DS)=2000H,(BX)=0100H,(SS)=1000H,(BP)=0010H,TABLE的物理地址为2000AH,(SI)=0002H。求下列每条指令源操作数的存储单元地址:MOVAX,1234HMOVAX,BXMOVAX,TABLEBXMOVAX,BPMOVAX,BPSI【解】:源操作数存储单元地址:(DS)10H + EA =2000H10H+1234H=21234H源操作数存储单元地址:(DS)10H +(BX)=2000H10H+0100H=20100H源操作数存储单元地址:(DS)10H+EA=2000H10H+0100H+000AH=2010AH源操作数存储单元地址:(SS)10H+EA=1000H10H+0010H=10010H源操作数存储单元地址:(SS)10H+EA=1000H10H+0010H+0002H =10012H3.4设ARRAY是字数组的首地址,写出将第5个字元素取出送AX寄存器的指令,要求使用以下几种寻址方式: 直接寻址 寄存器间接寻址 寄存器相对寻址 基址变址寻址【解】: 直接寻址 寄存器间接寻址 寄存器相对寻址 基址变址寻址 MOV AX, ARRAY+8 MOV BX, ARRAY+8 MOV BX, 8 LEA BX, ARRAY MOV AX, BX MOV AX, ARRAYBX MOV SI, 8 MOV AX,BX+SI3.5 设当前(CS)=2000H,(IP)=2000H,标号NEXT定义在当前代码段偏移地址为0100H处,(DS)=1000H,(BX)=1000H,(11000H)=00H,(11001H)=30H,数据段定义的字变量ARRAY的内容为1000H,试写出下列转移指令的目标转移地址。 JMPNEARPTR JMPBX JMPWORDPTRARRAY 【解】: JMPNEARPTR 此转移指令的目标转移地址为:20100H JMPBX 此转移指令的目标转移地址为:21000H JMPWORDPTRARRAY 此转移指令的目标转移地址为:23000H 3.6设当前(CS)=2000H,(IP)=2000H,标号NEXT定义在3000H:1000H处。当前(DS)=1000H,(BX)=1000H,(11000H)=00H,(11001H)=03H,(11002H)=00H,(11003H)=30H,数据段定义的字变量ARRAY的内容为0300H,(ARRAY+2)=3000H,试写出下列转移指令的目标转移地址。 JMPFARPTRNEXT JMPDWORDARRAY【解】: JMPFARPTRNEXT 此转移指令的目标转移地址为:31000H JMPDWORDARRAY 此转移指令的目标转移地址为:30300H 3.7下列每组指令有何区别?MOVAX,1234HMOVAX,TABLEMOVAX,1234HMOVAX,TABLEMOVAX,TABLEMOVAX,BXLEAAX,TALBEMOVAX,BX【解】: 第一条指令中,1234H就是源操作数,直接送入AX中,第二条指令中,1234H是源操作数的地址,该指令是把1234H所指示的地址单元的值送入AX中。 两条指令都是直接寻址方式,都是把TABLE指示的地址单元的值送入AX中。 第一条指令中,TABLE为一地址单元的地址,该条指令是把TABLE所指示的地址单元的值送入AX中,第二条指令是把源操作数的偏移地址送入AX中。 第一条指令为寄存器寻址方式,BX中的值为源操作数,该条指令是把BX中的值送入AX中,第二条指令是寄存器间接寻址方式,BX中的值为源操作数的地址,该条指令是把BX所指示的地址单元的值送入AX中。3.8 MOV CS,AX指令正确吗?【解】:MOVCS,AX指令不正确。因为CS是指令寄存器,由系统自动改变,不能由指令进行更改。3.9写一指令序列将3456H装入DS寄存器。【解】:MOV AX 3456H MOV DS AX3.10若正在访问堆栈中的03600H单元,则SS和SP的值各是多少?【解】:若正在访问堆栈中03600H单元,则SS和SP的值会有好多组合,其中可以有SS是0300H,SP是0600H。3.11 若(SS)=2000H,(SP)=000AH,先执行将字数据1234H和5678H压入堆栈的操作,再执行弹出一个字数据的操作,试画出堆栈区及SP的内容变化过程示意图(标出存储单元的物理地址)。SP20006H78H【解】:物理地址(SS)10HSPSP2000AH 20007H56H34H12H 2000AH 20009H 20008H34H12H 2000AH 20009HSP20008H3.12 解释XLAT指令是怎样转换AL寄存器中的内容的,并编写一段程序用XLAT指令将BCD码09转换成对应的ASCII码,并将ASCII码存入ARRAY中。 【解】:XLAT指令是将AL的内容替换成存储单元中的一个数,往往用于代码转换。使用此指令前,先在数据段建立一个表格,表格首地址存入BX寄存器,欲取代码的表内位移量存入AL寄存器中。XLAT指令将(AL)值扩展成16位,与(BX)相加形成一个段偏移地址,段地址取(DS),据此读出代码送入AL寄存器。程序如下:TABLE DB 30H, 31H, , 39H ARRAY DB 1O DUP(?) MOV CL, 10 MOV SI, 0 MOV BX, OFFSET TABLE XOR AL, AL AGAIN: XLAT MOV SI, AL INC SI INC AL LOOP AGAIN3.13能用ADD指令将BX内容加到ES中去吗?【解】:不可以。ADD指令不允许使用段寄存器。3.14 INC BX指令正确吗?【解】:正确。操作数在BX所指示的地址单元中。3.15若(AX)=0001H,(BX)=0FFFFH,执行ADD AX,BX之后,标志位ZF、SF、CF、OF各是什么?【解】:(AX)= 0001H = 0000 0000 0000 0001 B + (BX)=0FFFFH = 1111 1111 1111 1111 B (AX)= 0001H = 1 0000 0000 0000 0000 B 则:ZF=1、SF=0、CF=1、OF=03.16 写一指令序列完成将BL中的数据除以CL中的数据,再将其结果乘以2,并将最后为16位数的结果存入DX寄存器中。【解】:MOV AL BL DIV CL MOV CL 1 SAL AL CL SAL AH CL MOV DX AX3.17写一指令序列,完成将AX寄存器的最低4位置1,最高3位清0,第7、8、9位取反,其余位不变的操作。【解】: OR AX, 000FH (OR AX, 0000 0000 0000 1111 B) AND AX, 1FFFH (AND AX, 0001 1111 1111 1111 B) XOR AX, 01C0H (XOR AX, 0000 0001 1100 0000 B)3.18 试写出执行下列指令序列后AX寄存器的内容。执行前(AX)=1234H。 MOV CL,7 SHL BX,CL 【解】:(AX) = 1234H = 0001 0010 0011 0100 B 执行后:(AX) = 0 0011 0100 0000 000 B = 0001 1010 0000 0000 B = 1A00H3.19 写一指令序列把DX与AX中的双字左移三位。【解】: MOV CL 3 SAL DX CL SAL AX CL 第4章 汇编语言程序设计4.1假设下列指令中的所有标识符均为类型属性为字的变量,请指出下列指令中哪些是非法的?它们的错误是什么? MOV BP,AL MOV WORD_OPBX+4*3DI,SP MOV WORD_OP1,WORD_OP2 MOV AX,WORD_OP1DX MOV SAVE WORD,DS MOV SP,SS:DATA_WORDBXSI MOV BXSI,2 MOV AX,WORD_OP1+WORD_OP2 MOV AX,WORD_OP1-WORD_OP2+100 MOV WORD_OP1,WORD_OP1-WORD_OP2【解】: MOV BP,AL 两个操作数不匹配 MOV WORD_OPBX+4*3DI,SP MOV WORD_OP1,WORD_OP2 两个内存单元之间不能直接传送数据 MOV AX,WORD_OP1DX MOV SAVE WORD,DS MOV SP,SS:DATA_WORDBXSI 当基址为BX时,选取DS寄存器 MOV BXSI,2 MOV AX,WORD_OP1+WORD_OP2 MOV AX,WORD_OP1-WORD_OP2+100 MOV WORD_OP1,WORD_OP1-WORD_OP24.2假设VAR1和VAR2为字变量,LAB为标号,试指出下列指令的错误之处: ADD VAR1,VAR2 SUB AL,VAR1 JMP LABSI JNZ VAR1 JMP NEAR LAB【解】: ADD VAR1,VAR2ADD两个操作数不能同时为存储单元,MOV AX, VAR1 ADD AX, VAR2 SUB AL, VAR1两个操作数不匹配SUB AX, VAR1 JMP LABSI LAB与SI不能相加JMP WORD, PTR SI JNZ VAR1JNZ后面应是标号,不应是变量JNZ LAB JMP NEAR LAB缺少PTR运算符JMP NEAR PTR LAB4.3画图说明下列语句所分配的存储空间及初始化的数据值。 BYTE_VAR DB BYTE,12,12H,3 DUP(0,?,2 DUP(1,2),?) WORD_VAR DW 5 DUP(0,1,2),?,5,BY,TE,256HWORD_VAR00H00H01H00H02H00H00H00H01H00H02H00HBBYTE_VAR41H【解】:(1) 0Y59H1E45HT54H120CH212HF4H30个字节00H0210101H02H2101H200H0202H101H202H101H02H2FBH5FFH54H00H56H00H45HBYTE00H41H59H00H02H101H000H202H101H2256H02H4.4写出将首地址为BLOCK的字数组的第6个字送到CX寄存器的指令序列,要求分别使用以下几种寻址方式: 以BX的寄存器间接寻址 以BX的寄存器相对寻址 以BX、SI的基址变址寻址【解】不同的寻址方式可以有不同的指令组合。 以BX的寄存器间接寻址LEA BX,BLOCK+10;将第6个字的有效地址存入BXNOV CX,BX;以BX的寄存器间接寻址方式,将第6个字送入CX寄存器 以BX的寄存器相对寻址MOV BX,10;将第6个字的地址偏移量存入BXMOV CX,BLOCKBX;以BX的寄存器相对寻址方式,将第6个字送入CX寄存器 以BX、SI的基址变址寻址LEA BX,BLOCK;取首地址BLOCK存入BXMOV SI,10;将第6个字的地址偏移量存入SIMOV CX,BX+SI;以BX、SI的基址变址寻址方式,将第6个字送入CX寄存器4.5假设程序中的数据定义如下:PARTNO DW ?PNAME DB 16 DUP(?)COUNT DD ?PLENTH EQU $-PARTNO问PLENTH的值为多少? 它表示什么意义? 【解】:PLENTH的值为22,它表示数据的个数。4.6有符号定义语句如下:BUFF DB 1,2,3,123EBUFF DB 0L EQU EBUFFBUFF问L的值是多少? 【解】:PLENTH的值为6。4.7 假设程序中的数据定义如下:LNAME DB 30 DUP(?)ADDRESS DB 30 DUP(?)CITY DB 15 DUP(?)CODE-LIST DB 1,7,8,3,2 用一条MOV指令将LNAME的偏移地址放入AX。 用一条指令将CODE_LIST的头两个字节的内容放入SI。 写一条伪操作使CODE_LENGHT的值等于CODE_LIST域的实际长度。【解】: 用一条MOV指令将LNAME的偏移地址放入AX。 MOV AX, OFFSET LANME 用一条指令将CODE_LIST的头两个字节的内容放入SI。 MOV SI, WORD PTR CODE_LSIT 写一条伪操作使CODE_LENGHT的值等于CODE_LIST域的实际长度。CODE_LENGHT EQU CITY-CODE_LIST4.8试写出一个完整的数据段DATA_SEG,它把整数5赋予一个字节,并把整数-1,0,2,5和4放在10字数组DATA_LIST的头5个单元中。然后,写出完整的代码段,其功能为:把DATA_LIST中头5个数中的最大值和最小值分别存入MAX和MIN单元中。【解】:参考程序如下: DATA_SEG SEGMENT DB1 DB 5 DATA_LIST DB -1, 0, 2, 5, 4, 5 DUP(?) COUNT DB 5 MAX DB ? MIN DB ? DATA_SEG ENDS CODE_SEG SEGMENT ASSUME CS:CODE_SEG, DS:DATA_SEG START PROC FAR PUSH DS MOV AX, 0 PUSH AX MOV AX, DATA_SEG MOV DS, AX LEA BX, DATA_LIST MOV CX, COUNT-1 MOV AL, BX MOV AH, BX+1 LOOP1: INC BX CMP AH, AL JAE LOOP1 XCHG AH, AL LOOP2 INC BX CMP AH, BX JAE LIS XCHG AH, BX JMP LOP2 LIS: CMP AL , BX JBE LOP2 XCHG AL, BX LOOP2 MOV MAX, AH MOV MIN, AL RET START ENDP CODE_SEG ENDS END START4.9给出等值语句如下:ALPHAEQU100BETAEQU25GAMMAEQU2下列表达式的值是多少? ALPHA*100+BETA ALPHA MODGAMMA+BETA (ALPHA+2)*BETA-2 (BETA/3)MOD 5 (ALPHA+3)*(BETA MOD GAMMA) ALPHA GE GAMMA BETA AND 7 GAMMA OR 3【解】: ALPHA*100+BETA1001002510025 ALPHAMODGAMMA+BETA100/(252)19 (ALPHA+2)*BETA-2(100+2)*252548 (BETA/3)MOD 5(25/3) MOD 53 (ALPHA+3)*(BETA MOD GAMMA)(100+3)*(25 MOD 2)103 ALPHA GE GAMMA100 GZ GAMMA0FFFFH BETA AND 725 AND 71 GAMMA OR 32 OR 334.10对于下面的数据定义,三条MOV指令分别汇编成什么?(可用立即数方式表示)TABLEA DW10 DUP(?)TABLEB DB10 DUP(?)TABLECDB1234 MOVAX,LENGTH TABLEAMOVBL,LENGTH TABLEBMOVCL,LENGTH TABLEC【解】:MOVAX,LENGTH TABLEAMOV AX, OOOAHMOVBL,LENGTH TABLEBMOV BL, 0AHMOVCL,LENGTH TABLECMOV CL, O1H4.11对于下面的数据定义,各条MOV指令单独执行后,有关寄存器的内

温馨提示

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

评论

0/150

提交评论