汇编语言实验3
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
汇编语⾔实验3
操作系统原理实验报告
实验名称:顺序结构程序设计
姓名: xxx
学号: xxxxxxxxx
班级: xxxxxxx
指导⽼师:罗⾟
⼀、实验内容
1、汇编语⾔提供了“乘法”指令,在debug中可以看出运⾏机制如下:
请仔细分析上⾯的运⾏记录,并根据上⾯的⽅法在debug中完成:①你的学号的“末两位数字(使⽤⼗进制,字节型)×2”的积,结果放⼊200号存储单元;
②你的学号的“末两位数字(使⽤⼗进制,字型)×2”的积,结果使⽤默认寄存器;
③显⽰寄存器与存储器中的结果。
要求:
②debug的屏幕截图,并分析各语句的功能;
②指出各寄存器、各存储器中的结果。
2、汇编语⾔提供了“除法”指令,在debug中可以看出运⾏机制如下:
请仔细分析上⾯的运⾏记录,并根据上⾯的⽅法在debug中完成:
①你的学号的“末两位数字(使⽤⼗进制,字型)÷2”的商,结果使⽤
默认寄存器;
②你的学号的“末⼋位数字(使⽤⼗进制,字型)÷100”的商,使⽤200
号存储单元;
③显⽰寄存器与存储器中的结果。
要求:
①debug的屏幕截图,并分析各语句的功能;
②指出各寄存器、各存储器中的结果。
3、编程实现:
⾸先将FIRST字变量与SECONFD字变量相加,结果存⼊THIRD1存储字中,然后将FIRST与SECOND两个字变量相乘,结果存⼊THIRD2开始的两个字中。
提⽰:FIRST与SECOND都是字变量,因此存放和的THIRD1单元也必须是字变量。
⽽存放积的单元THIRD2必须是双字。
4、编写程序完成下式的计算,其中X、Y、Z和W均为存放32位⽆符号数的单元地址:
W=Z-(X+6)-(Y-8)
5、编程实现综合算术运算功能:(V-(X*Y+Z-540))。
其中,X、Y、Z、V 均为16位带符号数,已分别装⼊X、Y、Z、V单元中,要求上式计算结果的商存⼊AX,余数存⼊DX寄存器。
6、编写⼀个32位⽆符号数除法的程序。
要求将存放在NUM1中的32位⽆符号数与存放在NUM2中的16位⽆符号数相除,结果存放在NUM3和NUM4中。
根据题⽬要求,应把存放在数据段内的被除数NUM1定义为32位,除数NUM2定义为16位,商NUM3定义为16位,余数NUM4定义为16位。
提⽰:
①数据段定义
②32位被除数与16位除数相除的程序段
③本程序执⾏结果为:
2A8B7654H÷5ABCH=7809H……25B8H
7、试编写⼀个程序,要求把BL中的数除以CL中的数,并把其商乘以2,最后的结果存⼊DX寄存器中。
8、编程计算24,要求将123B0H~123BAH的内存单元定义为数据段
⼆、实验⽬的
(1) 掌握汇编程序的基本格式和结构
(2) 掌握顺序结构程序的设计⽅法
(3) 掌握ADD、ADC、SUB、SBC、MUL、IMUL、DIV、IDIV等算术运算指令。
(4) 掌握各种运算过程中各标志位的变化情况。
三、实验原理
操作系统原理,debug运⾏原理等。
四、实验过程
(重点部分,必须包括:实验开发环境、实验步骤、实验源程序代码及其结构分析)
实验开发环境:家⽤windows 10 笔记本电脑,DOSBOX虚拟环境。
实验步骤:运⽤DOSBOX虚拟debug环境进⾏实验。
实验源程序代码:
1.
Mov al,08
Mov dl,2
Mul dl
Mov word ptr[0200],ax Mov ax,0008
Mov dx,2
Mul dx
2.
mov ax,0208
mov dx,5131
mov cx,100
mov bx,ax
pop ax
div cx
mov cx,dx
mov dx,bx
3.
assume cs:code,ds:data
data segment
FIRST dw 0123h
SECONFD dw 0456h
THIRD1 dw 0h
THIRD2 dw 0h
data ends
code segment
start:
mov ax,data
mov ds,ax
mov ax,FIRST
add ax,SECONFD
mov THIRD1,ax
mov ax,FIRST
mul SECONFD
mov word ptr THIRD2,ax
mov word ptr THIRD2+2,dx mov ax,4c00h int 21h
code ends
end start
4.
assume cs:code,ds:data data segment
X dd 2h
data ends
code segment
start:
mov ax,data
mov ds,ax
mov ax,X
mov dx,X+2
add ax,a
add dx,a+2
sub Z,ax
sub Z+2,dx
mov ax,Y
mov dx,Y+2
sub ax,b
sub dx,b+2
sub Z+2,dx
sub Z,ax
mov ax,Z
mov dx,Z+2
mov W,ax
mov W+2,dx
mov ax,4c00h
int 21h
code ends
end start
5.
assume cs:code,ds:data data segment x dw 1h
y dw 0123h
z dw 0234h
code segment start: mov ax,data
mov ds,ax
mov ax,x
imul y
mov cx,ax
mov bx,dx
mov ax,z
cwd
add cx,ax
add bx,dx
sub cx,540
sbb bx,0
mov ax,v
cwd
sub ax,cx
sbb dx,bx
idiv x
mov ax,4c00h
int 21h
code ends
end start
6.
assume cs:code,ds:data data segment
NUM1 DD 2A8B7654H NUM2 DW 5ABCH NUM3 DW 0H
NUM4 DW 0H
data ends
code segment
start:
mov ax,data
mov dx,word ptr NUM1+2
div NUM2
mov NUM3,ax
mov NUM4,dx
mov ax,4c00h
int 21h
code ends
end start
7.
assume cs:code code segment; start: mov bx,000Fh
mov cx,000Dh
mov al,bl
mov ah,0
div cl
mov ah,0
shl ax,1
mov dx,ax
mov ax,4c00h
int 21h
code ends
end start
8.
assume cs:code code segment start: mov ax,123bh
mov ds,ax
mov ax,2h
mov bx,0h
mov ax,2h
add ax,ax
add ax,ax
add ax,ax
mov [bx],ax
code ends
end start
五、实验结果
(把程序运⾏的结果通过截屏帖出来,并简单描述每个截图的意思)1.
语句分析:
Mov al,08:将08存⼊al;
Mov dl,2:将2存⼊dl;
Mul,dl:计算2 *8,并将结果存⼊默认寄存器ax中;
Mov word ptr[0200],ax:将以上ax中的结果放到0200这个内存地址中;Mov ax,0008:将0008存⼊ax中;Mov dx,2:将2存⼊dx中;
Mul dx:计算0008*2,并将结果存⼊默认寄存器ax中。
结果:
Ax中为10H,即为16;DX为0000;
2.1
语句分析:
Mov ax,08:将08存⼊ax中;
Mov dl,2:将2存⼊al中;
Div dl:计算8/2,并将结果存⼊默认寄存器。
结果:AX为4。
2.2
结果存放在dx 和ax中,为513102。
3.
开始时:
FIRST=0123H SECONFD=0456H THIRD1=0H THIRD2=0H。
结束时:
THIRD1=FORST+SECONFD=0579H THIRD2=FIRST*SECONFD=4EDC2H。
4.
开始时:
X=2H Y=9H Z=15H W=0H
结束时:
W=Z-(X+6)-(Y-8)=CH。
5.
开始时;
X=1H Y=0123H Z=0234H V=0345H。
结束时:
AX=020A DX=0000H。
6.
开始时:
NUM1=2A8B7654H NUM2=5ABCH NUM3=0H NUM4=0H。
结束时:商NUM3=7809H 余数NUM4=25B8H。
7.
BL=000FH CL=000DH
BL/CL*2=2=DX
所以结果正确。
8.
2^4=10H。
六、实验⼼得体会
更加熟练的使⽤DEBUG来调试程序,初步认识汇编语⾔程序的写法。