汇编实验1.docx
- 文档编号:7780110
- 上传时间:2023-01-26
- 格式:DOCX
- 页数:17
- 大小:49.85KB
汇编实验1.docx
《汇编实验1.docx》由会员分享,可在线阅读,更多相关《汇编实验1.docx(17页珍藏版)》请在冰豆网上搜索。
汇编实验1
实验一顺序与分支程序设计
一、实验目的
1)掌握顺序程序设计方法。
2)掌握分支程序的结构及分支程序的设计,调试方法。
2)学习数据传送及算术和逻辑运算指令的用法。
3)熟悉在PC机上建立、汇编、连接、调试和运行汇编语言程序的过程。
二、实验容
1)有一字变量BUF1是以原码表示的有符号数,要求将其转换为反码和补码,分别存入BUF2和BUF3单元,并在屏幕上显示出来。
2)有两个两字节无符号数分别放在存储单元A、B起始的缓冲器中,求其和,结果放在A起始的缓冲区并在屏幕上显示。
相加若有进位不存入存储单元。
3)在BUF和BUF+1、BUF+2单元分别放有一个无符号字节型数,编程序将其中最大数存入MAX单元,并在屏幕上显示。
4)要求同上,只是比较的数为有符号数。
5)将1000H单元开始的10个字节数,采用奇偶校验,将奇数在前偶数在后仍存回原数据区。
本实验要求在DEBUG调试状态下进行,包括汇编程序、运行程序、检查结果。
6)从键盘上接收一位十进制数X,计算Y值,并以十六进制形式显示出来,Y按下列公式计算。
7)从键盘上接收两个一位十六进制数X和Y,然后再输入一个A-D之间的一个字符,按下列要求计算。
a)当输入字符为A,则计算X+Y,并以十六进制形式显示出来
b)当输入字符为B,则计算|X-Y|,并以十六进制形式显示出来
c)当输入字符为C,则计算X*Y,并以十六进制形式显示出来
d)当输入字符为D,则计算X/Y,并以十六进制形式显示出来
三、实验设备
PC机一台
四、实验准备
1)分析题目,将程序中的原始数据和最终结果的存取方法确定好。
2)画出流程图。
3)写出源程序。
4)对程序中的结果进行分析,并准备好上机调试与用汇编程序及汇编调试的过程。
五、实验步骤
1)输入源程序。
2)汇编、连接程序,生成.EXE文件,执行文件,检查结果。
六、实验报告的要求
1)列出源程序,说明程序的基本结构,包括程序中各部分的功能。
2)说明程序中各部分所用的算法。
3)说明主要符号和所用到寄存器的功能。
4)总结为什么在设计分支程序时必须解决三个问题:
判断、转向和定标号。
5)说明标志位CF、SF和OF的意义。
6)上机调试过程中遇到的问题是如何解决的。
7)对调试源程序的结果进行分析。
实验1-1
源程序:
DATASEGMENT
BUF1DW932AH;(以十六进制表示一个数的原码,包括符号位)
BUF2DW?
BUF3DW?
DATAENDS
STACK1SEGMENTPARASTACK
DW20HDUP(0)
STACK1ENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA,SS:
STACK1,ES:
DATA
START:
MOVAX,DATA
MOVDS,AX
MOVAX,BUF1
MOVBX,AX
ANDAX,0FFFFH
JNSL;sf表示符号标志位,若最高位大于7时,则为负,该命令判断是否为负,为负则求反(加一),为正则原样输出
NEGAX
XORBX,0FFFFH
ORAX,8000H;保持符号位不变
ORBX,8000H
L:
MOVBUF2,BX
MOVBUF3,AX
PUSHAX
PUSHBX
MOVCX,2
LOP:
POPBX;将结果每一位通过循环移位显示在屏幕上
PUSHCX
MOVCX,4
LP:
PUSHCX
MOVCL,4
ROLBX,CL
MOVDL,BL
ANDDL,0FH
CMPDL,0AH
L2
ADDDL,07H
L2:
ADDDL,30H
MOVAH,02H
INT21H
POPCX
LOOPLP
MOVDL,''
INT21H
POPCX
LOOPLOP
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
运行结果:
屏幕上显示的是BUF1数的反码和补码(十六进制,包括符号位)。
调试时发现结果显示成乱码,经过研究程序代码发现如果数字在A到F之间,则需要将存数值加37。
实验1-2
源程序:
datasegment
Adw00ED1h
Bdw0BDE9h
dataends
stack1segmentparastack
dw20hdup(0)
stack1ends
codesegment
assumecs:
code,ds:
data,ss:
stack1,es:
data
start:
MOVAX,DATA
MOVDS,AX
MOVBX,A;(把A存储的单元放入BX寄存器中)
MOVAX,B;(把B存储的单元放入AX寄存器中)
ADDBX,AX
JCL0;cf是无符号的进位,当两数相加大于0ffffh,产生进位
MOVA,BX
L0:
MOVDX,BX;显示相加结果
ANDDX,0F000H
MOVCL,12
SHRDX,CL
CMPDX,0AH
L1
ADDDX,7H
L1:
ADDDX,30H
MOVAH,02H
INT21H
MOVDX,BX
ANDDX,0F00H
MOVCL,8
SHRDX,CL
CMPDX,0AH
L2
ADDDX,7H
L2:
ADDDX,30H
MOVAH,02H
INT21H
MOVDX,BX
ANDDX,0F0H
MOVCL,4
SHRDX,CL
CMPDX,0AH
L3
ADDDX,7H
L3:
ADDDX,30H
MOVAH,02H
INT21H
MOVDX,BX
ANDDX,0FH
CMPDX,0AH
L4
ADDDX,7H
L4:
ADDDX,30H
MOVAH,02H
INT21H
movah,4ch
int21h
codeends
endstart
运行结果:
实验1-3
源代码:
datasegment
BUFDB03EH,060H,93H
MAXDB00H
dataends
stack1segmentparastack
dw20hdup(0)
stack1ends
codesegment
assumecs:
code,ds:
data,ss:
stack1,es:
data
START:
MOVAX,DATA
MOVDS,AX
ANDAX,0000H
MOVAL,BUF
MOVMAX,AL
MOVBL,BUF+1
CMPMAX,BL;找到最大的数
JAEL1
MOVMAX,BL
L1:
MOVBL,BUF+2
CMPMAX,BL
JAEL2;显示最大的数
MOVMAX,BL
L2:
ANDDX,0000H
MOVDL,MAX
ANDDL,0F0H
MOVCL,4
SHRDL,CL
CMPDL,0AH
L3
ADDDL,7H
L3:
ADDDL,30H
MOVAH,02H
INT21H
MOVDL,MAX
ANDDL,0FH
CMPDL,0AH
L4
ADDDL,7H
L4:
ADDDL,30H
MOVAH,02H
INT21H
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
运行结果:
实验1-4
源代码:
datasegment
BUFDB-34H,3AH,-43H;转换成补码
MAXDB00H
dataends
stack1segmentparastack
dw20hdup(0)
stack1ends
codesegment
assumecs:
code,ds:
data,ss:
stack1,es:
data
START:
MOVAX,DATA
MOVDS,AX
ANDAX,0000H
MOVAL,BUF;通过对所有的数取阶码比较大小
ADDAL,80H
MOVMAX,AL
MOVBL,BUF+1
ADDBL,80H
CMPMAX,BL
JAEL1
MOVMAX,BL
L1:
MOVBL,BUF+2
ADDBL,80H
CMPMAX,BL
JAEL2
MOVMAX,BL
L2:
ANDDX,0000H
MOVDL,MAX
SUBDL,80H;包含有cmp功能,对最大的数减去80h(取回原码)
JAEL3
MOVBL,DL
MOVDL,'-';如果是负数显示符号
MOVAH,02H
INT21H
MOVDL,BL
NEGDL;求补(针对带符号数)
L3:
MOVBL,DL;显示最大的数
ANDDL,0F0H
MOVCL,4
SHRDL,CL
ADDDL,30H
MOVAH,02H
INT21H
MOVDL,BL
ANDDL,0FH
CMPDL,0AH
L4
ADDDL,7H
L4:
ADDDL,30H
MOVAH,02H
INT21H
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
运行结果:
实验1-5
源程序:
DATASEGMENT
BUFDB10DUP(0)
BFDB00011110B,11111111B,6DUP(0),00110000B,00000001B
DATAENDS
STACK1SEGMENTPARASTACK
DW20HDUP(0)
STACK1ENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA,SS:
STACK1
START:
MOVAX,DATA
MOVDS,AX
MOVAX,100H
MOVES,AX
MOVCX,10
MOVDI,0
MOVSI,9
LOP:
MOVBX,CX
;MOVAL,BF+[BX]-1
MOVAL,ES:
-1[BX]
ANDAL,0FFH;mov不影响标志位
JPL1;pf为奇偶标志位,当位数为偶数时为1
LEABX,BUF
ADDBX,DI
MOV[BX],AL
INCDI
JMPL2
L1:
MOV[BUF+SI],AL
DECSI
L2:
LOOPLOP
MOVCX,10
LP:
MOVBX,CX
MOVAL,BUF+[BX]-1
MOVES:
-1[BX],AL
LOOPLP
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
运行结果:
1、对bf进行检验,再存入buf
2、对指定的存单元进行检验,存回指定的存单元
实验1-6
源程序:
DATASEGMENT
TABLEDWL3,L4,L5,L6;偏移地址是以字为单位的
DATAENDS
STACK1SEGMENTPARASTACK
DW20HDUP(0)
STACK1ENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA,SS:
STACK1,ES:
DATA
START:
MOVAX,DATA
MOVDS,AX
MOVAH,01H
INT21H
SUBAL,30H
CMPAL,3
L9
CMPAL,6
JAL9
ANDAH,00H
MOVDL,AL
LEABX,TABLE
SUBDL,3
SHLDL,1
MOVDI,DX;
MOVDL,AL
MULDL
JMP[BX+DI]
L3:
ADDAL,DL
JMPL1
L4:
SHLDL,1
SUBAL,DL
JMPL1
L5:
JMPL1
L6:
SHRAL,1
JMPL1
L1:
MOVBX,AX
MOVDX,BX
MOVCL,4
SHRDL,CL
CMPDL,0AH
L7
ADDDL,7H
L7:
ADDDL,30H
MOVAH,02H
INT21H
MOVDL,BL
ANDDL,0FH
CMPDL,0AH
L8
ADDDL,7H
L8:
ADDDL,30H
MOVAH,02H
INT21H
L9:
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
结果:
实验1-7
源程序:
DATASEGMENT
TABLEDWLA,LB,LC,LD
DATAENDS
STACK1SEGMENTPARASTACK
DW20HDUP(0)
STACK1ENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA,SS:
STACK1,ES:
DATA
START:
MOVAX,DATA
MOVDS,AX
MOVCX,02H
LOP:
MOVAH,01H
INT21H
CMPAL,30H
PEND
CMPAL,39H
JANEXT
SUBAL,30H
JMPL1
NEXT:
CMPAL,41H
PEND
CMPAL,46H
JAPEND
SUBAL,40H
ADDAL,09H
L1:
ANDAX,00FFH
PUSHAX
LOOPLOP
MOVAH,01H
INT21H
CMPAL,41H
PEND
CMPAL,44H
JAPEND
SUBAL,41H
SHLAL,1
MOVBX,OFFSETTABLE
ADDBL,AL
JMP[BX]
LA:
POPAX
POPBX
ADDAX,BX
JMPL0
LB:
POPAX
POPBX
SUBAX,BX
JAEL2
NEGAX
L2:
JMPL0
LC:
POPAX
POPBX
MULBL
JMPL0
LD:
POPBX
POPAX
DIVBL
JMPL0
L0:
MOVCX,2
MOVBX,AX
LOP2:
PUSHCX
MOVCL,4
ROLBL,CL
MOVDL,BL
ANDDL,0FH
CMPDL,0AH
L5
ADDDL,07H
L5:
ADDDL,30H
MOVAH,02H
INT21H
POPCX
LOOPLOP2
PEND:
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
结果:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 汇编 实验