合肥工业大学汇编程序设计实验报告完整代码

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

合肥工业大学汇编程序设计实验报告完整代码
合肥工业大学计算机与信息学院
实验报告
课程:汇编语言程序设计专业班级:信息安全13-1
学号:2013211869
姓名:马骏
实验一Debug程序的使用
一.实验目的
1、熟悉DEBUG程序中的命令,学会在DEBUG下调试运行汇编语言源程序。

2、掌握8086/8088的寻址方式及多字节数据的处理方法。

二.实验内容
1、利用DEBUG程序中的“E”命令,将两个多字节数“003F1AE7H”和“006BE5C4H”分别送入起始地址为DS:0200H 和DS:0204H两个单元中。

2、分别用直接寻址方式和寄存器间接寻址方式编写程序段,实现将DS:0200H 单元和DS:0204H单元中的数据相加,并将运算结果存放在DS:0208H单元中。

要求:
本次实验的内容均在DEBUG下完成,实现数据的装入、修改、显示;汇编语言程序段的编辑、汇编和反汇编;程序的运行和结果检查。

三.实验过程和程序
实验将”12345678H”和”FEDCBA98H”分别送入起始地址为DS:200H和DS:204H 的两个单元中。

还包含两个附加题,一是从DS:0000H 开始的5个16 位带符号数分别记为x,y,z,v,w,E命令初始化为:540,1,-1,1080,0, 试求w=(v-(x*y+z-540))/x,二是统计bx中1的个数
四.实验结果(包括必要的截图)
将两个多字节数“003F1AE7H”和“006BE5C4H”分别送入起始地址为DS:0200H 和DS:0204H两个单元中。

直接寻址方式实现数据相加寄存器间接寻址实现数据相加
附加题一:
从DS:0000H开始的 5 个16 位带符号数分别记为x,y,z,v,w,用E 命令初始化为:540,1,-1,1080,0, 试求w=(v-(x*y+z-540))/x 附加题二:完成BX中1 的个数的统计。

五.实验体会
通过本次实验,了解了使用debug的各种指令。

同时在debug 下进行编程,比较麻烦。

由于是第一次编写汇编程序,还是需要多练习。

实验二汇编语言程序设计(顺序、循环)
一.实验目的
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、计算表达式值(V–(X*Y+Z-720))/X;
data segment
x dw 021ch
y dw 0001h
z dw 0ffffh
v dw 0438h
w dw 0000h
sum1 dw ?
sum2 dw ?
data ends
assume cs:code,ds:data code segment
start:
mov ax,data
mov ds,ax
MOV AX,x
IMUL Y ; x*y
MOV CX, AX
MOV BX, DX
MOV AX, Z
CWD
ADD CX, AX
ADC BX, DX ; x*y+z
SUB CX, 540 ;?
SBB BX, 0 ; x*y+z-540 MOV AX, V
CWD
SUB AX, CX
SBB DX, BX ; v-(x*y+z-540) IDIV X ; (v-(x*y+z-540))/x mov sum1,ax
mov sum2,dx
mov ax,4c00h
int 21h
code ends
end start
2、求一个班50名学生成绩的平均值(附加题:最大值和最小值,并将结果显示出来)
data segment
db 7,49 dup(6)
max db ?
min db ?
result db 0
data ends
assume cs:code,ds:data
code segment
start: mov ax,data
mov ds,ax
mov ax,0
mov cx,50
mov di,0
again:
mov bx,0
mov bl,[di]
add di,1
add ax,bx
loop again
mov bl,50
div bl
mov result,al
mov di,50
max2:sub di,1 mov cx,50
mov si,0
mov al,[di]
max1: cmp al,[si] jb max2
add si,1
loop max1
mov max,al
mov di,50
min2:sub di,1 mov cx,50
mov si,0
mov al,[di]
min1: cmp al,[si] jnb min2
add si,1
loop min1
mov min,al
mov ax,4c00h
int 21h
code ends
end start
3、从键盘读入一个字符串,以Enter结束,字符串不超过50个字符,并打印该字符串(附加题:查找中间是否有‘asm’子串。

如果有,输出‘Yes’;否则,输出‘No’)。

data segment
data2 db 50,?,50 dup('$')
string db 'yes$'
string1 db 'no$'
data ends
assume cs:code,ds:data
code segment
start: mov ax,data
mov ds,ax
mov ah,0ah
mov dx,offset data2
int 21h
mov ah,2h
mov dl,0ah
int 21h
mov ah,2h
mov dl,0dh
int 21h
mov dx,offset data2+2 mov ah,09h
int 21h
mov ah,2h
mov dl,0ah
int 21h
mov ah,2h
mov dl,0dh
int 21h
mov al,0h
mov cx,47
mov di,0
again: mov al,[di+2] cmp al,61h
jnz next
mov al,[di+3]
cmp al,73h
jnz next
mov al,[di+4]
cmp al,6dh
jnz next
jmp yes
next: add di,1
loop again
mov dx,offset string1
mov ah,09h
int 21h
jmp endcode
yes: mov dx,offset string mov ah,09h
int 21h
endcode: mov ax,4c00h int 21h
code ends
end start
四.实验结果(包括必要的截图)
1、计算表达式值(V–(X*Y+Z-720))/X;
2、求一个班50名学生成绩的平均值(附加题:最大值和最小值,并将结果显示出来)
0030地址为平均值的商0032地址为最大值0034地址为最小值
3、从键盘读入一个字符串,以Enter结束,字符串不超过50个字符,并打印该字符串(附加题:查找中间是否有‘asm’子串。

如果有,输出‘Yes’;否则,输出‘No’)。

五.实验体会
通过此次试验,了解了符号扩展指令的使用。

第二程序中,以及在输出
还有在输出字符串前要先输出个时,输入的字符串末尾要注意加结束标志’$’,
回车换行,否则回车后看不到输出结果。

实验三汇编语言子程序设计(分支、子程序)
一.实验目的
1、掌握分支和子程序结构和设计方法;
2、熟悉在PC机上建立、汇编、连接、调试和运行8086/8088汇编语言程序的过程。

3、通过汇编语言了解高级语言的参数传递等知识。

二.实验内容
1、BL中的只有一位为1。

编写程序测试,并输出提示信息“The X Bit is 1”,要求:地址表和转移表。

2. 编写一个子程序计算z=f(x,y)=x*y+x-y(x,y,z有符号数内存数)。

要求通过堆栈(寄存器、内存)传送所有参数。

3. 实践C Asm的转换过程。

三.实验过程和程序
1、BL中的只有一位为1。

编写程序测试,并输出提示信息“The X Bit is 1”,要求:地址表和转移表。

;bl have one 1 cout<<="" bit="" is="" p="" x="">
data segment
addres dw fun8,fun7,fun6,fun5,fun4,fun3,fun2,fun1
string8 db 'The 8 Bit is 1$'
string7 db 'The 7 Bit is 1$'
string6 db 'The 6 Bit is 1$'
string5 db 'The 5 Bit is 1$'
string4 db 'The 4 Bit is 1$'
string3 db 'The 3 Bit is 1$'
string2 db 'The 2 Bit is 1$'
string1 db 'The 1 Bit is 1$'
data ends
assume ds:data,cs:code
code segment
start:
mov ax,data
mov ds,ax
mov bl,10h
mov ax,0000h
mov cx,8
math: shl bl,1
jc right
jmp next
right:mov dl,02h
mul dl
mov bp,ax
jmp addres[bp] next: inc ax
loop math
fun8:mov dx,offset string8 jmp cout
fun7:mov dx,offset string7 jmp cout
fun6:mov dx,offset string6 jmp cout
fun5:mov dx,offset string5 jmp cout
fun4:mov dx,offset string4 jmp cout
fun3:mov dx,offset string3 jmp cout
fun2:mov dx,offset string2 jmp cout
fun1:mov dx,offset string1 jmp cout
cout:mov ah,09h
int 21h
mov ah,4ch
int 21h
code ends
end start
2. 编写一个子程序计算z=f(x,y)=x*y+x-y(x,y,z有符号数内存数)。

要求通过堆栈(寄存器、内存)传送所有参数。

使用堆栈:
data segment
x db 03h
y db 0ffh
z dw 0000h
data ends
stack segment
dw 100 dup(?)
stack ends
assume ds:data,cs:code,ss:stack code segment
start: mov ax,data
mov ds,ax
mov ax,stack
mov ss,ax
mov al,x
push ax
mov al,y
push ax
call program
mov z,dx
add sp,2
jmp quit
program: push bp
mov bp,sp
mov ax,[bp+6]
mov dx,[bp+4]
imul dl
mov dx,ax
mov ax,[bp+6]
cbw
add dx,ax
mov ax,[bp+4]
cbw
sub dx,ax
pop bp
ret
quit: mov ah,4ch
int 21h
code ends
end start
二、使用寄存器传值
data segment
x db 03h
y db 0ffh
z dw 0000h
data ends
stack segment
dw 100 dup(?)
stack ends
assume ds:data,cs:code,ss:stack code segment start: mov ax,data
mov ds,ax
mov ax,stack
mov ss,ax
mov al,x
mov bl,y
call program
mov z,dx
jmp quit
program:
mov cl,al
imul bl
mov dx,ax
mov al,cl
cbw
add dx,ax
mov al,bl
cbw
sub dx,ax
ret
quit: mov ah,4ch
int 21h
code ends
end start
3. 实践C Asm的转换过程。

#include
int main()
{
_asm mov ax,0088h;
_asm
{
}
return 0;
}
四.实验结果(包括必要的截图)
1、BL中的只有一位为1。

编写程序测试,并输出提示信息“The X Bit is 1”,要求:地址表和转移表。

2.编写一个子程序计算z=f(x,y)=x*y+x-y(x,y,z有符号数内存数)。

要求通过堆栈(寄存器、内存)传送所有参数。

使用堆栈:dx及0002中为f(3,-1)=1
二、使用寄存器传值dx及0002中为f(3,-1)=1
3. 实践C Asm的转换过程。

TITLE D:\c++ documents\huibian.cpp
.386P
include listing.inc
if @Version gt 510
.model FLAT
else
_TEXT SEGMENT PARA USE32 PUBLIC 'CODE'
_TEXT ENDS
_DATA SEGMENT DWORD USE32 PUBLIC 'DATA' _DATA ENDS CONST SEGMENT DWORD USE32 PUBLIC 'CONST' CONST ENDS
_BSS SEGMENT DWORD USE32 PUBLIC 'BSS'
_BSS ENDS。

相关文档
最新文档