汇编语言程序设计复习提纲1解析.docx
- 文档编号:30105711
- 上传时间:2023-08-05
- 格式:DOCX
- 页数:23
- 大小:170.06KB
汇编语言程序设计复习提纲1解析.docx
《汇编语言程序设计复习提纲1解析.docx》由会员分享,可在线阅读,更多相关《汇编语言程序设计复习提纲1解析.docx(23页珍藏版)》请在冰豆网上搜索。
汇编语言程序设计复习提纲1解析
2012年汇编语言程序设计复习提纲
一、选择
1.CPU要访问的某一存储单元的实际地址称(C)
A.段地址B.偏移地址C.物理地址D.逻辑地址
2.某存储单元的物理地址是12345H,可以作为它的段地址有(D)
A.2345HB.12345HC.12340HD.1234H
3.8088/8086存储器分段,每个段不超过(A)。
A.64K个字节B.32K个字节C.1M个字节D.64K个字节
4.8086/8088系统执行传送指令MOV时(A)。
A.不影响标志位B.影响DF方向标志
C.影响SF符号标志D.影响CF进位标志
5.无条件转移指令JMP实现段间间接转移,转移的目标地址在(B)
A.某个字存储单元中B.某个双字存储单元中
C.某个16位通用寄存器中D.两个16位通用寄存器中
6.设(SS)=33A8H,(SP)=1230H,执行PUSHBX和PUSHF两条指令后,堆栈顶部的物理地址是(C)。
A.34CB0HB.34CAEHC.34CACHD.34CAAH
7.BUFDB12H,34H
MOVAX,WORDPTRBUF
上述指令语句执行后AX中的内容是(A)
A.3412HB.1234HC.0200HD.0012H
8.8086存贮器组织是将存储器划分为段,可作为段的起始地址是(B)。
A.185A2HB.00020HC.01004HD.0AB568H
9.已知AL=79H,BL=0B1H,则指令ADDBL,AL执行后,OF和CF的值分别为(B)。
A.0,0B.0,1C.1,0D.1,1
10.要写8位数据到端口1234H中的指令应是(A)。
A.MOVDX,1234HB.MOVDX,1234H
OUTDX,ALINAL,DX
C.INAX,1234HD.OUTDX,1234H
11.没有语法错误的输入指令是(A)
A.INAL,30HB.IN30H,AL
C.INDX,ALD.INAL,[BX]
12.使用DOS功能调用时,子程序编号应放在(B)。
A.ALB.AHC.AXD.任意指定
13.下面各传送指令中,正确的是(C)
A.MOV[DI],[SI]B.MOV[DX+DI],AL
C.MOVWORDPTR[BX],0100HD.MOVAL,BX
14.设DF=1,每次执行MOVSB指令时,SI和DI均要分别(A)。
A.减1B.减2C.加1D.加2
15.比较两个无符号的数A、B,当A≥B时程序转移的指令为(D)。
A.JAB.JNAC.JBD.JNB
16.下面指令中属于伪指令的是(C)。
A.movax,0B.int21hC.codesegmentD.pushax
17.关于指令movax,[bx+si+idata]的数学化描述正确的是(A)。
A.(ax)=((ds)*16+(bx)+(si)+idata)B.(ax)=((ds)+(bx)+(si)+idata)
C.(ax)=((bx)+(si)+idata)D.ax=(bx)+(si)+idata
18.当CX=0时,REPMOVSB执行的次数为(B)。
A.1次B.0次C.65535次D.65536次
19.INT4AH在中断向量表中的物理地址是(B)。
A.0:
127HB.0:
128HC.0:
12CHD.0:
12DH
20.在8086中,若I/O端口号超过255,则通常是由(D)寄存器提供。
A.AXB.BXC.CXD.DX
21.使用DOS系统功能调用时,使用的软中断指令是(D)
A.INT21B.INT10HC.INT16HD.INT21H
22.下列说法正确的是(C)。
A.用户可以编程修改FFFF:
0处的指令,使得CPU不去执行BIOS中的硬件系统检测和初始化程序。
B.int19h中断例程,可以由DOS提供。
C.在BIOS键盘缓冲区中,一个键盘输入用一个字单元存放,高位字节存放扫描码,低位字节存放字符码。
D.若IF=0,则外部中断均不能响应。
23.下列关于中断的说法不正确的是(D)。
A.8086CPU用中断类型码通过中断向量表找到相应的中断处理程序的入口地址。
B.在in和out指令中,只能使用ax或al来存放从端口中读入的数据或要发送到端口中的数据。
C.在PC系统中,外中断源分可屏蔽中断和不可屏蔽中断两类。
D.int19H中断例程可以由DOS提供。
二、填空题
1.利用编译器得到一个可执行文件,需要对编写好的源程序文件(*.asm)进行编译以得到目标文件(*.obj)和链接以生成可执行文件(*.exe)。
2.汇编语言程序设计中每个语句的注释项的开始必须用符号;,程序结束的伪指令为endstart。
3.在计算机中专门有连接CPU和其他芯片的导线,通常称为总线。
总线在逻辑上划分为地址总线、数据总线和控制总线。
4.8088/8086CPU的逻辑地址由段地址和偏移地址两部分组成,设某单元的物理地址是12345H,试写出下列二种不同的逻辑地址表示:
1)1000H:
2345H;2)1200H:
0345H。
5.设(SP)=001EH,执行返回指令RET后(SP)=0020H;执行中断返回指令IRET后(SP)=0024H。
6.8088/8086CPU在指令中可以作为寄存器间接寻址访问存储单元的4个寄存器是BX、SI、DI、BP。
7.8086不可屏蔽中断的中断类型码为2,其不受标志寄存器的IF位控制。
8.用Debug查看内存,结果如下:
0000:
00000011223344556677-8899AABBCCDDEEFF
则1号中断源对应的中断处理程序入口地址的段地址为7766;偏移地址为5544。
9.一旦执行cli指令,8088CPU将处于关中断状态,这时IF=0,CPU将不响应可屏蔽中断。
10.设有数据定义如下:
ARRAYDW1000H,2000H,3000H,4000H,5000H
BUFDW?
要求完成:
(1)用一条指令完成将ARRAY的偏移地址送BX;
movbx,offsetARRAY
(2)用一条指令完成将ARRAY的第一字节单元内容送AL;
moval,ARRAY
(3)用一条指令完成将ARRAY数组的长度(字节数)送CX。
Movcx,offsetBUF-offsetARRAY
11.要求用一条指令完成以下功能:
1)从端口地址3AH输入一个8位数据:
inal,3AH
2)将寄存器AH的偶数位清0:
andah,10101010B
3)将寄存器AX中内容通过移位的方法扩大1倍(假定原来AX内容不超过215):
shlax,1
三、指令分析题
1.DA1DB′01234′
DA2DB5DUP(0)
MOVSI,0
MOVCX,5
LOP:
MOVAL,DA1[SI]
ADDAL,11H
ORAL,01H
MOVDA2[SI],AL
INCSI
LOOPLOP
试问:
(1)程序段执行后,写出DA2各字节中的数据。
41H43H43H45H45H
2.以下指令执行后,DA2中的内容是CBH,AL的内容为34H。
DAlDW1234H
DA2DB0FFH
……
MOVAL,BYTEPTRDAl
SUBDA2,AL
3.已知AX=0FF70H,BX=30H,CF=1,以下指令执行后,AX=FFFFH,BX=FF70H。
ORBX,0FF40H
SBBAX,BX
4.MOVBL,64H
MOVCL,03H
SUBAX,AX
AGAIN:
ADDAL,BL
ADCAH,0
DECCL
JNEAGAIN
问:
(1)该程序段完成的功能是:
求64H乘3的值
(2)AX=__12CH__。
5.已知数据段中定义
DAT1DB12H,34H,56H,78H
MOVCX,0
MOVAX,WORDPTRDAT1
MOVCL,DAT1+3
当程序段执行完后AX=__3412H______,CX=____0078H____。
6.DA1DB83H,72H,61H,94H,5AH
┇
MOVCX,WORDPTRDA1
ANDCX,0FH
MOVAL,DA1+3
SHLAL,CL
上述指令序列执行后,AL=__A0H_____,CL=____3___。
7.A1DB65H
A2DB?
A3DB?
┇
MOVAL,A1
MOVCL,4
SHRAL,CL
ADDAL,30H
MOVA2,AL
MOVAL,A1
ANDAL,0FH
ORAL,30H
MOVA3,AL
上述程序段执行后(A2)=_____36H______,(A3)___35H________。
8.以下指令执行后,(AX)=15;(BX)=6。
MOVBX,1
SUBAX,AX
MOVCX,5
NEXT:
ADDAX,BX
INCBX
LOOPNEXT
9.设AL中高低4位分别有大于7的数,
MOVAH,AL
ANDAH,88H
MOVAL,AH
ORAL,11H
程序段运行后,AH=___88H______,AL=___99H______。
10.DEC2DB′56′
SUBDI,DI
MOVBL,DEC2[DI+1]
ANDBL,0FH
MOVAL,DEC2[DI]
ANDAL,0FH
MOVDL,10
MULDL
ADDAL,BL
上述程序段运行后,AL=___56H____,BL=___6H_____。
11.下列程序段实现将数据区ABUFl首址开始的100个字节数据传送到ABUF2为首址的数据区去。
CLD
MOVSI,OFFSETABUFl
MOVDI,OFFSETABUF2
MOVCX,100
REPMOVSB
12.执行下列指令后,(AX)=2312H,SI=1922H。
VAR1DW1234H,89H,255H,FEH,F5H
VAR2DB34H,78H,44H,22H,19H,F4H
MOVAH,23H
MOVBX,OFFSETVAR1
MOVAL,BYTEPTR[BX+1]
MOVSI,WORDPTRVAR2+3
13.以下指令执行后,(SP)=2FF0H;(DX)=2012H;(CX)=2010H;(ZF)=。
11A3H:
2000HMOVAL,0
11A3H:
2002HMOVAX,CS
11A3H:
2004HMOVSS,AX
11A3H:
2006HMOVSP,2FF0H
11A3H:
2009HMOVDX,2012H
11A3H:
200CHPUSHDX
11A3H:
200DHCALL2700H
11A3H:
2010HADDCX,DX
11A3H:
2012HRET
11A3H:
2700HPOPCX
RET
四、程序设计题
1.数据定义如下,完整编写code段中的代码,使用堆栈将data1中的数据逆序存储到data2中。
代码如下:
assumecs:
code,ds:
data
datasegment
dw11h,22h,33h,44h,55h,66h,77h,88h
dw8dup(0)
dataends
codesegment
start:
movax,data1
movds,ax
movax,data2
movss,ax
movsp,10h
movbx,0
movcx,8
s:
pushds:
[bx]
addbx,2
loops
movax,4c00h
int21h
codeends
endstart
2.书P129
编写程序实现依次用内存0:
0~0:
15单元中的内容改写程序中的数据程序。
代码如下:
assumecs:
codesg
codesgsegment
dw0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987h
start:
movax,0
movds,ax
movbx,0
movcx,8
s:
movax,[bx]
movcs:
[bx],ax
addbx,2
loops
movax,4c00h
int21h
codesgends
endstart
3.书P234类似
编程,将datasg中以’.’结尾的字符串中的小写字母改写为大写。
代码如下:
assumecs:
codesg
datasgsegment
db"Beginner'sAll-purposeSymbolicInstructionCode."
datasgends
stacksegment
db10dup(0)
stackends
codesgsegment
start:
movax,datasg
movds,ax
movsi,0
callletterc
movax,4c00h
int21h
letterc:
pushsi
pushax
s:
moval,ds:
[si]
cmpal,’.’;与‘.’比较,相等则跳出
jeletterc_ok
incsi
cmpal,'a'
jbs;小于则转移
cmpal,'z'
jas;大于则转移
addal,'A'-'a';小写变为大写
movds:
[si-1],al;前面si有加过1,所以[si-1]
jmps;循环
letterc_ok:
popax
popsi
ret
codesgends
endstart
4.书P261
编写程序,调用第21号中断例程的9号子程序在屏幕上显示字符串“WelcometoMasm!
”
代码如下:
assumecs:
code
datasegment
db'WelcometoMasm!
','$'
dataends
codesegment
start:
movah,2;置光标
movbh,0;第0页
movdh,5;dh放行号
movdl,12;放列号
int10h;BIOS提供的中断例程置光标功能
movax,data
movds,ax
movdx,0
movah,9;调用9号子程序
int21h
movax,4c00h
int21h
codeends
endstart
5.书P184
编写程序,利用jcxz指令实现在内存2000H段中查找第一个值为0的字节,找到后,将它的偏移地址存储在dx中。
代码如下:
assumecs:
code
codesegment
start:
movax,2000h
movds,ax
movbx,0
s:
movch,0
movcl,[bx]
jcxzok
incbx
jmpshorts
ok:
movdx,bx
movax,4c00h
int21h
codeends
endstart
假如使用loop指令
assumecs:
code
codesegment
start:
movax,2000h
movds,ax
movbx,0
s:
movch,0
movcl,[bx]
inccx
incbx
loops
ok:
decbx
movdx,bx
movax,4c00h
int21h
codeends
endstart
6.写完整汇编程序,要求实现计算1~100各数的累加和(存入dx中),并求这100个数的平均值(存入al中)。
代码如下:
assumecs:
code
codesegment
movax,1
movdx,0
movcx,100
s:
adddx,ax
incax
loops
movax,dx
movbl,100
divbl
movax,4c00h
int21h
codeends
end
7.书P262
编写并安装int63h中断例程,功能为完成loop指令的功能。
代码如下:
assumecs:
code
codesegment
start:
movax,cs
movds,ax
movsi,offsetlp;设置ds:
si指向源地址
movax,0
moves,ax
movdi,200h;设置es:
di指向目的地址0:
200h
movcx,offsetlpend-offsetlp;传输长度
cld;设置传输方向为正
repmovsb
movax,0
moves,ax
movwordptres:
[63h*4],200h;设置中断向量
movwordptres:
[63h*4+2],0
movax,0b800h
moves,ax
movdi,160*12;设置es:
di指向显存的中间位置
movbx,offsets-offsetse
movcx,80
s:
movbyteptres:
[di],'!
';测试int63h
adddi,2
int63h
se:
nop
movax,4c00h
int21h
lp:
pushbp
deccx
jcxzok
movbp,sp
add[bp+2],bx;中断例程
ok:
popbp
iret
lpend:
nop
codeends
endstart
8.书P270
编写程序实现在屏幕中显示当前的月份。
代码如下:
assumecs:
code
codesegment
start:
moval,8
out70h,al
inal,71h
movah,al;al中为从CMOSRAM的8号单元中读出的数据
movcl,4
shrah,cl;左移4位,ah中为月份的十位数码值
andal,00001111b;al中为月份的个位数码值
addah,30h
addal,30h
movbx,0b800h
moves,bx
movbyteptres:
[160*12+40*2],ah;在屏幕中间显示
movbyteptres:
[160*12+40*2+2],al
movax,4c00h
int21h
codeends
endstart
9.程序如下,编写code段中的代码,实现将ARY1和ARY2中的5个数依次相加存入SUM的5个字单元中。
代码如下:
assumecs:
code,ds:
data
datasegment
ARY1db85h,3ah,0c6h,5fh,70h
ARY2db99h,0b7h,28h,63h,96h
SUMdw5dup(0)
dataends
codesegment
start:
movax,data
movds,ax;进行关联
movsi,0
movdi,0
movcx,5;循环5次
s:
moval,ARY1[si]
movah,0;扩充成字
movbl,ARY2[si]
movbh,0;扩充成字
addax,bx;两者相加
movSUM[di],ax;移到SUM中
adcSUM[di+1],0;高字节有进位
incsi
incdi;inc指令不影响CF位
incdi
loops
movax,4c00h
int21h
codeends
endstart
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 汇编语言 程序设计 复习 提纲 解析