合肥工业大学汇编程序设计实验报告完整代码Word文件下载.docx
- 文档编号:21634494
- 上传时间:2023-01-31
- 格式:DOCX
- 页数:31
- 大小:875.22KB
合肥工业大学汇编程序设计实验报告完整代码Word文件下载.docx
《合肥工业大学汇编程序设计实验报告完整代码Word文件下载.docx》由会员分享,可在线阅读,更多相关《合肥工业大学汇编程序设计实验报告完整代码Word文件下载.docx(31页珍藏版)》请在冰豆网上搜索。
同时在debug下进行编程,比较麻烦。
由于是第一次编写汇编程序,还是需要多练习。
实验二汇编语言程序设计(顺序、循环)
1、掌握顺序和循环程序结构和设计方法;
2、熟悉在PC机上建立、汇编、连接、调试和运行8086/8088汇编语言程序的过程。
1、X、Y、Z、V均为字变量,在X、Y、Z、V字单元中存放是16位带符号数。
试编写汇编语言程序完成以下功能:
①计算表达式值(V–(X*Y+Z-720))/X;
②将上述表达式运算结果整数放在SUM1单元,余数放在SUM2单元。
2、求一个班50名学生成绩的平均值(附加题:
最大值和最小值,并将结果显示出来)
3、从键盘读入一个字符串,以Enter结束,字符串不超过50个字符,并打印该字符串(附加题:
查找中间是否有‘asm’子串。
如果有,输出‘Yes’;
否则,输出‘No’)。
1、计算表达式值(V–(X*Y+Z-720))/X;
datasegment
xdw021ch
ydw0001h
zdw0ffffh
vdw0438h
wdw0000h
sum1dw?
sum2dw?
dataends
assumecs:
code,ds:
data
codesegment
start:
movax,data
movds,ax
MOVAX,x
IMULY;
x*y
MOVCX,AX
MOVBX,DX
MOVAX,Z
CWD
ADDCX,AX
ADCBX,DX;
x*y+z
SUBCX,540;
?
SBBBX,0;
x*y+z-540
MOVAX,V
SUBAX,CX
SBBDX,BX;
v-(x*y+z-540)
IDIVX;
(v-(x*y+z-540))/x
movsum1,ax
movsum2,dx
movax,4c00h
int21h
codeends
endstart
db7,49dup(6)
maxdb?
mindb?
resultdb0
codesegment
start:
movax,0
movcx,50
movdi,0
again:
movbx,0
movbl,[di]
adddi,1
addax,bx
loopagain
movbl,50
divbl
movresult,al
movdi,50
max2:
subdi,1
movsi,0
moval,[di]
max1:
cmpal,[si]
jbmax2
addsi,1
loopmax1
movmax,al
min2:
min1:
jnbmin2
loopmin1
movmin,al
codeends
data2db50,?
50dup('
$'
)
stringdb'
yes$'
string1db'
no$'
movah,0ah
movdx,offsetdata2
movah,2h
movdl,0ah
movdl,0dh
int21h
movdx,offsetdata2+2
movah,09h
movah,2h
moval,0h
movcx,47
moval,[di+2]
cmpal,61h
jnznext
moval,[di+3]
cmpal,73h
moval,[di+4]
cmpal,6dh
jmpyes
next:
movdx,offsetstring1
jmpendcode
yes:
movdx,offsetstring
endcode:
1、计算表达式值(V–(X*Y+Z-720))/X;
0030地址为平均值的商0032地址为最大值0034地址为最小值
通过此次试验,了解了符号扩展指令的使用。
第二程序中,以及在输出时,输入的字符串末尾要注意加结束标志’$’,还有在输出字符串前要先输出个回车换行,否则回车后看不到输出结果。
实验三汇编语言子程序设计(分支、子程序)
1、掌握分支和子程序结构和设计方法;
3、通过汇编语言了解高级语言的参数传递等知识。
1、BL中的只有一位为1。
编写程序测试,并输出提示信息“TheXBitis1”,要求:
地址表和转移表。
2.编写一个子程序计算z=f(x,y)=x*y+x-y(x,y,z有符号数内存数)。
要求通过堆栈(寄存器、内存)传送所有参数。
3.实践C→Asm的转换过程。
;
blhaveone1cout<
<
TheXBitis1
addresdwfun8,fun7,fun6,fun5,fun4,fun3,fun2,fun1
string8db'
The8Bitis1$'
string7db'
The7Bitis1$'
string6db'
The6Bitis1$'
string5db'
The5Bitis1$'
string4db'
The4Bitis1$'
string3db'
The3Bitis1$'
string2db'
The2Bitis1$'
The1Bitis1$'
assumeds:
data,cs:
code
codesegment
movbl,10h
movax,0000h
movcx,8
math:
shlbl,1
jcright
jmpnext
right:
movdl,02h
muldl
movbp,ax
jmpaddres[bp]
next:
incax
loopmath
fun8:
movdx,offsetstring8
jmpcout
fun7:
movdx,offsetstring7
jmpcout
fun6:
movdx,offsetstring6
fun5:
movdx,offsetstring5
fun4:
movdx,offsetstring4
fun3:
movdx,offsetstring3
fun2:
movdx,offsetstring2
fun1:
movdx,offsetstring1
cout:
movah,09h
movah,4ch
2.编写一个子程序计算z=f(x,y)=x*y+x-y(x,y,z有符号数内存数)。
使用堆栈:
xdb03h
ydb0ffh
zdw0000h
stacksegment
dw100dup(?
stackends
code,ss:
stack
movax,stack
movss,ax
moval,x
pushax
moval,y
callprogram
movz,dx
addsp,2
jmpquit
program:
pushbp
movbp,sp
movax,[bp+6]
movdx,[bp+4]
imuldl
movdx,ax
movax,[bp+6]
cbw
adddx,ax
movax,[bp+4]
subdx,ax
popbp
ret
quit:
codeends
endstart
二、使用寄存器传值
movbl,y
movcl,al
imulbl
movdx,ax
moval,cl
cbw
adddx,ax
moval,bl
cbw
subdx,ax
#include<
stdio.h>
intmain()
{
_asmmovax,0088h;
_asm
{
}
return0;
}
dx及0002中为f(3,-1)=1
二、使用寄存器传值dx及0002中为f(3,-1)=1
TITLED:
\c++documents\huibian.cpp
.386P
includelisting.inc
if@Versiongt510
.modelFLAT
else
_TEXTSEGMENTPARAUSE32PUBLIC'
CODE'
_TEXTENDS
_DATASEGMENTDWORDUSE32PUBLIC'
DATA'
_DATAENDS
CONSTSEGMENTDWORDUSE32PUBLIC'
CONST'
CONSTENDS
_BSSSEGMENTDWORDUSE32PUBLIC'
BSS'
_BSSENDS
$$SYMBOLSSEGMENTBYTEUSE32'
DEBSYM'
$$SYMBOLSENDS
$$TYPESSEGMENTBYTEUSE32'
DEBTYP'
$$TYPESENDS
_TLSSEGMENTDWORDUSE32PUBLIC'
TLS'
_TLSENDS
COMDAT_main
FLATGROUP_DATA,CONST,_BSS
ASSUMECS:
FLAT,DS:
FLAT,SS:
FLAT
endif
PUBLIC_main
EXTRN__chkesp:
NEAR
_TEXTSEGMENT
_mainPROCNEAR;
COMDAT
3:
pushebp
movebp,esp
subesp,64;
00000040H
pushebx
pushesi
pushedi
leaedi,DWORDPTR[ebp-64]
movecx,16;
00000010H
moveax,-0;
ccccccccH
repstosd
4:
5:
_asmmovax,0088h;
movax,136;
00000088H
6:
_asm
7:
{
8:
9:
10:
11:
}
12:
13:
xoreax,eax
14:
popedi
popesi
popebx
addesp,64;
cmpebp,esp
call__chkesp
movesp,ebp
popebp
ret0
_mainENDP
END
通过本次试验使我了解了如何使用地址表和转移表,以及怎样通过堆栈(寄存器、内存)传送所有参数调用子程序。
最后实践了C→Asm的转换过程,使我对C和汇编有了更多的认识。
实验四汇编语言高级编程专题
1、汇编语言宏程序设计;
2、掌握中断服务子程序的编写。
3、汇编语言与高级语言的混编。
1、编写一个宏,求三个数的最小数,原型为:
MIN3x,y,z,min
2、挂接1CH中断,正计时60秒后退出。
要求屏幕显示0-59的秒数。
3、VC++中编写内联汇编,将字节数组的每个元素高低四位互换。
chardbyte[]={0x34,0x45,0x56,0x67,0xaf};
minmacrox,y,z
movax,x
cmpax,y
jlnext;
jc看的是cf是当成无符号数比较的?
movax,y
cmpax,z
jlfinal
movax,z
final:
nop
endm
assumecs:
min4-63
addresequ1ch
piandw?
duandw?
stringdb48
movax,data
movds,ax
begin:
movax,351ch
movpian,bx
movduan,es
pushds
movdx,offsetmyproc
movax,segmyproc
movax,251ch
popds
movcx,0
movbx,0
cmpcx,1080;
60*18
jnznext
movdx,pian
movax,duan
myprocproc
sti
inccx
incbx
cmpbx,18
jzprint
jmpover
print:
movbl,string
cmpbl,58
jcp0
moval,bl
subal,48
movah,00h
movdl,10
divdl
movbl,ah
movdl,al
adddl,48
movah,02h
int21h
movdl,bl
adddl,48
int21h
jmpp1
p0:
movdl,string
p1:
incstring
movbx,0
;
int21h
over:
iret
msg:
onesecond$'
myprocendp
--按a键后,保留旧时间,重新另起一行开始计时
----使用21H的0BH功能检查按键是否按下
pushbx
pushcx
pushsi
movah,0bh
subal,00h
jzok
movah,07h
jzcrazy
jmpok
crazy:
popsi
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 合肥 工业大学 汇编程序 设计 实验 报告 完整 代码