汇编指令复习题汇总.docx
- 文档编号:7291336
- 上传时间:2023-01-22
- 格式:DOCX
- 页数:25
- 大小:25.27KB
汇编指令复习题汇总.docx
《汇编指令复习题汇总.docx》由会员分享,可在线阅读,更多相关《汇编指令复习题汇总.docx(25页珍藏版)》请在冰豆网上搜索。
汇编指令复习题汇总
1.将1234h赋给cx
Movcx,1234h
2.将bh的内容设置成和bl相同。
Movbl,bh
3.执行moval,-5h后,al里是什么内容?
(二进制表示)
11111011
4.将dl里的内容存到1000h单元。
Mov[1000h],dl
5.将地址为1000h的存储单元里的字节内容拷贝到地址为2000h单元。
Movdh,[1000h]
Mov[2000h],dh
6.将地址为1000h的存储单元里的字内容拷贝到地址为2000h单元。
Movsi,[1000h]
Mov[2000h],si
7.将ds的值赋给es。
Movax,ds
Moves,ax
8.将1234h赋给ds。
Movbx,1234h
Movds,bx
9.将66h(字节)赋给地址为2000h的单元。
Movbyteptr[2000h],66h
10.将66h(字)赋给地址为3000h的单元。
Movwordptr[3000h],66h
二.堆栈指令练习pushpop
1.将ax入栈。
Pushax
2.将1000h单元里的内容入栈。
Push[1000h]
3.将al入栈。
Pushax
4.将1234h入栈。
Movax,1234h
Pushax
5.将出栈数据存入bx。
Popbx
6.将出栈数据存入20h单元。
Pop[20h]
7.用三种方法实现将ax、bx数据交换。
A..movcx,ax
Movax,bx
Movbx,cx
B.Pushax
Pushbx
Popax
Popbx
C.Xchgax,bx
8.已知全班汇编语言成绩表存放在以mark为首地址的存储区内,根据学生编号(从0号开始)查询该生成绩。
算术运算类指令练习
Movbx,offsetmark(在前面加offset意思是把分数取出)
Moval,num(num是给学生编号)
Xlat(查表指令)
9.ax和内存单元y相加,结果存于y
Addy,ax
10.ah和al相加,结果存于ah
Addah,al
11.内存单元x和内存单元y相加,结果存于x
Movax,y
Movx,ax
12.求bx减100
Subbx,100
13.求ax、si、进位位之和,结果存于ax
Adcax,si
14.求ax减si,并减去借位位,结果存于ax
Sbbax,si
15.将内存单元x加1,写出两种指令,有何异同?
Addx,1
Incx(inc是只增指令,直接加1,不影响cf标志)
16.将内存单元y减1,写出两种指令。
Suby,1
Decy
17.求dx的相反数。
Negdx
18.比较si和di
Cmpsi,di(si对于di,即将si-di来进行比较)
19.求ax和bx的乘积(有符号数乘法)
Imulbx
20.设x、y为字节单元,求x*y(无符号数乘法),积存于字单元z中。
Moval,x
Muly
Movz,ax
21.将al扩展到ax
Cbw(cbw只认al到ax,其他的都不行,可以和14比较)
22.将bh扩展到bx
Moval,bh
Cbw
Movbx,ax
23.将ax扩展到dx:
ax
Cwd(cwd也只扩展到dx:
ax)
24.逻辑运算指令练习
已知有内存变量:
X1=12h,x2=34h,x3=56h,x4=78h,x5=9ah,x6=0bch,x7=0deh,y1=12h,y2=34h,y3=56h,y4=78h,y5=9ah,y6=0bch,y7=0deh,另设(al)=0abh,求:
求x1与al
求x2或al
求x3异或al
求x4位相反数
将x5的高四位清零
将x6的低三位置1
将x7的第0、2、4、6位取反
测试al是否为偶数?
将y1逻辑左移2位
将y2逻辑右移3位
将y3算术左移1位
将y4算术右移4位
将y5循环右移2位
将y6循环左移1位
将y7带进位循环右移1
解:
datasegment
X1db12h
X2db34h
X3db56h
X4db37h
~
~
Y7db0deh
Dataends
Codesegment
Assumecs:
code,ds:
data
Start:
movax,data
Movds,ax
Moval,0abh
Andx1,al(求x1和al)
Orx2,al(求x2或al)
Xorx3,al(求x3异或al)
Notx4(x4的相反数)
Andx5,0fh(将x5的高四位清空)
Orx6,00000111b(将x3的低三位置1)
Xorx7,01010101b(将x7的0,2,4,6,8位相反)
Testal,1(测试al是否为偶数)
Shly1,2(逻辑左移2位)
Shry2,3(逻辑右移3位)
Saly3,1(算术左移1位)
Sary4,4(算术右移4位)
Rory5,2(循环右移2位)
Roly6,1(循环左移1位)
Rcry7,1(将y7带进位循环右移1位)
三.
1.按要求完成进制转换
(1)78ch=011110111100b=1980d
(2)562q=101110010b=370d
(3)90d=01011010b=5ah
(4)1110100.111b=164.7q=74.eh
2.当字长位八位时,写出下面各数的原码,补码和反码
(1)25
(2)-25(3)100(4)-100
原码:
00011001100110010110010011100100
反码:
00011001111001100110010010011011
补码:
00011001111001110110010010011100
(真值的由来100=64+32+4=26+25+22=0*27+1*26+1*25+0*24+0*23+1*22+0*21+0*20,
所以100的真值是01100100,正数的真值=原码=补码=反码)
3.列出数字0~9、大写字母a~z、小写字母a~z的ascii码值
30h~39h41h~5ah61h~7ah
4.完成下列二进制数的加减运算
(1)10101010+11110000=110011010
(2)11001100+01010100=100100000
(3)11011010-01010010=10001000
(4)11101110-01001101=10100001
5.说明二进制(bit)、字节(byte)、字(word)、双字(doubleword)的含义及互相的关系。
位(bit):
一个二进制
字节(byte):
8位二进制
字(word):
一般为机器字长,在8086机器中为16位二进制,即两个字节
双字(doubleword):
双倍字长,在8086机器中为32位二进制
6.8088微处理器中有哪些寄存器?
说明它们的功能及分组情况?
7.一台微型计算机,数据线有8根,地址线有16根,如果采用字节编址,那么它可以访问的最大存储空间是多少字节?
试用十六进制数来表示该机的地址范围?
答:
216=64kb,0000h~ffffh
8.8086的寄存器中,有哪些16位寄存器可分为两个8位寄存器来使用?
答:
ax(ah,al)、bx(bh,bl)、cx(ch,cl)、dx(dh,dl)
9.8086/8088的标志寄存器f种有哪些标志位?
它们的名称和功能是什么?
答:
cf—进位标志(carryflag)。
若cf=1,表示算术运算时产生进位或借位,否侧cf=0.
移位指令会影响cf
pf—奇偶标志(parityflag).若pf=1,表示操作结果中“1”的个数为偶数,否侧
pf=0。
这个标志主要用于检查数据传送过程中的错误。
af—辅助进位标志(auxiliarycarryflag).若af=1表示字节运算产生低半字节向高半字节的进位或错位,否则af=0。
辅助进位也称半进位标志,主要用于bcd码运算的十进制调整。
zf—全零标志(zeroflag).若zf=1,表示操作结果全为零,否则zf=0.
sf—符号标志(signflag)。
若sf=1,表示符号数运算后的结果为负数,否则sf=o.
of—溢出标志(qverflowflag).若of=1,表示当进行算术运算时,结果超过了最大范围,否则of=0.
if—中断允许标志(interruptflag).若if=1,则cpu可以响应外部可屏蔽中断请求;若if=0,则cpu不允许响应中断请求。
If的状态可由中断指令设置。
df—方向标志(directionflag).若df=1,表示执行字符串操作时按着从高地址向低地址方向进行;否则df=0.df位可由指令控制。
tf—单步标志(traceflag).又称跟踪标志。
该标志位在调试程序时可直接控制cpu的工作状态。
当tf=1时为单步操作,cpu每执行一条指令就进入内部的单步中断处理,以便对指令的执行情况进行检查;若tf=0,则cpu继续执行程序。
10.在8086系统中,段地址和偏移地址如下表示,请分别计算它们的物理地址
(1)f000:
0100物理地址:
f0000h+0100h=f0100h
(2)2350:
1abc23500h+1abch=24fbc
(3)3200:
123432000h+1234h=33234h
(4)5000:
010f50000h+010eh=5010eh
(5)10e0:
202010e00h+2020h=12e20h
(6)2010:
102020100h+1020h=21120h
(7)1000:
100010000h+1000h=11000h
(8)c0c0:
c0c0c0c00h+c0c0h=cccc0h
11.8086/8088指令系统中操作数的类型有哪几种?
关于操作数的寻址方式有哪几类?
答:
(1)立即数、寄存器数和内存单元数。
(2)立即寻址、寄存器寻址、寄存器间接寻址、值接寻址、寄存器相对寻址、
基址加变址寻址、基址加变址相对寻址
12.指出段地址、偏移地址与物理地址之间的关系。
有效地址ea是指什么?
答:
段地址左移四位加上偏移地址形成20位的物理地址。
ea是指段内偏移地址,即表示段内某单元相对于段起始地址的空间位置。
13.指出能用于寄存器间接寻址及变址寻址的寄存器有哪些?
它们通常与哪个段寄存器配合形成物理地址?
答:
能用于寄存器间接寻址及变址寻址的寄存器有基址寄存器bx和bp,变址寄存器si和di,bx、si、di与ds配合形成物理地址,而bp与ss配合形成物理地址。
14.用汇编语言指令实现以下操作
(1)将寄存器ax、bx和dx的内容相加,和放在寄存器dx中
adddx,ax
adddx,bx
(2)用基址变址寻址方式(bx和si)实现al寄存器的内容和存储器单元buf中的一个字节相加的操作,和放到al中。
addal,[bx][si]
(3)用寄存器bx实现寄存器相对寻址方式(位移量为100h),将dx的内容和存储单元中的一个字相加,和放到存储单元中。
add100h[bx],dx
(4)用直接寻址方式(地址为0500h)实现将存储器中的一个字与立即数3abch相加,和放回该存储单元中
addwordptr[500h],3abch
15.指出下列指令中源操作数及目的操作数的寻址方式。
(1)subbx,[bp+35]
寄存器寻址寄存器相对寻址
(2)movax,2030h
寄存器寻址立即寻址
(3)mov[di+bx],ax
基址加变址寻址寄存器寻址
(4)addax,50h[di]
寄存器寻址寄存器相对寻址
(5)moval,[1300h]
寄存器寻址直接寻址
(6)mulbl
寄存器寻址目的操作数为隐含寄存器(bl隐含的是al,若bx,则隐含ax)
16.已知(ds)=1000h,(si)=0200h,(bx)=0100h,(10100h)=11h,(10101h)=22h,
(10600h)=33h,(10601h)=44h,(10300h)=55h,(10301h)=66h,(10302h)=77h,
(10303h)=88h,试分析下列各指令执行完后ax寄存器的内容。
(1)Movax,2500h
(ax)=2500h
(2)Movax,500h[bx]
(ax)=4433h
(3)Movax,[300h]
(ax)=6655h
(4)Movax,[bx]
(ax)=2211h
(5)Movax,[bx][si]
(ax)=6655h
(6)Movax,[bx+si+2]
(ax)=8877h
17.判断下列指令是否有错,如果有错,说明理由
(1)subbl,bx
两个操作数的宽度不一样
(2)movbyteptr[bx],3456h
3456h太大
(3)shlax,ch
移位的位数不能是ch(只能是cl)
(4)movah,[si][di]
不能用两个变址寄存器来作为源操作数
(1.[si]、[di]2.[bx]、[bp]只能1和2配,不能1和1或是2和2配)
(5)shrax,4
对的
(6)movcs,bx
不能对cs实现传送操作
(7)mov125,cl
立即数不能作为目的操作数(若是125加上[]变为内存,则行)
(8)movax,byteptr[si]
字节不能传送到字里面(源操作数限定为字节,与目的操作数宽度不同,不能实现传送)
(9)mov[di],[si]
两个操作数不能同时为内存
12.设(ds)=1000h,(es)=2000h,(ss)=3000h,(si)=0080h,(bx)=02d0h,
(bp)=0060h,试指出下列指令的源操作数字段是什么寻址方式,它的物理地址是多少?
(1)movax,0cbh
立即寻址
(2)movax,[100h]
直接寻址
物理地址为:
10100h
(3)movax,[bx]
寄存器间接寻址
物理地址为:
102d0h
(4)movax,[bp]
寄存器间接寻址
物理地址为:
20060h
(5)movax,[bp+50]
寄存器相对寻址
物理地址为:
200b0h
(6)movax,[bx][si]
基址加变址寻址
物理地址为:
10350h
13.分别说明下列每组指令中的两条指令的区别
(1)andcl,0fhorcl,0fh
按位相“与”按位相“或”
高四位为0000高四位保留原值
低四位保留原值低四位为1111
(2)movax,bxmovax,[bx]
bx为寄存器的内容送到axbx为寄存器内存单元的内容送到ax
(3)subbx,cxcmpbx,cx
把相减的结果给bx不把结果给bx,根据标志位的情况做进一步的动作
(4)andal,01htestal,01h
Al内容与01h相“与”·
结果为“000000x”·
把结果送回al不把结果给al(即不保存结果)
(5)rolax,clrclax,cl
循环左移,进位标志不参与循环循环左移,进位标志参与循环
(6)pushaxpopax
入栈(将ax内容存入栈顶指针处)出栈(将栈顶内容弹出装入ax中)
14.试分析以下程序段执行完后bx的内容是什么
movbx,1030h1030h=1000000110000
movcl,3左移3位得1000000110000000=8180h
shlbx,cl
decbxdec减1得1000000101111111=817f
15.写出下列指令序列中每条指令的执行结果,并在debug环境下验证,注意各标志位的变化情况.
movbx,126bh
addbl,02ah
movax,2ea5h
addbh,al
sbbbx,ax
adcax,26h
subbh,-8
16.8086汇编语言指令由几部分组成?
各部分的作用是什么?
答:
(1)由[名字](指令操作符)[操作数][注释]组成
(2)[名字]可以是常量名,变量名,过程名,段名等标识符,起标识和标记的作用。
(指令操作符)字段说明指令的功能
[操作数]字段提供指令操作所需要的源数据和目的数据
[注释]用于程序员对语句或程序段落进行解释说明
17.请解释变量和标号的含义,两者有何区别?
答:
所定义内存单元的名称为变量,可进行读写功操作。
一般为数据区。
标号是某条指令的地址标记,在代码段
18.试描述汇编语言源程序的一般结构
stacksegmentstack
dw256dup(?
)
stackends
datasegment
·····
dataends
codesegment
assumecs:
code,ss:
stack,ds:
data
start:
·······
······
codeends
endstart
19.在buf1变量中一次存储了5个字数据,接着定义了一个名为buf2的字单元,表示如下
buf1dw8765h,6ch,0,1ab5h,47eah
buf2dw?
(1)设bx中是buf1的首地址,请编写指令将数据50h传送给buf2单元
movmordptr[bx+10],50h
(2)请编写指令将数据ffh传送给数据为0的单元.
movmordptr[bx+4],0ffh
20.下面是一个数据段的定义,请用图表示它们在内存中存放的形式
datasegment
a1db25h,35h,45h
a2db3dup(5)
a3dw200,3ab6h
a4dw3000h,6a6fh
dataends
答:
a125h
35h
45h
a205h
05h
05h
a300h
02h
b6h
3ah
a400h
30h
6fh
6ah
21.有一个数据段定义了如下6个变量,请写出该数据段
(1)buf1为十进制数字节变量:
64;
(2)buf2为字符串变量:
’teacher’;
(3)buf3为十六进制数字节变量;2fh;
(4)buf4为双字变量:
657ah;
(5)buf5为字变量:
657ah;
(6)buf6为二进制数字节变量:
10101101b。
datasegment
buf1db64
buf2db‘teacher’
buf3db2fh
buf4dd657ah
buf5dw657ah
buf6db10101101b
一、熟悉用汇编语言编写程序的基本结构
现有程序:
Datasegment
firstdwf234h,1122h(不能以字母开头,在前面加零,写成0f234h)
seconddw5678h,9765h(要在英文状态下写,才是半角)
thirddw?
?
Dataends
Codesegment
asumecs:
code,ds:
data(是assume)
Start:
m0vax,data(是o,不是零)
movds,ax
movax,first1(buyao1)
addax,second
movthird,ax
movax,first+2
adcax,second+2
movthird+2,ax
jmp$
Codeends
endsstart(改为end)
1、在系统中输入上述程序,编译后改正错误,直到调试通过。
(提示:
有6处错误)
2、为每个语句加上注释,写清每个语句的含义和作用。
3、整个程序完成什么功能?
在系统中查看运行后的结果。
(48ach,0410h)
三、将下列注释中的问题用指令编程实现。
Datasegment
;定义三个变量:
x1=12h,x2=34h,x3=56h
Dataends
Codesegment
assumecs:
code,ds:
data
Start:
;将data段初值装载到ds段寄存器中
movax,1111h
movbx,2222h
movdx,3333h
movcx,0cccch
;1、将寄存器ax、bx和dx内容相加,和放在寄存器dx中,ax、bx中值不变。
;2、将x1的值送给y
;3、将x2的值减去al的值。
;4、求x3的相反数。
;5、将cx的最高位清0.
;6、将cx的最低3位置1.
;7、将cx的第13、14位取反。
(最低位为第0位)
;8、将ax逻辑左移2位。
;9、将bx算术右移1位。
;10、将bx循环左移3位。
jmp$
codeends
endstart
解:
datasegment
X1db12h
X2db34h
X3db56h
Ydb?
Dataends
Codesegment
Assumecs:
code,ds:
data
Start:
movax,data
movds,ax
movax,1111h
movbx,2222h
movdx,0ccch
adddx,ax
adddx,bx
moval,x1
movy,al
subx2,al
negx3
andcx,01111111b
orcx,00000111b
xorcx,0000000000001100b
shlax,2
sarbx,1
rolbx,3
jmp$
codeends
endstart
四、顺序程序设计
1、计算z=x-y。
其中,x、y、z均为字节型变量。
设x=4,y=6。
要求:
运算后,x、y的值不被破坏。
检查z中的结果显示什么?
其真值是多少?
datasegment
Xdb,4
Ydb,6
Zdb,?
Dataends
Codesegment
assumecs:
code,ds:
data
start:
movax,data
movdx,ax
movax,4
movbx,6
subax,bx
movdx,ax
movz,dx
jmp$
codeends
endstart
2、编程将字型变量a的高4位置0,低4位置1,中间8位取反。
解:
datasegment
Adw1234h
Dataends
Codesegment
Assumecs:
code,ds:
data
Start:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 汇编 指令 复习题 汇总