合肥工业大学
计算机与信息学院
实验报告
课 程:汇编语言程序设计
专业班级:
学 号:
姓 名:
实验一 Debug程序的使用
一. 实验目的
1、熟悉DEBUG程序中的命令,学会在DEBUG下调试运行汇编语言源程序。
2、掌握8086/8088的寻址方式及多字节数据的处理方法。
二. 实验内容
1、利用DEBUG程序中的“E”命令,将两个多字节数“003F1AE7H”和“006BE5C4H”分别送入起始地址为DS:0200H和DS:0204H两个单元中。
2、分别用直接寻址方式和寄存器间接寻址方式编写程序段,实现将DS:0200H单元和DS:0204H单元中的数据相加,并将运算结果存放在DS:0208H单元中。
要求:
本次实验的内容均在DEBUG下完成,实现数据的装入、修改、显示;汇编语言程序段的编辑、汇编和反汇编;程序的运行和结果检查。
三. 实验过程和程序
1.
e ds:0200 78 56 34 12
e ds:0204 98 BA DC FE
2.
直接寻址:
mov ax,[0200]
mov bx,[0202]
add ax,[0204]
adc bx,[0206]
mov [0208 ],ax
mov [020a],bx
间接寻址:
mov si,[0200]
mov di,[0204]
mov bx,[0208]
mov ax,[si]
mov dx,[si+2]
add ax,[di]
adc dx,[di+2]
mov [bx],ax
mov [bx+2],dx
附加题1
e ds:0000 1c 02
e ds:0002 01 00
e ds:0004 FF FF
e ds:0006 38 04
e ds:0008 00 00
Microsoft Windows [???? 6.1.7600]
???????? (c) 20## Microsoft Corporation????????????????
C:\Users\Administrator>debug
-e ds:0000 1c 02
-e ds:0002 01 00
-e ds:0004 FF FF
-e ds:0006 38 04
-e ds:0008 00 00
-a
13B3:0100 mov ax,[0000]
13B3:0103 mov bx,[0002]
13B3:0107 imul bx
13B3:0109 mov cx,ax
13B3:010B mov bx,dx
13B3:010D mov ax,[0004]
13B3:0110 cwd
13B3:0111 add cx,ax
13B3:0113 adc bx,dx
13B3:0115 sub cx,21c
13B3:0119 sbb bx,0
13B3:011C mov ax,[0006]
13B3:011F cwd
13B3:0120 sub ax,cx
13B3:0122 sbb dx,bx
13B3:0124 mov bx,[0000]
13B3:0128 idiv bx
13B3:012A mov [0008],ax
13B3:012D
-g =0100 012d
AX=0002 BX=021C CX=FFFF DX=0001 SP=FFEE BP=0000 SI=0000 DI=0000
DS=13B3 ES=13B3 SS=13B3 CS=13B3 IP=012D NV UP EI PL ZR AC PE CY
13B3:012D 0000
ADD [BX+SI],AL DS:021C=00
-
四. 实验结果
1.利用DEBUG程序中的“E”命令,将两个多字节数“003F1AE7H”和“006BE5C4H”分别送入起始地址为DS:0200H和DS:0204H两个单元中。
2.分别用直接寻址方式和寄存器间接寻址方式编写程序段,实现将DS:0200H单元和DS:0204H单元中的数据相加,并将运算结果存放在DS:0208H单元中。
附加题1
五. 实验体会
通过本次试验熟悉了DEBUG程序中的命令,学会在DEBUG下调试运行汇编语言源程序。以及DEBUG下的八个基本的指令,如a,g,t,u等等。初步掌握了8086/8088的寻址方式及多字节数据的处理方法。
实验二 汇编语言程序设计(顺序、循环)
一. 实验目的
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.
Data segment
sum1 dw 0
sum2 dw 0
x dw 21CH
y dw 1H
z dw 0FFFFH
v dw 438H
Data ends
Code segment
assume cs:code, ds:data
start:
mov ax,data
mov ds,ax
mov ax,x
mov bx,y
imul bx
mov cx,ax
mov bx,dx
mov ax,z
cwd
add cx,ax
adc bx,dx
sub cx,0D0H
sbb bx,0
mov ax,v
cwd
sub ax,cx
sbb dx,bx
mov bx,x
idiv bx
mov sum1,ax
mov sum2,dx
mov ah,4ch
int 21h
Code ends
end start
2.
Data segment
grade dw 10 dup (50,60,70,80,90)
Data ends
Code segment
assume cs:code, ds:data
start:
mov ax,data
mov ds,ax
mov cx,50
mov bx,0
mov ax,0
again:
add ax,grade[bx]
inc bx
inc bx
loop again
mov bx,50
div bx
mov ah,4ch
int 21h
Code ends
end start
3.
len equ 51
Data segment
string db len,?,len dup(?)
lf db 0ah
Data ends
Code segment
assume cs:code, ds:data
start:
mov ax,data
mov ds,ax
lea dx,string
mov ah,0ah
int 21h
mov dl,lf
mov ah,2
int 21h
mov cl,string[1]
mov ch,0
lea bx,string[2]
add bx,cx
mov byte ptr [bx],'$'
lea dx,string[2]
mov ah,09h
int 21h
mov ah,4ch
int 21h
Code ends
end start
四. 实验结果
1.
x dw 21CH
y dw 1H
z dw 0FFFFH
v dw 438H 结果为 sum1=0001 sum2=00d1
2.
输入10组数据,分别为50,60,70,80,90
输出 为46h
3.
输入:string
输出:string
五. 实验体会
掌握了顺序和循环程序结构和设计方法,以及字符、字符串的输入和显示,熟悉了在PC机上建立、汇编、连接、调试和运行8086/8088汇编语言程序的过程。
实验三 汇编语言子程序设计(分支、子程序)
一. 实验目的
1、掌握分支和子程序结构和设计方法;
2、熟悉在PC机上建立、汇编、连接、调试和运行8086/8088汇编语言程序的过程。
3、通过汇编语言了解高级语言的参数传递等知识。
二. 实验内容
1、1. BL中的只有一位为1。编写程序测试,并输出提示信息“The X Bit is 1”,要求:地址表和转移表。
2. 编写一个子程序计算z=f(x,y)=x*y+x-y(x,y,z有符号数内存数)。要求通过堆栈(寄存器、内存)传送所有参数。
三. 实验过程和程序
1.
地址表方法:
Data segment
x db 10h
addrtbl dw l0,l1,l2,l3,l4,l5,l6,l7
s0 db 'The 0 Bit is 1.$'
s1 db 'The 1 Bit is 1.$'
s2 db 'The 2 Bit is 1.$'
s3 db 'The 3 Bit is 1.$'
s4 db 'The 4 Bit is 1.$'
s5 db 'The 5 Bit is 1.$'
s6 db 'The 6 Bit is 1.$'
s7 db 'The 7 Bit is 1.$'
Data ends
Code segment
assume cs:code, ds:data
start:
mov ax,data
mov ds,ax
mov cx,8
mov bl,x
again:
shr bl,1
jnc l
mov si,8
sub si,cx
shl si,1
jmp addrtbl[si]
l0:
lea dx,s0
jmp output
l1:
lea dx,s1
jmp output
l2:
lea dx,s2
jmp output
l3:
lea dx,s3
jmp output
l4:
lea dx,s4
jmp output
l5:
lea dx,s5
jmp output
l6:
lea dx,s6
jmp output
l7:
lea dx,s7
jmp output
l:
loop again
output:
mov ah,9h
int 21h
mov ah,4ch
int 21h
Code ends
end start
转移表方法:
Data segment
x db 80h
addrtbl dw l0,l1,l2,l3,l4,l5,l6,l7
s0 db 'The 0 Bit is 1.$'
s1 db 'The 1 Bit is 1.$'
s2 db 'The 2 Bit is 1.$'
s3 db 'The 3 Bit is 1.$'
s4 db 'The 4 Bit is 1.$'
s5 db 'The 5 Bit is 1.$'
s6 db 'The 6 Bit is 1.$'
s7 db 'The 7 Bit is 1.$'
Data ends
Code segment
assume cs:code, ds:data
start:
mov ax,data
mov ds,ax
mov cx,8
mov bl,x
again:
shr bl,1
jnc l
mov si,8
sub si,cx
l:
loop again
lea ax,jmptbl
mov cx,si
shl si,1
add si,cx
add ax,si
jmp ax
jmptbl:
jmp near ptr l0
jmp near ptr l1
jmp near ptr l2
jmp near ptr l3
jmp near ptr l4
jmp near ptr l5
jmp near ptr l6
jmp near ptr l7
l0:
lea dx,s0
jmp output
l1:
lea dx,s1
jmp output
l2:
lea dx,s2
jmp output
l3:
lea dx,s3
jmp output
l4:
lea dx,s4
jmp output
l5:
lea dx,s5
jmp output
l6:
lea dx,s6
jmp output
l7:
lea dx,s7
jmp output
output:
mov ah,9h
int 21h
mov ah,4ch
int 21h
Code ends
end start
2.
Data segment
x dw 1
y dw 2
z dw 0
Data ends
Code segment
assume cs:code, ds:data
start:
mov ax,data
mov ds,ax
sub sp,4
push y
push x
call f
pop z
mov ah,4ch
int 21h
f proc near
push bp
mov bp,sp
push si
push dx
push cx
push bx
push ax
mov ax,[bp+4]
mov cx,ax
mov bx,[bp+6]
imul bx
mov si,0
add ax,cx
adc dx,si
mov si,0
sub ax,bx
sbb dx,si
mov [bp+8],ax
mov [bp+10],dx
ret 4
f endp
Code ends
end start
四. 实验结果
1.
地址表方法:
BL中存储的数为: 10h
输出结果为: The 4 bit is 1.
转移表方法:
BL中存储的数为: 80h
输出结果为: The 7 bit is 1.
2.
五. 实验体会
通过本次试验,掌握了分支和子程序结构和设计方法;实现了转移表以及地址表的创建及调用,以及几种参数传递的方式,进一步熟悉了在PC机上建立、汇编、连接、调试和运行8086/8088汇编语言程序的过程。
实验四 汇编语言高级编程专题
一. 实验目的
1、汇编语言宏程序设计;
2、 掌握中断服务子程序的编写。
3、 汇编语言与高级语言的混编。
二. 实验内容
1、编写一个宏,求三个数的最小数,原型为:MIN3 x,y,z,min
2、挂接1CH中断,正计时60秒后退出。要求屏幕显示0-59的秒数。
三. 实验过程和程序
1.
MIN3 macro x,y,z,min
mov al,x
mov bl,y
mov cl,z
cmp al,bl
jc l1
cmp bl,cl
jc l2
mov min,cl
jmp exit
l1: cmp al,cl
jc l3
mov min,cl
jmp exit
l2: mov min,bl
jmp exit
l3: mov min,al
exit:
endm
Data segment
x db 03h
y db 02h
z db 01h
min db ?
Data ends
Code segment
assume cs:code, ds:data
start:
mov ax,data
mov ds,ax
MIN3 x,y,z,min
add min,30h
mov dl,min
mov ah,02h
int 21h
mov ah,4ch
int 21h
Code ends
end start
2.
INTNO EQU 1CH
USEINT = 59
DATA SEGMENT
OLDISR DW ?,?
TIMER DB 100
COUNTER DW 60
ISDONE DB 0
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START:
MOV AX,DATA
MOV DS,AX
MOV AX,0
MOV ES,AX
;PROTECT
IF USEINT
MOV AL, INTNO
MOV AH,35H
INT 21H
;ES:BX
MOV OLDISR[0], BX
MOV AX,ES
MOV OLDISR[2], AX
ELSE
CLI
MOV AX, ES:[INTNO*4]
MOV OLDISR[0],AX
MOV AX,ES:[INTNO*4+2]
MOV OLDISR[2], AX
STI
ENDIF
;SET NEW ISR
IF USEINT
PUSH DS
MOV AX, SEG ISR
MOV DS,AX
MOV DX, OFFSET ISR
MOV AL, INTNO
MOV AH, 25H
INT 21H
POP DS
ELSE
CLI
MOV WORD PTR ES:[INTNO*4], OFFSET ISR
MOV WORD PTR ES:[INTNO*4+2],SEG ISR
STI
ENDIF
;WAIT HERE
WAITHERE:
CMP ISDONE,1
JNZ WAITHERE
EXIT: ;RESTORE
IF USEINT
PUSH DS
MOV DX,OLDISR[0]
MOV AX,OLDISR[2]
MOV DS,AX
MOV AL, INTNO
MOV AH, 25H
INT 21H
POP DS
ELSE
CLI
MOV AX,OLDISR[0]
MOV ES:[INTNO*4],AX
MOV AX,OLDISR[2]
MOV ES:[INTNO*4+2],AX
STI
ENDIF
MOV AX,4C00H
INT 21H
ISR PROC FAR
PUSH DX
PUSH AX
MOV AX,DATA
MOV DS,AX
STI ;便于中断嵌套
;COUNT HERE
INC TIMER
AGAIN:
CMP TIMER, 1000/55 ;18
JB DONE
MOV TIMER,0
;carriage
MOV AH,2
MOV DL,13
INT 21H
;print time
MOV AX,COUNTER
MOV DL,10
DIV DL
MOV DH,AH
MOV DL,AL
MOV AH,2
ADD DL,30H
INT 21H
MOV DL,DH
ADD DL,30H
INT 21H
DEC COUNTER
JGE DONE
MOV ISDONE,1
DONE:
PUSHF
CALL DWORD PTR OLDISR
CLI
POP AX
POP DX
IRET ;中断返回
ISR ENDP
CODE ENDS
END START
四. 实验结果
1.
输入:x,y,z分别是03h 02h 01h
输出:1
2.
五. 实验体会
通过本次试验熟悉了汇编语言宏程序设计;掌握中断服务子程序的编写,其中应注意恢复原中断指令,将ds重新指向数据段。
实验一汇编语言的源程序的输入一实验目的1通过实验了解和熟悉微机系统的配置2学习在DEBUG状态下输入汇编源程序的方法3初步掌握调试…
学生实验报告册20xx20xx学年第1学期实验名称汇编语言程序设计学院信息与电气工程学院班级09级计算机科学与技术2班学号1351…
汇编语言实验报告姓名专业软件工程班级093班学号099074235STARTMOVAXDATASMOVDSAXmovbxoffse…
HarbinInstituteofTechnologyatWeihai汇编语言实验报告实验一第一部分dubug用法一问题描述上机前…
福建农林大学金山学院课程名称姓名系专业年级学号指导教师职称程序设计类课程实验报告汇编语言庄建军信息与机电工程电子信息工程专业20x…
实验七分支程序实验目的1掌握利用间接转移指令JMPBX实现多岔分枝的方法2宏替换指令MACRO及ENDM3符号扩展指令CBW实验程…
一实验内容1DEBUG的启动及其基本命令的使用2内存操作数与寻址方式1利用DEBUG程序中的E命令将两个多字节数12345678H…
汇编语言程序设计实验报告学院计算机科学与技术专业计算机科学与技术指导教师班级学号姓名实验一集成环境及调试工具一实验题目认识Tdde…
IBMPC汇编语言程序设计实验报告四姓名周义学号12125800老师杨洪斌一实验目的学习用汇编语言设计与编写子程序二实验要求1要求…
计算机组成原理与汇编语言实验20xx指导教师签名一实验原理基本知识简单介绍算法流程计算机组成原理与汇编语言实验20xx计算机组成原…
实验一1熟悉汇编语言程序调试环境及顺序程序设计一实验目的及要求1学习及掌握汇编语言源程序的书写格式和要求明确程序中各段的功能和相互…