实验考试专用汇编程序Word文档下载推荐.docx
《实验考试专用汇编程序Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《实验考试专用汇编程序Word文档下载推荐.docx(32页珍藏版)》请在冰点文库上搜索。
sxdw1
mxdw20
gcdw1
dataends
code,ds:
data
movax,data
movcx,gc
movax,sx
movbx,mx
subbx,ax
idivcx
incbx
movcx,mx
imulbx
shrax,1
3、利用debug工具测试和掌握教材习题中的各种指令在各种寻址方式下的使用方法和结果;
dw3412h
dw7856h
dw4c2ah
dw65b7h
mainprocfar
movsi,0002h
movbx,0000h
movax,1200h;
立即寻址方式
movax,bx;
寄存器寻址方式
movax,ds:
[0002h];
直接寻址方式
movax,[bx];
寄存器间接寻址方式
movax,0004[bx];
寄存器相对寻址方式
movax,[bx][si];
基址变址寻址方式
movax,0004[bx][si];
相对基址变址寻址方式
mainendp
4、
datareasegment
datareaends
code,ds:
datarea
movax,0
decax
addax,7fffh
addax,2
notax
subax,0ffffh
addax,8000h
subax,1
andax,58d1h
salax,1
sarax,1
negax
rorax,1
5、zw+(z-x)
xdw1111h
wdw2222h
zdw3333h
movax,datarea
movds,ax
movax,z
subax,x
addax,w
movz,ax
6、zw-(x+6)-(r+9)
xdw0004h
wdw0022h
zdw?
rdw0002h
movbx,x
addbx,6
movcx,r
addcx,9
movax,w
subax,bx
subax,cx
7、z(w*x)/(y+6),r余数
wdw0005h
ydw0002h
rdw?
movbx,y
imulx
idivbx
movz,ax
movr,dx
8、z((w-x)/5*y)*2
xdw0002h
wdw0007h
ydw0003h
cwd
movbx,5
imuly
shlax,1
rcldx,1
9、试写出对存放在dx和ax中双字长数,求补的指令序列
xdw4567h
ydw0123h
movdx,x
movax,y
negdx
negax
sbbdx,0
10、试编写程序,求出双字长的绝对值。
该数存放在a和a+2单元中。
要求结果存放在b和b+2单元中。
adw0123h
dw9567h
bdw?
dw?
movax,a
movdx,[a+2]
cmpdx,0
jnszhenshu;
不是负数则转走
notdx
notax
addax,1
adcdx,0
zhenshu:
movb,ax
mov[b+2],dx
11、设x和y均为16位无符号数,试写程序求表达式16x+y的值,要求将结果存放在存储单元z处。
xdw0001h
ydw0110h
zdw?
cwd
movax,x
movbx,16d
mulbx
addax,y
movbx,z
mov[bx],ax
mov[bx+2],dx
12、比较ax、bx和cx(或三个从buff位置连续的数据)中带符号的数据,将大者存放于ax中,小者存放于cx,中者存放于bx。
xdw0ffffh
ydw0934h
zdw1223h
movax,[x]
movbx,[y]
movcx,[z]
cmpax,bx
jlaction4
jnlaction1
action4:
xchgax,bx
action1:
cmpax,cx
jlaction5
jnlaction2
action5:
xchgax,cx
action2:
cmpbx,cx
jlaction6
jnlaction3
action6:
xchgbx,cx
action3:
13、试编写一个统计学生成绩的程序。
分别统计分数在60分以下的,60-69段,70-79段,80-89段,90-99段和100段的人数,并分别将它们存放在result开始的存储单元中。
datasegsegment
butdb0dh,0ah,'
theresult$'
gradedw76,69,84,90,73,88,99,63,100,80
s6db0
s7db0
s8db0
s9db0
s10db0
datasegends
csegsegment
mainprocfar
cseg,ds:
dataseg
pushds
subax,ax
pushax
movax,dataseg
movds,ax
movcx,10
callcount
calldisp
movah,1
int21h
ret
mainendp
countprocnear
movsi,0
next:
movax,grade[si]
movbl,10
divbl
movbl,al
movbh,0
subbx,6
cmpbx,0
jaenext1
next1:
incs6[bx]
addsi,2
loopnext
countendp
dispprocnear
leasi,s6
movcx,5
loop1:
movdx,offsetbut
movdl,[si]
adddl,30h
movah,2
incsi
looploop1
dispendp
csegends
14、试编写一个将16#数转换为对应ASCII码的程序。
valuedw1a2bh
assumeds:
data,cs:
movch,4
movbx,value
label_1:
movcl,4
rolbx,cl
moval,bl
andal,0fh
addal,30h
cmpal,3ah
jllabel_2
addal,7h
label_2:
movah,00
pushbx
movbl,10
divbl;
余数在ah,商在al
movdx,ax
adddx,3030h;
转化成十\个位对应的ascii码
movah,2
movdl,dh
popbx
decch
jnzlabel_1
mainendp
end
15、不利用乘法指令实现乘法的程序;
datasegment
xdw30d
ydw10d
movcx,x
l1:
addax,bx
loopl1
16、将内存中的数据块中(buff为起始地址)奇数和偶数分别存入以addr1和addr2开始的存储块中,并分别统计其中的奇、偶数,将统计结果存放在result开始的两个字存储单元中;
buffdw6,35,99,17,80,69,50,33
addr1dw8dup(?
)
addr2dw8dup(?
resultdw0,0
movcx,8d
movsi,0;
clearsi
movdi,0;
cleardi
movbx,0
movdx,0
testbuff[si],0001h
jel2
movax,buff[si]
movaddr2[bx],ax
addsi,2
addbx,2
incdl
deccx
jmpl1
l2:
movaddr1[di],ax
adddi,2
incdh
movsi,0
movbyteptrresult[si],dh
movbyteptrresult[si],dl
17、对在附加段中的首地址为list的字数组进行从大到小的排序;
************************************************
datassegment
numdw8;
str1db'
beforesort:
str2db0ah,0dh,2dup(20h),'
aftersort:
'
'
datasends
esdatasegment
listdw4,2,5,6,1,7,8,3
esdataends
codessegment
codes,ds:
datas,es:
esdata
start:
movax,datas
movax,esdata
moves,ax
排序前,输出帮助查看结果
leadx,str1
movah,9
movcx,num
leasi,list
next3:
movdx,wordptres:
[si]
adddl,30h
movdl,'
'
loopnext3
************************************
deccx;
cx为要排序的数据个数减1,因为是依次拿第n个数跟n后面的数作比较
leadi,list
next2:
;
外循环
movax,cx
movsi,di
内循环
movbx,wordptres:
[si]
cmpwordptres:
[di],bx;
前面的数跟后面的数作比较
jnldayu;
大于则跳到dayu处,小于则交换两数的值放回存储单元
[di]
movwordptres:
[di],bx
[si],dx
dayu:
decax
cmpax,0
jnznext1;
cmpcx,0
jnznext2;
************************************
排序后,输出帮助查看结果
leadx,str2
next4:
loopnext4
codesends
18、通过寄存器传递参数的子程序设计10#数到16#数的转换程序的实现(从键盘获取一个10#数,然后把该数以16#的形式在屏幕上显示出来)。
decihexsegment
decihex
repeat:
calldecibin
callcrlf
callbinihex
jmprepeat
decibinprocnear
newchar:
movah,1
subal,30h
jlexit
cmpal,09d
jgexit
cbw
movcx,10d
mulcx
addbx,ax
jmpnewchar
exit:
ret
decibinendp
binihexprocnear
rotate:
jlprintit
printit:
movdl,al
jnzrotate
binihexendp
crlfprocnear
movdl,0dh
movdl,0ah
crlfendp
deci