河北工业大学汇编实验报告Word文件下载.docx
《河北工业大学汇编实验报告Word文件下载.docx》由会员分享,可在线阅读,更多相关《河北工业大学汇编实验报告Word文件下载.docx(32页珍藏版)》请在冰豆网上搜索。
五、实验步骤
1)输入源程序。
2)汇编、连接程序,生成.EXE文件,执行文件,检查结果。
六、实验报告的要求
1)列出源程序,说明程序的基本结构,包括程序中各部分的功能。
2)说明程序中各部分所用的算法。
3)说明主要符号和所用到寄存器的功能。
4)总结为什么在设计分支程序时必须解决三个问题:
判断、转向和定标号。
5)说明标志位CF、SF和OF的意义。
6)上机调试过程中遇到的问题是如何解决的。
7)对调试源程序的结果进行分析。
Exam1:
DATA
SEGMENT;
数据段
BUF1
DW
7898H
BUF2
4
DUP(0),0AH,0DH,'
$'
BUF3
DW
DUP(0),'
ENDS;
数据段结束
CODE
代码段
ASSUME
CS:
CODE,DS:
DATA;
段寄存器关联说明伪指令
BEGIN:
MOV
AX,DATA
DS,AX;
将数据段的基地址装入数据段寄存器DS
AX,BUF1;
将字型变量BUF1的值装入AX寄存器
ADD
AX,0;
AX寄存器里的数据加0,以便进行转移测试
JS
NEXT;
判断(AX)的正负,若为负则转到NEXT,为正则往下顺序执行。
MOV
BUF2,AX;
为正,反码与原码一样
BUF3,AX;
为正,补码与原码一样
JMP
EEE
NEXT:
AND
AX,7FFFH;
将符号位变为0
NOT
AX;
求反码
BUF2,AX;
将BUF1的反码装入BUF2
INC
AX;
求补码
BUF3,AX;
将补码装入BUF3
EEE:
CX,0004H;
将0004H装入CX计数器寄存器中
DI,OFFSET
BUF2;
将DI指向变量BUF2开始的存储单元
DX,
[DI];
将DI所指的数据装入DX寄存器中
DI,03;
将DI指针下移三个字
BBB:
AX,DX;
将DX中的容装入AX寄存器中
AX,000FH;
即使BUF2的低四位不变,其余均变为0
CMP
AL,0AH;
比较[AL]与0AH的大小,以便能正确转换为0-9的ASCII值
JB
QQQ;
若[AL]<
0AH,则转到QQQ,否则,顺序执行
AL,07H;
因为[AL]>
0AH,所以[AL]+07H,使得AL能转换成相应数字的ASCII值
QQQ:
AL,30H;
将[AL]转换成相应数字的ASCII值
[DI],AL;
将AL中的容装入以DS中的容为段基地址,以DI的容为偏移地址的存储单元中
DEC
DI;
DI=DI-1,即将DI指向前一个存储单元
PUSH
CX;
保存CX寄存器的容
CL,04H;
给CL寄存器赋值为04H
SHR
DX,CL;
将[DX]逻辑右移四位
POP
恢复CX寄存器的容
LOOP
BBB;
循环判断语句,CX=CX-1,若CX不等于0,则转到BBB,将下一个低四位存入存储单元中,否则循环结束
CX,0004H;
给CX寄存器赋值为0004H
SI,OFFSET
BUF3;
将SI指向变量BUF3开始的存储单元
DX,[SI];
将SI所指的数据装入DX寄存器中
ADD
SI,03H;
将DI指针下移三个字
CCC:
AX,DX;
AND
AX,000FH;
即使BUF3的低四位不变,其余均变为0
JB
DDD;
0AH,则转到DDD,否则,顺序执行
DDD:
AL,
30H;
[SI],AL;
将AL中的容装入以DS中的容为段基地址,以SI的容为偏移地址的存储单元中
DEC
SI;
SI=SI-1,即将SI指向前一个存储单元
PUSH
CX;
CL,
04H;
SHR
DX,
CL;
POP
LOOP
CCC;
循环判断语句,CX=CX-1,若CX不等于0,则转到CCC,将下一个低四位存入存储单元中,否则循环结束
OFFSET
将BUF2的偏移地址装入DX寄存器中
AH,09H
INT
21H;
在屏幕上显示BUF1的反码
DX,OFFSET
BUF3
AH,09H
21H;
在屏幕上显示BUF1的补码
AH,4CH
带返回码终止
CODE
ENDS
END
BEGIN
Exam2:
A
DB
34H,18H,2
DUP(0),
'
;
定义字节型变量,其后的每操作数都占有一个字节
B
56H,
83H;
SEGMENT;
CODE,
DS:
DATA
START:
DS,
AX;
将数据段基地址装入数据段寄存器DS
AL,
A;
将A所指的数装入AL寄存器中
BL,
B;
将B所指的数装入BL寄存器中
BL;
AL+BL->
AL
AH,
A+1;
将A所指的下一个字节的数据装入AH
BH,
B+1;
将B所指的下一个字节的数据装入BH
ADC
AH,BH;
AH与BH进行带进位加法
A,AL;
将第一个无符号数的相加结果放在以A起始的缓冲区
A+1,AH;
将第二个无符号数的相加结果放在以A+1起始的缓冲区
CX,0014H;
以下是将数据转换为相应的ASCII值
DI,
OFFSETA
MOV
DX,
[DI]
03
AX,DX
AX,000FH
CMP
AL,0AH
JB
QQQ
AL,07H
AL,30H
[DI],
AL
DI
CX
14
CL
POP
LOOP
NEXT
A
INT
在屏幕上显示结果
END
START
Exam3:
STACK
SEGMENT
STACK;
堆栈段
1000
DUP(0);
定义其后的每个操作数都占有一个字节
堆栈段结束
BUF
DB72H,34H,1FH;
MAX
DB
2
DUP
(?
),
DATA
DATA,SS:
STACK
AX,
DATA
BUF;
将BUF所指向的一个字节数据装入AL
BUF+1;
比较BUF与BUF+1大小
JNB
LP1;
如果BUF不小于BUF+1,则转到lp1,否则顺序向下执行
BUF+1;
将BUF+1所指向的一个字节数据装入AL
LP1:
CMP
BUF+2;
将BUF和BUF1中较大的一个和BUF+2比较大小
JAE
LP2;
如果BUF2小,则转到lp2,否则执行顺序向下执行
BUF+2;
此时BUF2为三个数中最大的一个,将最大数装入AL寄存器中
LP2:
CX,
04H;
以下是将输出的最大