微机原理习题答案34.docx
- 文档编号:25244597
- 上传时间:2023-06-06
- 格式:DOCX
- 页数:7
- 大小:20.27KB
微机原理习题答案34.docx
《微机原理习题答案34.docx》由会员分享,可在线阅读,更多相关《微机原理习题答案34.docx(7页珍藏版)》请在冰豆网上搜索。
微机原理习题答案34
微机原理习题答案3、4
机器指令分为哪几部分?
每部分的作用是什么?
【解】:
每条机器指令两部分组成:
操作码字段和地址码字段。
操作码字段:
用来说明该指令所要完成的操作。
地址码字段:
用来描述该指令的操作对象。
一般是直接给出操作数,或者给出操作数存放的寄存器编号,或者给出操作数存放的存储单元的地址或有关地址的信息。
指出下列MOV指令的源操作数的寻址方式。
MOVAX,1234HMOVAX,BXMOVAX,[BX] MOVAX,TABLE;TABLE;TABLE是一个变量名MOVAX,[1234H]MOVAX,[BX+1234H]MOVAX,[BP][SI] MOVAX,[BX+SI-1234H]【解】:
MOVAX,1234H 立即寻址 MOVAX,BXMOVAX,[BX] 寄存器寻址寄存器间接寻址直接寻址方式直接寻址方式寄存器相对寻址基址变址寻址 MOVAX,TABLE;TABLE是一个变量名MOVAX,[1234H]MOVAX,[BP][SI]MOVAX,[BX+1234H] MOVAX,[BX+SI-1234H] 相对基址变址寻址设:
=2000H,=0100H,=1000H,=0010H,TABLE的物理地址为2000AH,=0002H。
求下列每条指令源操作数的存储单元地址:
MOVAX,[1234H]MOVAX,[BX] MOVAX,TABLE[BX]MOVAX,[BP]MOVAX,[BP][SI] 【解】:
源操作数存储单元地址:
(DS)×10H+EA=2000H×10H+1234H=21234H 源操作数存储单元地址:
(DS)×10H+(BX)=2000H×10H+0100H=20100H源操作数存储单元地址:
(DS)×10H+EA=2000H×10H+0100H+000AH=2010AH源操作数存储单元地址:
(SS)×10H+EA=1000H×10H+0010H=10010H源操作数存储单元地址:
(SS)×10H+EA=1000H×10H+0010H+0002H=10012H 设ARRAY是字数组的首地址,写出将第5个字元素取出送AX寄存器的指令,要求使用以下几种寻址方式:
⑴直接寻址⑵寄存器间接寻址⑶寄存器相对寻址⑷基址变址寻址【解】:
⑴直接寻址⑵寄存器间接寻址⑶寄存器相对寻址⑷基址变址寻址 MOVAX,ARRAY+8MOVBX,ARRAY+8MOVBX,8 LEABX,ARRAY MOVAX,[BX] MOVAX,ARRAY[BX]MOVSI,8 MOVAX,[BX+SI] 设当前(CS)=2000H,(IP)=2000H,标号NEXT定义在当前代码段偏移地址为0100H处,(DS)=1000H,(BX)=1000H,(11000H)=00H,(11001H)=30H,数据段定义的字变量ARRAY的内容为1000H,试写出下列转移指令的目标转移地址。
⑴JMP⑵JMP NEARPTRBX ⑶JMPWORDPTRARRAY【解】:
⑴JMPNEARPTR 此转移指令的目标转移地址为:
20100H ⑵JMPBX 此转移指令的目标转移地址为:
21000H ⑶JMP WORD PTRARRAY 此转移指令的目标转移地址为:
23000H 设当前(CS)=2000H,(IP)=2000H,标号NEXT定义在3000H:
1000H处。
当前(DS)=1000H,(BX)=1000H,(11000H)=00H,(11001H)=03H,(11002H)=00H,(11003H)=30H,数据段定义的字变量ARRAY的内容为0300H,(ARRAY+2)=3000H,试写出下列转移指令的目标转移地址。
⑴JMP FAR PTR NEXT ⑵JMPDWORD 【解】:
⑴JMPFAR ARRAY PTRNEXT 此转移指令的目标转移地址为:
31000H ⑵JMPDWORDARRAY 此转移指令的目标转移地址为:
30300H 下列每组指令有何区别?
⑴MOVAX,1234H ⑵MOVAX,TABLEMOVAX,[1234H] MOVAX,[TABLE]⑶MOVAX,TABLE ⑷MOVAX,BX LEAAX,TALBE MOVAX,[BX]【解】:
⑴第一条指令中,1234H就是源操作数,直接送入AX中,第二条指令中,1234H是源操作数的地址,该指令是把1234H所指示的地址单元的值送入AX中。
⑵两条指令都是直接寻址方式,都是把TABLE指示的地址单元的值送入AX中。
⑶第一条指令中,TABLE为一地址单元的地址,该条指令是把TABLE所指示的地址单元的值送入AX中,第二条指令是把源操作数的偏移地址送入AX中。
⑷第一条指令为寄存器寻址方式,BX中的值为源操作数,该条指令是把BX中的值送入AX中,第二条指令是寄存器间接寻址方式,BX中的值为源操作数的地址,该条指令是把BX所指示的地址单元的值送入AX中。
MOVCS,AX指令正确吗?
【解】:
MOVCS,AX指令不正确。
因为CS是指令寄存器,系统自动改变,不能指令进行更改。
写一指令序列将3456H装入DS寄存器。
【解】:
MOVAX3456H MOVDSAX 若正在访问堆栈中的03600H单元,则SS和SP的值各是多少?
【解】:
若正在访问堆栈中03600H单元,则SS和SP的值会有好多组合,其中可以有SS是0300H,SP是0600H。
若(SS)=2000H,(SP)=000AH,先执行将字数据1234H和5678H压入堆栈的操作,再执行弹出一个字数据的操作,试画出堆栈区及SP的内容变化过程示意图(标出存储单元的物理地址)。
【解】:
物理地址=(SS)×10H+SP SP→2000AHSP→20008H34H 20009H12H 2000AHSP→20006H 20007H 20008H 20009H 2000AH78H56H34H12H解释XLAT指令是怎样转换AL寄存器中的内容的,并编写一段程序用XLAT指令将BCD码0~9转换成对应的ASCII码,并将ASCII码存入ARRAY中。
【解】:
XLAT指令是将AL的内容替换成存储单元中的一个数,往往用于代码转换。
使用此指令前,先在数据段建立一个表格,表格首地址存入BX寄存器,欲取代码的表内位移量存入AL寄存器中。
XLAT指令将(AL)值扩展成16位,与(BX)相加形成一个段偏移地址,段地址取(DS),据此读出代码送入AL寄存器。
程序如下:
TABLEDB30H,31H,┅,39H ARRAYDB1ODUP(?
) MOVCL,10 MOVSI,0 MOVBX,OFFSETTABLE XORAL,AL AGAIN:
XLAT MOV[SI],AL INCSI INCAL LOOPAGAIN 能用ADD指令将BX内容加到ES中去吗?
【解】:
不可以。
ADD指令不允许使用段寄存器。
INC[BX]指令正确吗?
【解】:
正确。
操作数在BX所指示的地址单元中。
若(AX)=0001H,(BX)=0FFFFH,执行ADDAX,BX之后,标志位ZF、SF、CF、OF各是什么?
【解】:
(AX)=0001H=0000000000000001B +(BX)=0FFFFH=1111111111111111B (AX)=0001H=10000000000000000B则:
ZF=1、SF=0、CF=1、OF=0写一指令序列完成将BL中的数据除以CL中的数据,再将其结果乘以2,并将最后为16位数的结果存入DX寄存器中。
【解】:
MOVALBL DIVCL MOVCL1 SALALCL SALAHCL MOVDXAX 写一指令序列,完成将AX寄存器的最低4位置1,最高3位清0,第7、8、9位取反,其余位不变的操作。
【解】:
ORAX,000FH(ORAX,0000000000001111B) ANDAX,1FFFH(ANDAX,0001111111111111B) XORAX,01C0H(XORAX,0000000111000000B) 试写出执行下列指令序列后AX寄存器的内容。
执行前(AX)=1234H。
MOVCL,7 SHLBX,CL 【解】:
(AX)=1234H=0001001000110100B 执行后:
(AX)=0001101000000000B=0001101000000000B=1A00H写一指令序列把DX与AX中的双字左移三位。
【解】:
MOVCL3 SALDXCL SALAXCL 第4章汇编语言程序设计 假设下列指令中的所有标识符均为类型属性为字的变量,请指出下列指令中哪些是非法的?
它们的错误是什么?
⑴MOVBP,AL ⑵MOVWORD_OP[BX+4*3][DI],SP⑶MOVWORD_OP1,WORD_OP2 ⑷MOVAX,WORD_OP1[DX] ⑸MOVSAVEWORD,DS ⑹MOVSP,SS:
DATA_WORD[BX][SI]⑺MOV[BX][SI],2 ⑻MOVAX,WORD_OP1+WORD_OP2 ⑼MOVAX,WORD_OP1-WORD_OP2+100⑽MOVWORD_OP1,WORD_OP1-WORD_OP2【解】:
⑴MOVBP,AL 两个操作数不匹配 ⑵MOVWORD_OP[BX+4*3][DI],SP ⑶MOVWORD_OP1,WORD_OP2 两个内存单元之间不能直接传送数据⑷MOVAX,WORD_OP1[DX] ⑸MOVSAVEWORD,DS ⑹MOVSP,SS:
DATA_WORD[BX][SI] 当基址为BX时,选取DS寄存器⑺MOV[BX][SI],2 ⑻MOVAX,WORD_OP1+WORD_OP2 ⑼MOVAX,WORD_OP1-WORD_OP2+100⑽MOVWORD_OP1,WORD_OP1-WORD_OP2 假设VAR1和VAR2为字变量,LAB为标号,试指出下列指令的错误之处:
⑴ADDVAR1,VAR2 ⑵SUBAL,VAR1⑶JMPLAB[SI] ⑷JNZVAR1 ⑸JMPNEARLAB【解】:
⑴ADDVAR1,VAR2 ADD两个操作数不能同时为存储单元,MOVAX,VAR1 ADDAX,VAR2 ⑵SUBAL,VAR1 两个操作数不匹配SUBAX,VAR1⑶JMPLAB[SI] LAB与[SI]不能相加JMPWORD,PTR[SI]⑷JNZVAR1 JNZ后面应是标号,不应是变量JNZLAB ⑸JMPNEARLAB 缺少PTR运算符JMPNEARPTRLAB 画图说明下列语句所分配的存储空间及初始化的数据值。
⑴BYTE_VARDB‘BYTE’,12,-12H,3DUP(0,?
,2DUP(1,2),?
) ⑵WORD_VARDW5DUP(0,1,2),?
,-5,‘BY’,‘TE’,256H 【解】:
(1)BYTE_VAR41H59H54H45H0CHF4H00H-01H02H01H02H00H-01H02H01H02H00H-01H02H01H02HBYTE12-12H012120121201212WORD_VAR00H00H01H00H02H00H…00H00H01H00H02H00H--FBHFFH41H00H59H00H54H00H45H00H56H02H01230个字节0122-5BYTE256H 写出将首地址为BLOCK的字数组的第6个字送到CX寄存器的指令序列,要求分别使用以下几种寻址方式:
⑴以BX的寄存器间接寻址⑵以BX的寄存器相对寻址⑶以BX、SI的基址变址寻址 【解】不同的寻址方式可以有不同的指令组合。
⑴以BX的寄存器间接寻址 LEABX,BLOCK+10;将第6个字的有效地址存入BX NOVCX,[BX];以BX的寄存器间接寻址方式,将第6个字送入CX寄存器⑵以BX的寄存器相对寻址 MOVBX,10;将第6个字的地址偏移量存入BX MOVCX,BLOCK[BX];以BX的寄存器相对寻址方式,将第6个字送入CX寄存器⑶以BX、SI的基址变址寻址 LEABX,BLOCK;取首地址BLOCK存入BX MOVSI,10;将第6个字的地址偏移量存入SI MOVCX,[BX+SI];以BX、SI的基址变址寻址方式,将第6个字送入CX寄存器假设程序中的数据定义如下:
PARTNO DW ?
PNAME DB 16DUP(?
)COUNT DD ?
PLENTH EQU$-PARTNO问PLENTH的值为多少?
它表示什么意义?
【解】:
PLENTH的值为22,它表示数据的个数。
有符号定义语句如下:
BUFF DB 1,2,3,‘123’EBUFFDB 0 L EQUEBUFF-BUFF问L的值是多少?
【解】:
PLENTH的值为6。
假设程序中的数据定义如下:
LNAME DB 30DUP(?
)ADDRESS DB 30DUP(?
)CITY DB 15DUP(?
)CODE-LISTDB 1,7,8,3,2 ⑴用一条MOV指令将LNAME的偏移地址放入AX。
⑵用一条指令将CODE_LIST的头两个字节的内容放入SI。
⑶写一条伪操作使CODE_LENGHT的值等于CODE_LIST域的实际长度。
【解】:
⑴用一条MOV指令将LNAME的偏移地址放入AX。
MOVAX,OFFSETLANME ⑵用一条指令将CODE_LIST的头两个字节的内容放入SI。
MOVSI,WORDPTRCODE_LSIT ⑶写一条伪操作使CODE_LENGHT的值等于CODE_LIST域的实际长度。
CODE_LENGHTEQUCITY-CODE_LIST 试写出一个完整的数据段DATA_SEG,它把整数5赋予一个字节,并把整数-1,0,2,5和4放在10字数组DATA_LIST的头5个单元中。
然后,写出完整的代码段,其功能为:
把DATA_LIST中头5个数中的最大值和最小值分别存入MAX和MIN单元中。
【解】:
参考程序如下:
DATA_SEG SEGMENT DB1 DB5 DATA_LISTDB-1,0,2,5,4,5DUP(?
) COUNT DB5 MAX DB?
MIN DB?
DATA_SEG ENDS CODE_SEG SEGMENT ASSUMECS:
CODE_SEG,DS:
DATA_SEG START PROCFAR PUSHDS MOVAX,0 PUSHAX MOVAX,DATA_SEG MOVDS,AX LEABX,DATA_LIST MOVCX,COUNT-1 MOVAL,[BX] MOVAH,[BX+1] LOOP1:
INCBX CMPAH,AL JAELOOP1 XCHGAH,AL LOOP2 INCBX CMPAH,[BX] JAELIS XCHGAH,[BX] JMPLOP2 LIS:
CMPAL,[BX] JBELOP2 XCHGAL,[BX] LOOP2 MOVMAX,AH MOVMIN,AL RET START ENDP CODE_SEG ENDS ENDSTART给出等值语句如下:
ALPHAEQU100BETAEQU25GAMMAEQU2下列表达式的值是多少?
⑴ALPHA*100+BETA ⑵ALPHAMODGAMMA+BETA⑶(ALPHA+2)*BETA-2 ⑷(BETA/3)MOD5 ⑸(ALPHA+3)*(BETAMODGAMMA)⑹ALPHAGEGAMMA⑺BETAAND7 ⑻GAMMAOR3【解】:
⑴ALPHA*100+BETA 100×10025=10025 ⑵ALPHAMODGAMMA+BETA100/(25+2)=19 ⑶(ALPHA+2)*BETA-2 (100+2)*25=2548⑷(BETA/3)MOD5 (25/3)MOD5=3 ⑸(ALPHA+3)*(BETAMODGAMMA)(100+3)*(25MOD2)=103⑹ALPHAGEGAMMA 100GZGAMMA=0FFFFH⑺BETAAND7 25AND7=1⑻GAMMAOR3 2OR3=3 对于下面的数据定义,三条MOV指令分别汇编成什么?
(可用立即数方式表示) TABLEADW10DUP(?
)TABLEBDB10DUP(?
)TABLECDB’1234’ ┇MOVAX,LENGTHTABLEA MOVBL,LENGTHTABLEBMOVCL,LENGTHTABLEC【解】:
MOVAX,LENGTHTABLEA MOVAX,OOOAH MOVBL,LENGTHTABLEB MOVBL,0AHMOVCL,LENGTHTABLEC MOVCL,O1H 对于下面的数据定义,各条MOV指令单独执行后,有关寄存器的内容是什么?
FLDBDB?
TABLEADW20DUP(?
)TABLEBDB‘ABCD’⑴MOV AX,TYPEFLDB⑵MOV AX,TYPE TABLEA ⑶MOV CX,LENGTHTABLEA ⑷MOV DX,SIZETABLEA⑸MOV CX,LENGTHTABLEB
(1)MOV AX,TYPEFLDB 【解】:
(AX)=1
(2)MOV AX,TYPETABLEA (AX)=2(3)MOV CX,LENGTHTABLEA (CX)=20(4)MOV DX,SIZETABLEA (DX)=40(5)MOV CX,LENGTHTABLEB (CX)=1 编写在屏幕上显示字符串‘THISISTEXTDISPLAYPROGRAM.’的程序。
【解】:
分析:
只需将欲显示字符串的ASCII码存放到字节变量数据区,用9号功能调用即可显示该字符串。
)参考程序如下:
SSEGSEGMENTSTACK‘STACK’ DB32DUP(?
) SSEGENDS DSEGSEGMENT STRBDB‘THISISTEXTDISPLAYPROGRAM$’ DSEGEDNS CSEGSEGMENT STARTPROCFAR STARTEDNPFAR ASSUMECS:
CSEG,SS:
SSEG,DS:
DSEG PUSHDS MOVAX,0 PUSHAX MOVAX,DESG MOVDS,AX MOVDX,OFFSETSTRB MOVAH,9 INT21H RET CSEGENDS ENDSTART 编写程序,接收从键盘输入的10个十进制数字,输入中遇见回车符则停止输入,各个数经过BCD码处理,以十六进制数显示在屏幕上。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 微机 原理 习题 答案 34