汇编语言程序设计实验文档格式.docx
- 文档编号:20228536
- 上传时间:2023-01-21
- 格式:DOCX
- 页数:32
- 大小:1,003.65KB
汇编语言程序设计实验文档格式.docx
《汇编语言程序设计实验文档格式.docx》由会员分享,可在线阅读,更多相关《汇编语言程序设计实验文档格式.docx(32页珍藏版)》请在冰豆网上搜索。
,13,10,'
$'
MESS2DB'
NOMATCH!
DATAENDS
codesegment
assumecs:
code,ds:
data,es:
data
mainprocfar
start:
:
pushds
subax,ax
pushax
movax,data
movds,ax
moves,ax
;
mainprogram
movcx,count
leasi,string1
leadi,string2
cld
repzcmpsb
jzmes1movdx,offsetmess2jmpdisp0
mes1:
movdx,offsetmess1disp0:
movah,9
int21hexit:
retmainendpcodeends
endstart修改字符串,使其不同,并对以上源程序重新汇编、连接、运行,结果输出为:
NOMATCH!
修改前:
修改后:
三、实验题。
1、上机完成以上示例程序。
2、完成课堂例题,并用DEBUG运行,观察结果。
datasegment
Xdb6
Ydb?
dataends
codesegment
data
movax,data
movds,ax
moval,x
movy,5
addy,al
movah,4ch
int21h
codeends
endstart
程序:
改变后:
实验三顺序结构程序设计
学习数据传送指令和算术运算指令的用法;
掌握数据定义伪指令的格式,会用DEBUG中的D命令观察DB、DW、DD存储数据的格式;
熟悉汇编语言的基本框架,掌握编写汇编语言程序的基本方法。
二、示例
试问如下程序执行到exit时,字单元A、B、D、D+1、D+2中的内容各是什么?
源程序如下:
adb10
bdw20
ddb30,40,50
assumecs:
moval,data
movds,ax
moval,d+1
addal,d
mova,al
addal,d+2
movb,al
addd,10
addd+1,20
addd+2,30
exit:
movah,4ch
int21h
endstart
阅读以上程序,运行程序并用debug调试分析出结果。
字单元A:
4C5A。
字单元B:
2B5A。
字单元D:
3C2B。
字单元D+1:
503C。
字单元D+2:
0050。
1、求表达式Y=A*X2+B*X+C的值,已知A、B、C分别存放在DATAA、DATAB、DATAC字节单元,X存放在TABL字节单元,结果Y放入RESULT字单元。
要求:
①在DEBUG下多次修改X的值,观察执行结果Y;
②修改原程序,从键盘上输入X的值,观察执行结果Y。
(见书P471)
①datasegment
dataadb1
databdb3
datacdw5
tabldb7
resultdw?
assumecs:
movax,data
movds,ax
moval,tabl
mulal
muldataa
movbx,ax
muldatab
addax,bx
addax,datac
movresult,ax
movah,4ch
int21h
endstart
运行结果为16进制的4B,即75,计算正确。
在修改X值为9后,运算结果为71,即113,计算正确。
继续修改X值为3,运行结果为17,即23,计算正确。
②datasegment
tabldb?
movah,01
subal,30h
movtabl,al
pushax
muldatab
popbx
从键盘上输入X值为7,输出结果为4B。
2、上机完成教材习题3.11(P108),写出正确结果。
tabledw10,20,30,40,50
entrydw3
ASSUMEDS:
data,cs:
code
movax,data
movbx,offsettable
addbx,entry
movax,[bx]
AX=1E00H。
四、实验报告
写出程序清单,记录运行结果;
总结DEBUG中U、E、D、T、G命令的功能。
U命令的功能:
将主存内容按照机器代码形成汇编指令显示;
E命令的功能:
用于修改主存内容;
D命令的功能:
显示主存单元的内容;
T命令的功能:
每执行一条指令就显示运行结果;
G命令的功能:
从指定地址处开始运行程序,直到遇到断点或者程序正常结束。
实验四循环结构程序设计
理解单重循环与多重循环程序的结构及执行过程;
掌握循环控制指令的用法,会使用数据串操作指令编程;
熟练掌握循环结构程序的设计方法和利用设置断点调试程序的方法。
1、单循环程序
已知当前数据段中DADT1和DADT2开始分别存放若干字节数据,数据个数相同,编制程序检查两数据块中数据是否相同,若相同,则在屏幕上显示1,否则显示0。
【参考程序如下】
DSEGSEGMENT;
定义段。
DATA1DB'
ABCDEFG3'
定义字符串赋值给变量。
DATA2DB'
ABCDEF3G'
CNTDW8;
定义变量。
DSEGENDS
CSEGSEGMENT
ASSUMECS:
CSEG,DS:
DSEG
START:
MOVAX,DSEG;
赋值。
MOVDS,AX
MOVDL,31H;
LEASI,DATA1;
取变量的偏移地址。
LEADI,DATA2;
取变量的偏移地址、首地址。
MOVCX,CNT
DECSI;
SI自减。
DECDI;
DI自减。
AGAIN:
INCSI;
自增。
INCDI;
进行比较。
MOVAL,[SI];
地址的内容赋值给AL。
CMPAL,[DI];
LOOPZAGAIN;
如果相等,循环到AGAIN。
JZDISP;
若相等,则跳转到显示。
DECDL;
DL自减。
DISP:
MOVAH,2;
INT21H;
中断语句。
MOVAH,4CH
INT21H
CSEGENDS
ENDSTART
输入相同数据时:
ABCDEFGG'
ENDSTART
课堂实验内容:
教材习题5.2,习题5.17。
5.2:
DATASSEGMENT;
输入数据段代码。
DATASENDS
STACKSSEGMENT;
输入堆栈段代码。
STACKSENDS
CODESSEGMENT
ASSUMECS:
CODES,DS:
DATAS,SS:
STACKS;
MOVAX,DATAS
MOVDS,AX
MOVCX,2;
定义循环次数。
MOVAH,1;
中断,从键盘输入字符。
INT21H
MOVDL,AL;
把AL赋值给DL。
DECDL;
MOVAH,2;
中断指令,显示单个字符。
S:
INCDL;
自增1,CX自减1,CX不为0则继续循环。
MOVAH,2
DECCX
JNZS;
输入代码段代码。
MOVAH,4CH
CODESENDS
输入k,前导字符j,后续字符l,输出jkl,正确。
5.17:
MEMDB4DUP(?
);
定义数组。
STACKS
MOVAX,2A49H;
给AX赋值。
LEABX,MEM;
把数组MEM的首地址赋值给BX。
MOVCH,4;
给CH赋值。
即循环次数。
MOVDX,AX;
把AX的值赋给DX。
MOVCL,4;
给CL赋值。
即移位位数。
ANDDX,000FH;
相与,取出最低位。
ADDDX,30H
CMPDX,3AH
JLNEXT;
如果小于则跳转到NEXT。
ADDDX,07H;
如果大于就把DX加7。
NEXT:
MOV[BX],DX;
把DX赋值给BX下地址的内容,即数组。
INCBX;
BX自增1。
RORAX,CL;
将AX循环右移CL位。
DECCH;
CH自减。
如果不为0则跳转。
实验五分支结构程序设计
掌握条件转移指令的使用方法及指令对标志寄存器中各标志位的影响;
掌握标志位和转移指令之间的关系;
会用条件转移指令和无条件转移指令设计多分支结构程序;
掌握设置断点调试程序的方法。
简单分支结构
判断方程ax2+bx+c=0是否有实根,若有实根则将字节变量tag置1,否则置0(假设a、b、c均为字节变量,表达-127~+127的数据)。
当a=1,b=3,c=1时有实根。
程序如下:
运行结果如下:
当a=1,b=1,c=1时有实根。
(1)教材习题5.21。
arraydwx,y,z
movcx,0
movsi,0
movdi,2
callbj
movdi,4
movsi,2
cmpcl,3
jnzshow
movcl,2
show:
addcx,30h
movah,02h
movdl,cl
bj:
movax,ds:
array[si]
movbx,ds:
array[di]
cmpax,bx
jzxd
ret
xd:
inccx
1三个数都相等时的运行结果:
2三个数中有两个数相等的运行结果:
3三个数都不相等时的运行结果:
(2)已知DATAX和DATAY单元各存放一个带符号字节数据,从键盘上接收加(+)、减(-)、乘(*)或除(/)符号,然后完成相应运算,结果存入RLT单元。
dataxdb4h
dataydb5h
rltdb1dup(?
)
movbl,datax
movbh,datay
movah,01h
cmpal,'
+'
jejiafa
-'
jejianfa
*'
jechf
/'
jechufa
chufa:
moval,bl
subah,ah
divbh
movbl,al
jmpq5
chf:
moval,bh
mulbl
jianfa:
subbl,bh
jiafa:
addbl,bh
q5:
moval,bl
movcl,4
shral,cl
addal,30h
cmpal,39h
jbexianshi1
addal,07h
xianshi1:
movdl,al
movrlt,al
movah,02h
andal,0fh
jbexianshi2
xianshi2:
运行结果:
1加:
2减:
3乘:
4除:
实验六子程序设计
掌握子程序的设计方法;
理解子程序调用与返回指令的执行过程及堆栈的变化情况;
掌握子程序调用过程中主程序与子程序间的参数传递方式,掌握现场的保护与恢复方法,会编制嵌套子程序。
二、实验题
1、上机验证教材例6.3十进制到十六进制数的转换,仿照示例进行调试。
decihexsegment
decihex
mainprocfar
repeat1:
calldecibin
callcrlf
callbinihex
jmprepeat1
mainendp
decibinprocnear
movbx,0
newchar:
movah,1
subal,30h
jlexit
cmpal,9d
jgexit
cbw
xchgax,bx
movcx,10d
mulcx
addbx,ax
jmpnewchar
exit:
decibinendp
binihexprocnear
movch,4
rotate:
rolbx,cl
andal,0fh
addal,30h
cmpal,3ah
jlprintit
addal,7h
printit:
movah,2
decch
jnzrotate
binihexendp
crlfprocnear
movdl,0dh
movdl,0ah
crlfendp
decihexends
endmain
2、教材习题6.7。
datassegment
cjdb76,69,84,90,73,88,99,63,100,80
s6db0
s7db0
s8db0
s9db0
s10db0
datasends
codessegment
codes,ds:
datas
movax,datas
leasi,cj;
目标地址传送指令
movcx,10;
循环十次
s:
;
(子程序部分)
moval,[si]
movbl,10
divbl;
取个位数
subal,6
movbl,al
movbh,0
incs6[bx];
加1指令,跳转到下一个地址里面
incsi
loops;
对子程序进行循环
codesends
堆栈指针和栈顶由inc加1指令,跳转到下一个地址里面,从而使程序进行了循环运算。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 汇编语言 程序设计 实验