计算机组成原理与汇编实验报告.docx
- 文档编号:26207183
- 上传时间:2023-06-17
- 格式:DOCX
- 页数:27
- 大小:539KB
计算机组成原理与汇编实验报告.docx
《计算机组成原理与汇编实验报告.docx》由会员分享,可在线阅读,更多相关《计算机组成原理与汇编实验报告.docx(27页珍藏版)》请在冰豆网上搜索。
计算机组成原理与汇编实验报告
计算机组成原理与汇编实验报告
学院:
信息科学与工程学院
专业班级:
物联网工程1202班
指导老师:
贺建飚
学号:
0909123006
姓名:
胡松
实验一:
二进制转十六进制
一、实验原理:
在源程序中设置数据段、堆栈段及代码段,在数据段中定义八个字节数据,把这些数据转换成16进制数的ASCll码存在上述数据之后,然后在屏幕上显示这些数据。
二、实验目的
1.掌握86系列汇编语言及指令的格式和寻址方式
2.掌握86系列汇编语言各类指令的用法。
3.掌握简单程序、分支程序、循环程序、子程序等的设计方法。
三、实验内容
流程图:
NAMEEX1;程序命名伪指令,程序名为EX1
PAGE50,70;表示占了50行,70列
DATSEGMENTPARA'DAT';数据段定义伪指令
A1DB12H,34H,56H,78H,9AH
DB0BCH,0DEH,0F0H
B1=$-A1;赋值伪指令,求A1(符号地址)到当前汇编地址($)的字节数
B2=B1*2;求2倍的B1
A2DBB2DUP(?
);数据重复定义伪指令,定义ASCII码字符区
DATENDS
STACSEGMENTPARASTACK'STA';定义堆栈段
STA1DW100DUP(?
)
STACENDS
CODESEGMENTPARA'CODE'
ASSUMECS:
CODE,DS:
DAT,SS:
STAC,ES:
DAT
STARPROCFAR
PUSHDS
XORAX,AX
PUSHAX
MOVAX,DAT
MOVDS,AX
MOVES,AX
LEASI,A1;把A1首地址赋给SI
LEADI,A2;转化后用来放结果
MOVCX,B1
G1:
MOVBL,2
MOVAL,[SI];把八位的数据赋给AL,准备转化
MOVBH,AL;把AL中的数据暂存于BH中
PUSHCX;保护CX中的数据
MOVCL,4;指出移位的位数为4
RORAL,CL;循环右移四位
POPCX;把CX弹出堆栈
G2:
ANDAL,0FH;把AL中的数据和0FH“与”,得到高四位
DAA;对AL两位十进制数做(BCD)调整
ADDAL,0F0H
ADCAL,40H
MOV[DI],AL;存ASCII码
INCDI;修改地址加一
MOVAL,BH
DECBL
JNZG2
INCSI;指向下一个数
LOOPG1
MOVSI,OFFSETA2;A2的偏移地址送给SI寄存器
MOVCX,B2
CALLP1
RET;子程序返回
STARENDP
P1PROC
MOVBL,2
G:
MOVDL,[SI]
MOVAH,2
INT21H
INCSI;指向下一个要显示的数
DECBL
JNZT;连续显示两个数,未完继续
MOVDL,''
MOVAH,2
INT21H
MOVBL,2
T:
LOOPG
RET
P1ENDP
CODEENDS
ENDSTAR
四、实验结果
五、实验心得
读了这个程序之后发现,想要真正理解一个程序都是需要掌握众多助记符的用法以及它的意思,只有了解并明白了这些之后才可以分析程序或者是编写简单的小程序
实验二:
起泡排序算法
二、实验原理:
在源程序中设置数据段、堆栈段及代码段,在数据段中定义八个字节数据,把这些数据转换成16进制数的ASCll码存在上述数据之后,然后在屏幕上显示这些数据。
二、实验目的
1.掌握循环程序的设计方法;
2.了解循环结构在程序中的重要作用起泡排序程序。
三、实验内容
流程图:
STACKSGSEGMENT
STACK'S'
DW64DUP('ST')
STACKSGENDS
DATASEGMENT
ARYDW5,7,1,4,3,6,9,8,2;数组,流程图中为A
CTEQU($-ARY)/2;元素个数
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA,SS:
STACKSG
MAINPROCFAR
MOVAX,DATA
MOVDS,AX
MOVDI,CT-1;初始化外循环次数
LOP1:
MOVCX,DI;置内循环次数
MOVBX,0;置地址指针
LOP2:
MOVAX,ARY[BX]
CMPAX,ARY[BX+2];两数比较
JGECONT;次序正确转
XCHGAX,ARY[BX+2];次序不正确互换位置
MOVARY[BX],AX
CONT:
ADDBX,2;修改地址指针
LOOPLOP2;内循环控制
DECDI;修改外循环次数
JNZLOP1;外循环控制
MOVAX,4C00H
INT21H
MAINENDP
CODEENDS
ENDMAIN
四、实验结果
五、实验心得
1.在进行循环程序设计时,要注意循环初始化、内外层循环的控制、循环结束条件等的设置,对整个程序的执行逻辑要非常清楚,这样可以避免死循环等意外情况的出现。
2.当要观察排序结果时,可利用D命令,显示数据段的内容,检查程序是否正常运行
实验三:
查找匹配字符串
一、实验原理:
字符串的匹配进行应选用repz cmpsb操作,匹配一次过程后去判断关键字的指针移动的步数是不是和关键字长度相同,如果相同说明匹配成功,调用进制转化函数将结果输出即可,如果句子的指针移动到最后也没有使关键字的指针移动到它的结尾说明不能匹配。
二、实验目的
练习字符串的匹配程序设计。
三、实验内容
流程图如下:
源程序:
datareasegment
keyadrlabelbyte
keymaxdb20keyactdb?
keystringdb20dup(?
)
senadrlabelbyte
senmaxdb50
senactdb?
secstringdb50dup(?
)
messkeydb'Enterkeyword:
','$'
messsendb0dh,0ah,'EnterSentence:
','$'
nomatchdb0dh,0ah,'Nomatch.','$'
matchdb0dh,0ah,'Matchatlocation:
','$'
restdb'Hofthesentence.','$'
datareaends
;********************************************************
prognamsegment
mainprocfar
assumecs:
prognam,ds:
datarea,es:
datarea
start:
pushds
xorax,ax
pushax
movax,datarea
movds,ax
moves,ax
leadx,messkey
movah,09h
int21h
leadx,keyadr
movah,0ah
int21h
leadx,messsen
movah,09h
int21h
leadx,senadr
movah,0ah
int21h
moval,senact
subal,keyact
jlnmatch
callsearch
jmpshorte0
nmatch:
leadx,nomatch
movah,09h
int21h
e0:
ret
mainendp
;-------------------------------------------------------
searchprocnear
xorcx,cx;markoffcounter
movdx,offsetsenadr
adddl,senact
incdl
movcl,keyact
cld
leadi,secstring
r0:
leasi,keystring
repzcmpsb
moval,byteptr[si-1]
cmpal,byteptr[di-1]jnznext
subsi,offsetkeystring
movax,si
cmpal,keyact
jeshowpnext:
movcl,keyact
cmpdi,dx
jnzr0
shown:
leadx,nomatch
movah,09h
int21h
jmpshorte1
showp:
leadx,match
movah,09hint21h
decdi
movbx,di
xorax,ax
moval,keyact
subbx,ax
movax,offsetsenadr
subbx,ax
callbinihex
leadx,rest
movah,09h
int21h
e1:
ret
searchendp
binihexprocnear
movch,4
r1:
movcl,4
rolbx,cl
movdl,bl
anddl,0fh
adddl,30h
cmpdl,39h
jledisp
adddl,07h
disp:
movah,02h
int21h
decch
jnzr1
ret
binihexendp
;-------------------------------------------------------
prognamends
;********************************************************
endmain
四、实验结果
五、实验心得
与第一次实验相比这次用到了数据段,应该注意数据段的定义和使用。
此外应该注意单个字符时的“边缘”情况因为,这是指针的移动和关键字的长度是一致的,但是这并不意味着,两个字符串匹配。
实验四:
求Fibonacci递归数
一、实验原理:
Fibonacci数的定义如下:
FIB
(1)=1
FIB
(2)=1
FIB(N)=FIB(N-2)+FIB(N-1) N>=3
程序接收用户输入的1小于等于50的十进制正整数,存入输入缓冲区后再把它转化为十六进制数,存入内存单元N中。
调用FIB函数求Fibonacci数,结果高位存在RESULT2H,低位存在RESULT2L,最后调用OUTPUT函数将结果以十进制的形式显示出来。
程序亮点在于将结果转换为十进制时采用了除10取余的方法,对于高位通过在适当的位数加65536(ADD65536)的方式巧妙地将乘法转化为加法。
二、实验目的
进一步掌握子程序的设计方法,熟悉递归程序的设计
三、实验内容
流程图:
DATASSEGMENT
STR1DB'Pleaseinputanumber(1-50):
N=','$'
STR2DB13,10,'FIB(N)=','$'
WRONGSTRDB13,10,13,10,'Anumberbetween1and50please!
',13,10,13,10,'$'
INPUTBUFFERDB3,?
3DUP(?
)
NDW?
;输入N值
RESULT1HDW0
RESULT1LDW0
RESULT2HDW0;结果的高16位
RESULT2LDW0;结果的低16位
C10DW10
OUTPUTBUFFERDB11DUP('0')
DATASENDS
CODESSEGMENT
ASSUMECS:
CODES,DS:
DATAS
START:
MOVAX,DATAS
MOVDS,AX
CALLINPUT
CALLFIB
CALLOUTPUT
JMPQUIT
;**********************************************
INPUTPROC
JMPT1
WRONG:
LEADX,WRONGSTR
MOVAH,9
INT21H
T1:
LEADX,STR1
MOVAH,9
INT21H
LEADX,INPUTBUFFER
MOVAH,10
INT21H
MOVAX,0
MOVCL,INPUTBUFFER+1
MOVCH,0
LEABX,INPUTBUFFER+2
T2:
MULC10
MOVDL,[BX]
CMPDL,'0'
JBWRONG
CMPDL,'9'
JAWRONG
ANDDL,0FH
ADDAL,DL
ADCAH,0
INCBX
LOOPT2
CMPAX,0032H
JAWRONG
CMPAX,1
JBWRONG
MOVN,AX
RET
INPUTENDP
;*******************************************
FIBPROC
CMPN,1
JZL1
CMPN,2
JL2
DECN
CALLFIB
MOVAX,RESULT2L
MOVDX,RESULT2H
MOVCX,RESULT1L
ADDRESULT2L,CX
MOVCX,RESULT1H
ADCRESULT2H,CX
MOVRESULT1L,AX
MOVRESULT1H,DX
JMPEXIT
L1:
MOVRESULT1L,1
MOVRESULT2L,1
JMPEXIT
L2:
MOVRESULT2L,1
DECN
CALLFIB
EXIT:
RET
FIBENDP
;**************************************************
OUTPUTPROC
MOVAX,RESULT2L
LEASI,OUTPUTBUFFER
MOVCX,5
R1:
MOVDX,0;低位加入OUTPUTBUFFER
DIVC10
INCSI
ADD[SI],DL
LOOPR1
;*************************
MOVAX,RESULT2H
LEASI,OUTPUTBUFFER
MOVCX,5
R2:
MOVDX,0
DIVC10
INCSI
PUSHCX;高位加入OUTPUTBUFFER
CMPDX,0
JENOADD
MOVCX,DX
ADDN:
CALLADD65536
LOOPADDN
NOADD:
POPCX
LOOPR2
;**********************
LEADX,STR2
MOVAH,9
INT21H
LEASI,OUTPUTBUFFER
MOVBX,10
R3:
CMPBYTEPTR[SI+BX],'0'
JAPRINT
DECBX;显示十进制结果
JMPR3
PRINT:
MOVDL,[SI+BX]
MOVAH,2
INT21H
DECBX
CMPBX,1
JAEPRINT
RET
OUTPUTENDP
;******************************************************
ADD65536PROC;高位算法
ADDBYTEPTR[SI],6
MOVDL,0
CMPBYTEPTR[SI],3AH
JBA1
SUBBYTEPTR[SI],10
MOVDL,1
A1:
ADDBYTEPTR[SI+1],3
ADDBYTEPTR[SI+1],DL
MOVDL,0
CMPBYTEPTR[SI+1],3AH
JBA2
SUBBYTEPTR[SI+1],10
MOVDL,1
A2:
ADDBYTEPTR[SI+2],5
ADDBYTEPTR[SI+2],DL
MOVDL,0
CMPBYTEPTR[SI+2],3AH
JBA3
SUBBYTEPTR[SI+2],10
MOVDL,1
A3:
ADDBYTEPTR[SI+3],5
ADDBYTEPTR[SI+3],DL
MOVDL,0
CMPBYTEPTR[SI+3],3AH
JBA4
SUBBYTEPTR[SI+3],10
MOVDL,1
A4:
ADDBYTEPTR[SI+4],6
ADDBYTEPTR[SI+4],DL
MOVDL,0
CMPBYTEPTR[SI+4],3AH
JBA0
SUBBYTEPTR[SI+4],10
MOVDL,1
A5:
ADDBYTEPTR[SI+5],DL
MOVDL,0
CMPBYTEPTR[SI+5],3AH
JBA3
SUBBYTEPTR[SI+5],10
MOVDL,1
A6:
ADDBYTEPTR[SI+6],DL
MOVDL,0
CMPBYTEPTR[SI+6],3AH
JBA0
SUBBYTEPTR[SI+6],10
MOVDL,1
A7:
ADDBYTEPTR[SI+7],DL
MOVDL,0
CMPBYTEPTR[SI+7],3AH
JBA0
SUBBYTEPTR[SI+7],10
MOVDL,1
A8:
ADDBYTEPTR[SI+8],DL
MOVDL,0
CMPBYTEPTR[SI+8],3AH
JBA0
SUBBYTEPTR[SI+8],10
MOVDL,1
A9:
ADDBYTEPTR[SI+9],DL
A0:
RET
ADD65536ENDP
;**********************
QUIT:
MOVAH,4CH
INT21H
CODESENDS
ENDSTART
四、实验结果
五、实验心得
本实验使我进一步掌握子程序的设计方法,熟悉递归程序的设计,丰富了我写汇编程序的经验。
实验五:
分类统计字符个数
一、实验原理:
在下面的程序中,以读到的字符的ASCII码是否为0作为字符串末尾的标志;而进行三个逻辑判断(即数字字符判,大写字母字符判断和小写字母字符判)对相应字符的个数进行统计。
二、实验目的
通过分支程序设计实现字母、数字及其它字符的分类统计计
数。
三、实验内容
DATAS SEGMENT
STRING1 DB'Please input a string:
$' ;输入提示信息
STRING2 DB'Number of chars:
$ ';各类字符提示信息
STRING3 DB'Number of digits:
$'
STRING4 DB'Number of others:
$'
CHARS DB 0 ;字母
DIGIT DB 0 ;数字
OTHERS DB 0 其他
DATAS ENDS
STACKS SEGMENT
;此处输入堆栈段代码
STACKS ENDS
CODES SEGMENT
ASSUME CS:
CODES,DS:
DATAS,SS:
STACKS
START:
MOV AX,DATAS
MOV DS,AX
LEA DX,STRING1 ;显示输入提示信息Please input a string
MOV AH,09H
INT 21H
MOV CX,100 ;设置循环次数足够大
L1:
MOV AH,01H ;中断调用,单字符输入
INT 21H ;输入符号的ASCII代码在AL寄存器中
CMP AL,0DH ;若输入回车符则结束
JZ OVER2
CMP AL,30H ;若<30H(0),OTHERS++
JB OTHER
CMP AL,39H ;若>39H(9),跳转进一步比较
JA HIGHER1
JMP DIGITAL ;DIGIT++
HIGHER1:
CMP AL,41H ;若IF<41H(A),OTHERS++
JB OTHER
CMP AL,5AH ;若IF>5AH(Z),跳转继续比较 JA HIGHER2
JMP CHAR ;ALPHAU++
HIGHER2:
CMP AL,61H ;若IF<61H(a),OTHERS++
JB OTHER
CMP AL,7AH ;若IF>7AH(z),OTHERS++
JA OTHER
JMP CHAR ;ALPHAU++
JMP OVER ;比较结束
OTHER:
INC OTHERS ;OTHERS++
JMP OVER ;比较结束
CHAR:
INC CHARS ;ALPHAL++
JMP OVER ;比较结束
DIGITAL:
INC DIGIT ;DIGIT++
JMP OVER ;比较结束
JMP OVER ;比较结束
OVER:
NOP
LOOP L1
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机 组成 原理 汇编 实验 报告