32位汇编习题.docx
《32位汇编习题.docx》由会员分享,可在线阅读,更多相关《32位汇编习题.docx(94页珍藏版)》请在冰豆网上搜索。
32位汇编习题
习题
说明:
英语习题全部上网,可在网上完成。
网址:
选择作业辅导
作业网址:
根据教学内容我们还自己编写了习题.
习 题1
1.Findthedecimalintegerthatisrepresentdbyeachofthese2’scomplementnumbers:
(1)FFH
(2)0H(3)F3E1H(4)B64AH
(5)2EH(6)10H(7)1FH(8)ABH
2.FindtheBCDrepresentationofeachofthefollowingdecimalnumbers:
(1)12
(2)24(3)68(4)127
(5)128(6)255(7)1234(8)2458
3.Findtheheximalrepresentationofeachofthefollowingbinarynumber.
(1)10101101b
(2)1001101001b(3)10b(4)11110b
(5)111110b(6)0101011101b(7)110100101b(8)10000101b
4.FindthedecimalnumberthatisrepresentedbyeachoftheseBCDnumber.
(1)10010001
(2)10001001 (3)00110110 (4)10010000
(5)00001000 (6)10010111 (7)10000001 (8)00000010
5.Findthebyte-length2’scomplementrepresentationofeachofthefollowingdecimalnumbers:
(1)0
(2)127(3)127(4)57
(5)126(6)126(7)128(8)11947
6.Findtheword-length2’scomplementrepresentationofeachofthefollowingdecimalnumbers:
(1)1
(2)10(3)845(5)923
(6)100(7)15000
7.Findthedoubleword-length2’scomplementrepresentationofeachofthefollowingdecimalnumbers:
(1)1
(2)10(3)23(5)100
8.Findthesigneddecimalintegerthatisrepresentdbyeachofthese2’scomplementnumbers:
(1)B64AH
(2)F3E1H(3)6F20H(4)00E1H
9.Findthesigneddecimalintegerthatisrepresentdbyeachofthese2’scomplementnumbers:
(1)1000B64AH
(2)98C2417DH(3)FFFFFE03H(4)0000F3E1H10.Completethefollowingcaculations:
(1)1011+1001
(2)1011-1001(3)1011×1001
(4)10111000÷1001(5)10111001(6)10111001
(7)~1011(8)10111001
11.Findtherangeofdecimalintegersthatcanbestoredin2’scomplementforminabyte.
12.Findtherangeofdecimalintegersthatcanbestoredin2’scomplementforminadoubleword.
13.数码0~9、大写字母A~Z、小写字母a~z对应的ASCII码分别是多少?
ASCII码为0dH、0aH对应的是什么字符?
14.计算机中有一个“01100001”编码,如果把它认为是无符号数,它是十进制的什么数?
如果认为它是BCD码,则表示什么数?
又如果它是某个ASCII码,则代表哪个字符?
15.Whatisoverflow?
Whatiscarry?
What’sthedifferencebetweenthem?
16.Determinewhetheroverfloworcarryoccurs。
(1)003FH+02A4H
(2)1B48H+39E1H(3)6C34H+5028H
(4)7FFEH+0002H(5)FF07H+06BDH(6)2A44H+D9CCH
(7)FFE3H+FC70H(8)FE00H+FD2DH(9)FFF1H+8005H
(10)8ADCH+EC78H(11)9E58HEBBCH(12)EBBCH9458H
(13)EBBCH791CH(14)791CH–EBBCH
习 题2
1.罗列IA-32CPU的8位,16位和32位通用寄存器,并说明各自的作用。
2.什么是标志,它有什么用途?
状态标志和控制标志有什么区别?
画出标志寄存器EFLAGS,说明各个标志的位置和含义。
3.字和双字在存储器中如何存放,什么是“小端方式”?
对字和双字存储单元,什么是它们的对齐地址?
为什么要对齐地址?
4.SupposethatyouhaveanIntel8086.Findthefive-hex-digitaddressthatcorrespondstoeachofthesesegment:
offsetpairs:
(1)FFFH:
0
(2)40H:
17H(3)2000H:
4500H(4)B821H:
4567H
5.实地址模式和保护模式模式下段寄存器的内容有什么区别?
6.什么是段选择器?
什么是段描述符?
什么是描述符表?
它们之间有什么关系?
7.存储器模型和处理器的操作模式有什么关系?
8.数据的默认段是哪个,是否允许其他段存放数据?
如果允许,如何实现,有什么要求?
9.HowmanybytesofmemoryarethereinPCbasedIA-32CPU?
10.什么是端口?
如何编址端口?
习 题3
1.伪指令语句与硬指令语句的本质区别是什么?
伪指令有什么主要作用?
2.什么是标识符,汇编程序中标识符怎样组成?
3.什么是保留字,汇编语言的保留字有哪些类型,并举例说明。
4.Nameanddescribethethreetypesofassemblylanguagestatements.
5.汇编语言程序的开发有哪4个步骤?
分别利用什么程序完成、产生什么输出文件?
6.区分下列概念:
(1)变量和标号;
(2)数值表达式和地址表达式;(3)符号常量和字符串常量。
7.画图说明下列语句分配的存储空间及初始化的数据值:
(1)byte_varbyte’ABC’,10,10h,’EF’,3dup(-1,?
3dup(4))
(2)word_varword10h,-5,’EF’,3dup(?
)
8.请设置一个数据段mydataseg,按照如下要求定义变量:
(1)my1b为字符串变量:
PersonalComputer
(2)my2b为用十进制数表示的字节变量:
20
(3)my3b为用十六进制数表示的字节变量:
20
(4)my4b为用二进制数表示的字节变量:
20
(5)my5w为20个未赋值的字变量
(6)my6c为100的常量
(7)my7c表示字符串:
PersonalComputer
9.变量和标号有什么属性?
10.MASM定义了哪7种存储模式?
TINY和SMALL模式创建什么类型(EXE或COM)程序?
设计32位应用程序应该采用什么模式?
11.分别写出实模式和保护模式下的程序格式框架。
12.设在某个程序中有如下段定义,请画图说明内存空间的分配以及内容。
.data
ORG100h
VARWWORD1234h,5678h
VARBBYTE3,4
AGLIN4
VARDDWORD12345678h
EVEN
BUFFBYTE10DUP(?
)
MESSBYTE’HELLO’
MESS_VARB_OFFSETDWORDOFFSETVARB+OFFSETMESS
VAR_TYEPBYTETYPEBUFF+TYPEMESS+TYPEVARD
VAR_SIZEBYTESIZEVARW+SIZEBUFF+SIZEMESS
VAR_LENGTHBYTELENTHVARW+LENTHVARD
BUFF_LSBYTELENTHBUFF+SIZEVARW
BEGIN_TYPEBYTETYPEBEGIN
BEGIN_OFFSETDWORDOFFSETBEGIN
.code
BEGIN:
RET
ENDBEGIN
习 题4
1.Inrealmode,supposethatDS=2000H、BX=0100H、SI=0002H,memory[20100H]~[20103H]storedata12,34,56,78H,[21200H]~[21203H]storedata2A,4C,B7,65H.Givethevaluesaftereachinstructionperformed.
(1)movax,1200h
(2)movax,bx
(3)movax,[1200h]
(4)movax,[bx]
(5)movax,[bx+1100h]
(6)movax,[bx+si]
(7)movax,[bx][si+1100h]
2.控制转移类指令中有哪三种寻址方式?
3.Whatisshortjump,nearjumpandfarjump?
Whatareintersegmentjumpandintrasegmentjump?
4.实模式下,假设DS=2000H,BX=1256H,SI=528FH,位移量TABLE=20A1H,[232F7H]=3280H,[264E5H]=2450H,试问执行下列段内间接寻址的转移指令后,转移的有效地址是什么?
(1)jmpbx
(2)jmptable[bx]
(3)jmp[bx][si]
5.什么是操作码、操作数和寻址方式?
有哪三种给出操作数的方法?
6.什么是有效地址EA?
80x86的操作数如果在主存中,有哪些寻址方式可以存取它?
7.Describestheaddressingmodeineachinstruction.SupposethatBX=2000H,DI=40H,givethevaluesofDXorEA.
(1)movdx,[1234h]
(2)movdx,1234h
(3)movdx,bx
(4)movdx,[bx]
(5)movdx,[bx+1234h]
(6)movdx,[bx+di]
(7)movdx,[bx+di+1234h]
(8)moveax,[ebx+4*edx+20]
(9)moveax,[ebx][edx]
习 题5
1.已知用于LED数码管的显示代码表为:
LEDtable byte0c0h,0f9h,0a4h,0b0h,99h,92h,82h,0f8h
byte80h,90h,88h,83h,0c6h,0c1h,86h,8eh
它依次表示0~9、A~F这16个数码的显示代码。
现编写一个程序实现将字节变量lednum中的一个数字(0~9、A~F)转换成对应的LED显示代码。
2.Writeapieceofcodesequence:
storethreegradesinarray,caculatetheaveragegradeofthem.
3.设X、Y、Z、V均为16位带符号数,分别装在X、Y、Z、V存储单元中,阅读如下程序段,得出它的运算公式,并说明运算结果存于何处。
movax,X
imulY
movcx,ax
moxbx,dx
movax,Z
cwd
addcx,ax
adcbx,dx
subcx,540
sbbbx,0
movax,V
cwd
subax,cx
sbbdx,bx
idivX
4.请分别用一条汇编语言指令完成如下功能:
(1)把EBX寄存器和EDX寄存器的内容相加,结果存入EDX寄存器。
(2)用寄存器EBX和ESI的基址变址寻址方式把存储器的一个字节与AL寄存器的内容相加,并把结果送到AL中。
(3)用EBX和位移量0B2H的寄存器相对寻址方式把存储器中的一个字和ECX寄存器的内容相加,并把结果送回存储器中。
(4)用的间接寻址方式把存储器单元04004000H中的一个字与数3412H相加,并把结果送回该存储单元中。
(5)把数0A0H与AL寄存器的内容相加,并把结果送回AL中。
5.给出下列各条指令执行后的AL值,以及CF、ZF、SF、OF和PF的状态:
moval,89h
addal,al
addal,9dh
subal,al
decal
incal
6.Findtheerroroccursinthefollowinginstructions:
(1)movcx,dl
(2)moveip,ax
(3)moves,1234h(4)moves,ds
(5)moval,300(6)mov[esp],ax
(7)moveax,ebx+edi(8)mov20h,ah
(9)movzxax,82h(10)mov[eax],10
(11)moval,1200(12)mov100,eax
(13)mov[esi],[edi](14)shldeax,var,8
7.分别写出实现128位二进制数的加法和减法的序列指令。
8.写出实现下面功能的指令序列:
(1)x是16位有符号数,y是16位二进制有符号数,z=x+y
(2)x是16位有符号数,y是32位二进制有符号数,z=x+y
(3)x是32位有符号数,y是8位二进制有符号数,z=x+y
(4)x是32位有符号数,y是32位二进制有符号数,z=x×y
(5)x是16位无符号数,y是16位二进制无符号数,z=x÷y
(6)x是16位有符号数,y是16位二进制有符号数,z=x÷y
(7)x是32位有符号数,y是16位二进制有符号数,z=x×y
(8)x是16位有符号数,y是16位二进制有符号数,z=x×y
9.编写程序实现算术表达式:
m=(x*5)/(ymodz),其中的x、y、z、m都是32位有符号数。
10.设(eax)=0c5ffh,(ebx)=9e00h,试分析下列各条指令执行后ax、bx或cx寄存器以及ZF、SF、CF、OF、PF的状态。
(1)andeax,ebx
(2)xoreax,0ff00h
(3)oreax,0ff00h
(4)shleax,4
(5)sarebx,4
(6)rorebx,16
(7)btebx,8
(8)bsfecx,ebx
11.编写下列各功能程序段:
(1)al寄存器的各位变反;
(2)ebx寄存器的低4位置1;
(3)eax寄存器的低4位清零;
(4)ecx寄存器的低4位变反;
(5)采用移位指令实现ax5,结果送bx,要求ax的内容保持不变;(设结果无溢出)
12.编写程序分解EAX寄存器的内容:
取高7位存入双字变量value1,取中间15位存入双字变量value2,取最后10位存入双字变量value3。
13.编写完整的程序完成例5-47的功能:
利用作者提供的宏指令ReadUDecByte从键盘接收一个字节的十进制数,利用例题5-47的代码,将这个十进制数转换成十六进制字符存放到HexStr中,用输出字符串宏(WriteString)显示转换的结果。
习题6
1.转移指令有几种类型?
各自有什么特点?
答:
段内近转移,段内短转移,段间远转移
直接寻址,间接寻址
2.指出下面转移指令的类型(相对近转移,相对短转移,间接转移)。
.DATA
addrSoreDWORD?
.CODE
……
again:
……
(3instructions)
jmpagain;短转移
……
(200instructions)
……
jmpagain;近转移
……
jmpaddrStore;段内间接转移
……
jmpeax
……
jmp[edi]
3.代码段有以下指令:
ADDEAX,EBX
JNOL1
JNCL2
SUBEAX,EBX
JNCL3
JNCL4
JMPSHORTL5
如果EAX和EBX的内容如下:
(1)EAX=0102147BH,EBX=120180DCH;L1
(2)EAX=12348756H,EBX=800080DCH;L1
(3)EAX=D0230000H,EBX=9FD0000H;L3
(4)EAX=94B70000H,EBX=B568000H;L1
指令执行完后,程序怎样转移?
4.假设EAX和EBX的内容是无符号数,ECX和EDX的内容是有符号数,请用比较指令实现以下判断:
(1)如果EDX的内容大于ECX的内容,则转去执行L1;
cmpedx,ecx
jgL1
(2)如果EAX的内容大于EBX的内容,则转去执行L2;
cmpeax,ebx
jaL2
(3)如果ECX=0,则转去执行L3;
cmpecx,0
jzL3
(4)EAX-EBX是否会发生溢出,如果发生溢出则转去执行L4;
subeax,ebx
joL4
(5)如果EBX的内容小于EAX的内容,则转去执行L5;
cmpebx,eax
jbL5
(6)如果ECX的内容小于EDX的内容,则转去执行L6。
cmpecx,edx
jlL6
5.已知EAX=0000004FH,VALUE=FFFFFFFFFFFFFF38H。
请指出下面每一个语句是否会引起转移?
(a)cmpeax,value
jldest;N
(b)cmpeax,value
jbdest;Y
(c)cmpeax,04fh
jedest ;Y
(d)cmpeax,79
jnedest;N
(e)cmpvalue,0
jbedest;N
(f)cmpvalue,-200
jgedest ;Y
(g)cmpeax,200
jsdest;y
(h)addvalue,200
jzdest;N
6.编写程序测试STATUS中的状态:
如果STATUS=0,则转去执行L0;如果D0,D3,D5位为1则转去执行L1;如果D31,D29为0则转去执行L2;如果D15,D14,D13为1,则转去执行L3。
teststatus,FFFFH
jzL0
teststatus,29H
jneL1
teststatus,C0000000H
jzL2
teststatus,00e00000H
jneL3
7.指出下面每一个循环的循环次数:
(a)movecx,10
again:
……
loopagain
10
(b)movecx,1
again:
……
loopagain
1
(c)movecx,0
again:
……
loopagain
4294967296
(c)movecx,-1
again:
……
loopagain
4294967295
8.编写一个程序将双字数组ARRAY中的每一个元素加1(不考虑溢出)。
.386
.modelflat,stdcall
.data
arraydword35,89,-39,89,45,78,-90
countequ$-array
.code
startup:
movecx,count
movebx,offsetarray
again:
inc[ebx]
incebx
loopagain
ret
endstart
9.在双字型无序数组中找出最大数,存入max单元中。
.386
.modelflat,stdcall
.data
arraydword35,89,-39,89,45,78,-90
countequ$-array
.code
start:
movecx,count
movebx,offsetarray
moveax,[ebx]
incebx
again:
cmpeax,[ebx]
jbnext
moveax,[ebx]
next:
incebx
loopagain
ret
endstart
10.在x、y、z三个双字型变量中存放着3个无符号数,若3个数均不为0,求出它们的和存入w单元中(不考虑溢出);若有一个以上的数为0,将其他两个单元也清0。
.386
.modelflat,stdcall
.data
xdword?
ydword?
zdword?
.code
start:
cmpx,0
jzcls
cmpy,0
jzcls
cmpz,0
jzcls
moveax,x
addeax,y
addeax,z
movw,eax
jmpendpro
cls:
andx,0
andy,0
andz,0
endpro:
ret
endstart
11.把一个含有100字节型数据的数组分成两组:
正数数组P和负数数组N。
.386
.modelflat,stdcall
.data
arraybyte100dup(?
)
Pbyte100dup(?
)
Nbyte100dup(?
)
.code
star