微型计算机技术 陈慈发 微机原理 习题 详解.docx
- 文档编号:8705374
- 上传时间:2023-02-01
- 格式:DOCX
- 页数:25
- 大小:50.61KB
微型计算机技术 陈慈发 微机原理 习题 详解.docx
《微型计算机技术 陈慈发 微机原理 习题 详解.docx》由会员分享,可在线阅读,更多相关《微型计算机技术 陈慈发 微机原理 习题 详解.docx(25页珍藏版)》请在冰豆网上搜索。
微型计算机技术陈慈发微机原理习题详解
第一章微型计算机概论
1.12以下十进制数对于的八位二进制补码是怎样表示的?
(1)102
[102]补=01100110B
(2)34
[34]补=00100010B
(3)96
[96]补=01100000B
(4)-100
[-100]原=11100100B
[-100]反=10011011B
[-100]补=10011100B
(5)-64
[-64]原=11000000B
[-64]反=10111111B
[-64]补=11000000B
(6)0
[0]补=00000000B
1.14为什么我们会用16进制表示数据?
请将下列十进制数转换成对应的十六进制数。
(1)354=162H
(2)102=66H
(3)64=40H
(4)256=100H
(5)127=7FH
(6)32=20H
(7)135=87H
(8)67=43H
1.15现有如下十进制数,将其转换成对应的二进制数。
(1)34.5=10010.1B
(2)20.125=10100.001B
(3)17.12=10001.0001B
(4)100.4=1100100.01B
(5)50.05=110010.00001B
(6)19.3=10011.01B
1.16将下列十六进制数表示成二进制数。
(1)0FFH=11111111B
(2)34H=00110100B
(3)67H=01100111B
(4)4EH=01001110B
(5)90H=10010000B
(6)4DH=01001101B
(7)5AH=01011010B
1.17请写出以下补码表示的二进制数真值。
[X]补=1000000000000000B
X=-32768
[Y]补=1111111111111111B
[Y]反=1111111111111110B
[Y]原=1000000000000001B
Y=-1
[Z]补=0111111111111111B
Z=32767
[W]补=1111000000000000B
[W]反=1110111111111111B
[W]原=1001000000000000B
W=-4096
[Q]补=0100000000000000B
Q=16384
[P]补=1000000000000001B
[P]反=1000000000000000B
[P]原=1111111111111111B
P=-32767
1.20请判断以下八位二进制数补码运算是否会产生溢出,或者产生进位,为什么?
(1)-23+78
[-23]补+[78]补=E9H+4EH=
(1)37H
无溢出,有进位
(2)-45-92
[-45]补+[-92]补=D3H+A4H=
(1)77H
有溢出,有进位
(3)89+30
[89]补+[30]补=59H+1EH=77H
无溢出,无进位
(4)78-52
[78]补+[-52]补=4EH+CCH=
(1)1AH
无溢出,有进位
(5)83-(-30)
[83]补+[30]补=53H+1EH=71H
无溢出,无进位
(6)126-(-34)
[126]补+[34]补=7EH+22H=A0H
有溢出,无进位
(7)108+34
[108]补+[34]补=6CH+22H=8EH
有溢出,无进位
1.22设有X=80H,Y=79H,Z=88H,在下述情况下比较三个数的大小。
(1)三数均为无符号数
Y (2)三数均为有符号数(补码) [X]补=10000000B X=-10000000B(负数) [Y]补=01111001B Y=01111001B(正数) [Z]补=10001000B [Z]反=10000111B [Z]原=11111000B Z=-01111000B(负数) X (3)三数均为压缩BCD码 X=80 Y=79 Z=88 Y (4)三数均为有符号数(移码) [X]移=10000000B X=[X]移-01111111B=00000001B(正数) [Y]移=01111001B Y=[Y]移–01111111B=-00000110(负数) [Z]移=10001000B Z=[Z]移–01111111B=00001001(正数) Y 第三章指令 3.2什么是机器码? 什么是助记符? 什么是操作码? 什么是操作数? 不同指令的机器码字节数都相同吗? 3.3什么是寻址? 什么是寻址方式? 操作数可能在哪些地方? 对应的操作数名称和寻址方式名称分别是什么? 3.416位操作数在存储器中存放的规则是什么? 什么叫“低对低、高对高”? 3.7指令中寻址存储器操作数使用物理地址还是逻辑地址? 逻辑地址转换成物理地址的算法是什么? 在指令中要确定一个存储器操作数应该提供哪三种信息? 3.8写出存储器寻址方式中有效地址EA的通式。 简单归纳段寄存器的默认规则。 解: 3.2: 机器码: 它指的是将硬件序列号经过一系列加密、散列形成的一串序列号,即使指令的二进制编码。 助记符: 是便于人们记忆、并能描述指令功能和指令操作数的符号 操作码: 组成机器指令的一部分用来说明指令的性质和功能。 操作数: 用来说明操作的对象。 可以是具体的数值、寄存器或存储器地址。 不同指令的机器码字节数不一样。 3.3: 寻址: 寻找操作数会操作数的地址 寻址方式: 寻找操作数地址的方法即为寻址方式。 对应的操作数名称和寻址方式名称见下表: 操作数的位置 操作数名称 寻址方式名称 在指令中 立即数 立即寻址 在寄存器中 寄存器操作数 寄存器寻址 在存储器中 存储器操作数 存储器寻址 在I/O端口中 I/O操作数 I/O端口寻址 3.4: 16位操作数在存储器中存放的规则是: 低字节在低地址中,高字节在高地址中,即所谓的低对低、高对高。 3.7指令中寻址存储器操作数使用的是逻辑地址。 逻辑地址转换成物理地址的算法是: 段地址x16+偏移地址=物理地址 在指令中要确定一个存储器操作数要提供三种信息: 段地址、偏移地址和数据类型。 3.8存储器寻址方式中有效地址EA的通式: EA=()基址+()地址+DISP偏移量 段寄存器的默认规则: 如果有效地址的表达式中有基址寄存器BP则默认堆栈段SS,其他一律默认数据段DS。 3.9设段寄存器DS=1000H,SS=2000H,ES=3000H,通用寄存器BX=4000H,BP=5000H,SI=6000H,DI=70000H。 在下列各指令中指出存储器操作数的寻址方式,求出有效地址EA、物理地址PA、并分别用物理地址和逻辑地址说明指令执行结果。 (1)MOVCX,[2300H] (2)MOVBYTEPTR[BX],8FH (3)MOVDH,[BP+3000H] (4)MOVES: [SI+1210H],AX (5)MOV[BX+DI+50H],AX (6)INCWORDPTR[BX+SI] 解: (1)MOVCX,[2300H]直接寻址; 数据段中偏移地址为2300H所对应的字送CX中。 有效地址EA=2300H,物理地址PA=DS*16+EA=10000H+2300H=12300H 执行结果: (12300H)→CL,(12301H)→CH (2)MOVBYTEPTR[BX],8FH寄存器间接寻址; 立即数8FH,送入数据段偏移地址为BX所对应的字节中。 有效地址EA=BX=4000H,物理地址PA=DS*16+EA=10000H+4000H=14000H 执行结果: 8FH→(14000H) (3)MOVDH,[BP+3000H]基址寻址; 数据段中偏移地址为BP内容与3000H之和所对应的字节送至DH 有效地址EA=BP+3000H=8000H 物理地址PA=SS*16+EA=20000H+8000H=28000H 执行结果: (28000H)→DH (4)MOVES: [SI+1210H],AX变址寻址; AX内容送入数据段中偏移地址SI与1210H之和所对应的字中 有效地址EA=SI+1210H=6000H+1210H=7210H 物理地址PA=ES*16+EA=3000H*16+7210H=37210H 执行结果: AL→(37210H),AH→(37211H) (5)MOV[BX+DI+50H],AX基址变址寻址; AX内容送入数据段中偏移地址为BX内容与DI内容及50H内容之和所对应的字节中 有效地址EA=BX+DI+50H=4000H+70000H+50H=74050H 物理地址PA=DS*16+EA=1000H*16+74050H=84050H 执行结果: AL→(84050H) (6)INCWORDPTR[BX+SI]基址变址寻址; 堆栈中偏移地址为BX内容与SI内容所对应的字加1 有效地址EA=BX+SI=4000H+6000H=A000H 物理地址PA=DS*16+EA=1000H*16+A000H=1A000H 执行结果: 1A000H中存放的字的值加1 3.10分别说明指令MOVAX,2000H和指令MOVAX,[2000H]以及指令MOVAX,BX和指令MOVAX,[BX]的区别。 解: MOVAX,2000H将立即数2000H送入寄存器AX MOVAX,[2000H]将数据段中偏移地址为2000H的数据送入AX; MOVAX,BX将寄存器BX操作数传入AX MOVAX,[BX]将数据段中偏移地址为BX的内容所对应的字送入AX 3.11指出下列指令中源操作数的寻址方式。 (1)MOVBL,0F9H (2)ADD[BX],SI (3)SUBCL,[4000H] (4)CMPDX,[SI] (5)ANDAL,[BX+1] (6)ORBP,[DI+2100H] (7)XORAX,[BP+SI] (8)MOVCX,300 解: (1)MOVBL,0F9H立即寻址 (2)ADD[BX],SI寄存器寻址寻址 (3)SUBCL,[4000H]直接寻址 (4)CMPDX,[SI]寄存器间接寻址 (5)ANDAL,[BX+1]基址寻址 (6)ORBP,[DI+2100H]变址寻址 (7)XORAX,[BP+SI]基址变址寻址 (8)MOVCX,300立即寻址 3.12下列指令都是非法的,指出各指令错在哪里? (1)MOVSI,AH (2)MOV70H,BL (3)MOVCX,F123H (4)MOV[BX],6AH (5)MOVES,5000H (6)MOV[DI],[3000H] (7)MOVDS,SS (8)MOVCS,AX (9)MOVAL,[CX] (10)MOV[BX+BP],DX (11)MOVBH,[SI+DI+2] (12)PUSHAL (13)LEAAX,BX (14)LDSBL,[5100H] (15)INAH,DX (16)OUT288H,AL (17)ADD[2400H],1234H (18)XOR[2500R],[BX+10H] (19)INC[SI] (20)MUL10 (21)IDIV[BP+DI+1300H] (22)SALAL,2 解: (1)MOVSI,AH两个操作数字长不一致 (2)MOV70H,BL立即数不能做目的操作数 (3)MOVCX,F123H十六进制的数以字母打头时前必须补0 (4)MOV[BX],6AH两个操作数的字长不确定 (5)MOVES,5000H立即数不能直接送段寄存器 (6)MOV[DI],[3000H]两个操作数不能存储器操作数 (7)MOVDS,SS段寄存器不可相互传送数据 (8)MOVCS,AXCS不能做目的操作数 (9)MOVAL,[CX]CX不能用作寄存器间接寻址 (10)MOV[BX+BP],DX存储器寻址方式中表示有效地址不能同时为两个基址寄存器 (11)MOVBH,[SI+DI+2]存储器寻址方式中表示有效地址不能同时为两个变址寄存器 (12)PUSHAL入栈出栈操作必须以字为单位,AL应为AX (13)LEAAX,BXLEA指令中源操作数必须为存储器寻址方式应为[BX] (14)LDSBL,[5100H]LDS指令中目的操作数必须为16位的通用寄存器 (15)INAH,DXIN指令中的目的操作数只能是AL或AX (16)OUT288H,AL输入输出指令中端口地址应为16位,必须先送给DX;应为MOVDX,288HOUTDX,AL (17)ADD[2400H],1234H两个操作数的字长不确定 (18)XOR[2500R],[BX+10H]两个操作数不能同时为内存操作数 (19)INC[SI]操作数的字长不确定 (20)MUL10MUL指令的操作数不能为立即数 (21)IDIV[BP+DI+1300H]操作数的字长不确定 (22)SALAL,2移位次数大于1时必须先送给CL 3.13将寄存器AH、BH、CH和数据段中偏移地址为2100H,2101H,2102H的3个字节单元内容都置数A0H,最后将寄存器DL的内容与偏移地址为2103H的字节单元内容互换。 试编写程序。 解: DEBUG-A MOVAH,0A0 MOVBH,0A0 MOVCH,0A0 MOV[2100H],AH MOV[2101H],BH MOV[2102H],CH XCHGDL,[2103] 3.14设SP=2000H,AX=3000H,BX=5000H,执行以下3条指令后,问SP=? AX=? BX=? PUSHAX PUSHBX POPAX 解: 指令执行的结果应为SP=2000H-2H-2H+2H=1FFEH AX=5000H,BX=5000H 3.15说明指令LEASI,[BX]与指令MOVSI,[BX]的区别。 解: LEASI,[BX]是地址传送指令,将BX的有效地址取至16位SI寄存器中。 这里取的是操作数的地址。 MOVSI,[BX]是寄存器间接寻址,数据段中偏移地址为BX内容所对应的字送SI中。 取的是操作数。 3.16下列程序执行完后,AX=? BX=? CX=? MOVAX,1122H MOVBX,3344H PUSHAX POPCX XCHGBX,CX LEACX,[BX] 解: AX=1122HBX=1122HCX=1122H 3.17CPU分别执行下列各段程序后,写出各个执行结果的状态标志位OF,SF,ZF,AF,PF,CF的值。 (1)MOVAL,7AH ADDAL,53H (2)MOVBL,0AFH ADDBL,OEAH (3)MOVCL,0FFH ADDCL,01H (4)MOVDL,49H SUBDL,0CAH 解: (1)MOVAL,7AH ADDAL,53H 74H+53H=01110100+01010011=11000111B OF=1,SF=1,ZF=0,AF=0,PF=0,CF=0 (2)MOVBL,0AFH ADDBL,OEAH AFH+EAH=10101111+11101010=10011001B OF=0,SF=1,ZF=0,AF=1,PF=1,CF=1 (3)MOVCL,0FFH ADDCL,01H FFH+01H=11111111+00000001=00000000B OF=0,SF=0,ZF=1,AF=1,PF=1,CF=1 (4)MOVDL,49H SUBDL,0CAH 49H-CAH=01001001-11001010=01111111B OF=0,SF=0,ZF=0,AF=1,PF=1,CF=1 3.18有两个32位的二进制数,分别存放在两个16为寄存器CX: DX和两个16位寄存器SI: DI中,求两数之和,并将和放在两个16位寄存器AXBX中,即AX: BXCX: DX+SI: DI。 试编写程序。 解: 设两个32位数分别为1234567823456789 DEBUG -A MOVCX=1234 MOVDX=5678 MOVDI=6789 MOVSI=2345 ADDDX,DI ADCCX,SI MOVBX,DX MOVAX,CX 3.21分别说明下面两条乘法指令中被乘数、乘数、积所在的位置。 (1)MULBL (2)IMULBX 解: (1)被乘数在AL中,乘数在指令中给出的8位操作数BL中,乘积在AX中。 (2)被乘数在AX中,乘数在指令中给出的16位操作数BX中,乘积在AX中。 3.22若AL=86H,BL=22H,分别执行指令MUL和IMUL后,其结果是多少? OF=? CF=? 解: AL=86H执行MUL指令后OF=1、CF=1 执行IMUL指令后OF=1、CF=1 BL=22H执行MUL指令后OF=1、CF=1 执行IMUL指令后OF=0、CF=0 3.23分别说明下面两条除法指令中被除数、除数、商、余数所在的位置。 (1)DIVCX (2)IDIVCL 解: (1)AX内容除以16位操作数CX结果的商放入AX余数放入DX中。 (2)AX内容除以8位操作数CL结果的商放入AL余数放入AH中。 3.24分别写出CPU执行下面两程序后,寄存器DX=? AX=? (1)MOVAL,7FH CBW CWD (2)MOVAL,80H CBW CWD 解: (1)DX=0000AX=007F (2)DX=0000AX=FF80 3.25分别写出CPU执行下面两段程序后,寄存器AL=? 标志CF=? (1)MOVAL,36H ADDAL,58H DAA (2)MOVAL,49H ADDAL,87H DAA 解: (1)36H+58H=8EH,由于低4位大于9,需要修正,AL=8EH+6H=94H寄存器AL=94H标志寄存器CF=0 (2)49H+87H=D0H,AF=1,由于高4位大于9,需要修正,AL=D0H+66H=36H,CF=1 3.26设AX和CX中存放着两个4位的压缩型BCD码,求两数之和,并将和放在AX中。 试编写程序。 解: ADDAL,BL DAA MOVCL,AL MOVAL,AH ADCAL,BH DAA MOVAH,AL MOVAL,CL 3.27分别写出CPU执行下面两段程序后,寄存器AX=? 标志CF=? (1)MOVAX,0138H ADDAL,35H AAA (2)MOVAX,0533H ADDAL,34H AAA 解: (1)AX=0230H,CF=1 (2)AX=0507H,CF=0 3.28下列程序执行完后,AX=? CF=? MOVAX,3649H ADDAL,AH DAA CBW INCAH ADCAL,17H AAA 解: AX=0102H,CF=1 3.29有如下程序段 MOVAL,45H ADDAL,71H DAA MOVBL,AL ADCAL,19H DAA MOVBH,AL 问,执行完此程序后,BX=3616,标志位PF=1,CF=0. 3.30分别只使用一条指令实现下述各功能。 (1)使AL的低四位清0,高四位不变; (2)使DI的高10位清0,低6位不变; (3)使BL的低4位置1,高四位不变; (4)使SI的高2位置1,低14位不变; (5)使CL中的D2、D3、D4、D5、D6位取反,D0、D1、D7位不变; (6)使BP的高4位取反,低12位不变。 解: (1)ANDAL,0F0H (2)ANDDI,003FH (3)ORBL,0FH (4)ORSI,0C000H (5)XORCL,7CH (6)XORBP,0F000H 3.31编写程序实现: 使寄存器SI的高5位置1,低5位清0,中间6位取反。 解: ORSI,0F800H ANDSI,0FFE0H XORSI,07E0H 3.32写出用一条指令使AX清0的一些指令。 解: MOVAX,0 XORAX,AX SUBAX,AX ANDAX,0 3.34用最少的指令实现下述功能。 (1)使AL的低4位移到高4位,低4位清0; (2)使AH的高4位移到低4位,高4位清0. 解: (1)MOVCL,4 SHLAL,CL (2)MOVCL,4 SHRAL,CL 3.35用移位指令实现如下功能。 (1)将CL中的无符号数乘2; (2)将BX中的带符号数除以4; (3)将DX中的无符号数除以8. 解: (1)SARCL,1 (2)MOVCL,2 SARBX,CL (3)MOVCL,4 SHRDX,4 3.37编程实现如下功能。 (1)将AL的低6位移到高6位,高2位移到低2位; (2)将BL的高6位移到低6位,低2位移到高2位; (3)将BH的高4位与低4位变换; (4)将BP的高8位与低8位变换。 解: (1)MOVCL,2 ROLAL,CL (2)MOVCL,2 RORBL,CL (3)MOVCL,4 RORBH,CL (4)MOVCL,8 RORBP,CL 3.39设AX=1234H,CX=9602H,下列程序执行完后,AL=? ANDAL,AH SHLAL,CL ORAL,CH SARAL,XL XORAL,CL RCLAL, 解: ANDAL,AHAL=10H SHLAL,CLCL=40H ORAL,CHAL=0D6H SARAL,XLAL=0F5H XORAL,CLAL=0F7H RCLAL,AL=0EE 最后结果: AL=0EEH 3.52比较AX和BX中两个无符号数的大小,若AX>BX,则将SI中的高8位和低8位交换;若AX=BX,则将SI中的高7位置1;若AX 试编写程序。 CODESEGMENT ASSUMECS: CODE START: CMPAX,BX JZA1;若AX=BX,转移到A1 JBA2;若AX MOVCL,8;交换SI中高8位和低8位 ROLSI,CL JMPNEXT A1: ORSI,0FE00H;将SI中的高7位置1 JMPNEXT A2: MOVCX,2;将SI中的带符号数除以2 MOVAX,SI;将被除数送给DX: AX MOVDX,0 IDIVCX MOVSI,AX;将所求结果送回SI NEXT: MOVAH,4CH INT21H CODEENDS ENDSTART 3.53在以DS: 3301H为首地址的存
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 微型计算机技术 陈慈发 微机原理 习题 详解 微型计算机 技术 微机 原理