西安交通大学-汇编语言-实验报告(2015)最新x
时间:2020-09-14 12:22:06 来源:勤学考试网 本文已影响 人
汇编语言实验报告
计算机xx班
21x0505xxx xx
2015年6月2日
80X86汇编语言程序设计课内实验报告
班级
计算机xx
实验时间
2015
姓名
xx
学号
21x0505xxx
实验内容概述
实验一 熟悉汇编语言的实验环境
实验二 数据段中已定义了一个有 n 个字数据的数组 M,试编写一程序求出 M 中绝对值最大的数,把它放在数据段的 M+2n 单元中,并将该数的偏移地址存 放在 M+2(n+1)单元中。
实验三 设计一程序,接收从键盘输入的数字(1~5),并对每个数字的输入次数进行计数,计数结果存放在以 COUNT 为首地址的数组中。(最好能将计数结果打印出来)。
实验四 子程序及 DOS/BIOS 调用程序设计
题6.9
设有10 个学生的成绩分别是76,69,84,90,73,88,99,63,100 和80 分。
试编制一个子程序统计60~69 分,70~79 分,80~89 分,90~99 分和100 分的人数并分别存放到S6, S7, S8, S9 和S10 单元中。
实验五 高级汇编语言技术
题7.11
试编写一段程序,完成以下功能:若给定名为X 的字符串长度大于5 时,下列指令将汇编10 次。
ADD AX, AX
(要求:使用条件汇编,编译过程中生成LST 文件,查看宏展开情况)
实验六 输入输出程序设计
编写程序,使类型1CH 的中断向量指向中断处理程序COUNT,COUNT 统计1CH 中断次数并存入单元M 中。
实验七 BIOS 和DOS 中断
题9.2
编写一个程序,接收从键盘输入的10 个十进制数字,输入回车符则停止输入,然后将这些数字加密后(用XLAT 指令变换)存入内存缓冲区BUFFER。
加密表为:
输入数字: 0,1,2,3,4,5,6,7,8,9
密码数字: 7,5,9,1,3,6,8,0,2,4
实验步骤
第一题
1.熟悉汇编语言的实验环境,了解各项功能的调用。
2.熟悉掌握masm,link,debug等工具,将一个asm文件通过汇编连接成一个可执行文件。
第二题
编写实验二并调试并调试
查看数据段寄存器结果是否正确。
第三题
1.编写实验三并调试,初步了解中断的功能调用。
2.从键盘输入若干1-5,看输出结果是否正确。
第四题:
在主程序中调用子函数count,完成将每个在数组mark里的成绩一一取出。
分别判定其大小而放入统计60~69 分,70~79 分,80~89 分,90~99 分和100 分的人数的S6, S7, S8, S9 和S10 单元中,在数据段中查看出S6, S7, S8, S9 和S10中的数。
第五题:
1.使用条件汇编和重复汇编。
2.判断当给定名为X 的字符串长度大于5 时,重复 ADD AX, AX 10 次。
第六题:
使类型1CH 的中断向量指向中断处理程序COUNT。
COUNT中 1CH 中断每调用一次则给num加一,计算出num最后的值后存入单元M 中。
第七题:
1.接收从键盘输入的10 个十进制数字,输入回车符则停止输入。
2.调用xlat使得(al)<—((al)+(bx))
实验中遇到的问题及其解决方法
1、关于没有定义堆栈段系统发出warning问题?
Link的时候,如果程序没有定义堆栈,dos系统会发出警告,但不影响后续操作。
问题是在实验2中遇到,解决的思路是暂且忽略这个警告,因为堆栈是用来保存便于返回的,当程序不是很复杂时,用堆栈显得不叫繁琐。
2、关于汇编语言的输出问题?
汇编语言输出时,预期为数字或者英文字母,但有时会出现乱码。
经过仔细思考,发现汇编的输出同一为16进制,只要把所有的输出同一为16进制而不是10进制,输出就没有问题。
3、关于数据加密问题?
最后一题为数据加密后输出,题目给定一个密码表,要求将输入的数据加密后输出
通过查找命令,发现xlat命令的作用是使得(al)<—((al)+(bx)),这样就很方便的将数据加密。
实验结果
第一题:
第二题
第三题
第四题
第五题
年 月 日
实验结果
第六题:
第七题:
建议
上机实验太少,可以考虑增加上机次数。
两次上机时间相隔太久,最好可以将上机时间提前。
可以增加一些选作的课程设计,满足不同需求的同学。
下附各个题目代码;
第二题:
data segment
m dw -1,0,0,1,-2,-3,-4,4
max dw 0
dizhi dw ?
data ends
code segment
main proc far
assume cs:code,ds:data
mov ax,data
start: push ds
sub ax,ax
push ax
mov ax,data
mov ds,ax
lea bx,m
mov cx,8
t1: mov ax,[bx]
test ax,8000h
jz t2
neg ax
t2: cmp ax,max
jb t3
mov max,ax
mov dizhi,bx
t3: add bx,2
loop t1
mov ax,ax
ret
main endp
code ends
end start
第三题:
data segment
count db 5 dup(0)
data ends
code segment
main proc far
assume cs:code,ds:data
start: mov ax,data
mov ds,ax
s1: mov cx,10d
call fenlei
call disp
mov ax,4c00h
int 21h
ret
main endp
fenlei proc near
input: mov ah,1
int 21h
cmp al,0dh
jz exit
sub al,30h
cmp al,01h
jb input
cmp al,05h
ja input
mov ah,0
cbw
mov bx,ax
dec bx
inc count[bx]
loop input
exit: ret
fenlei endp
disp proc near
mov si,0
mov bx,5
s: mov dl,count[si]
add dl,30h
mov ah,2
int 21h
inc si
dec bx
cmp bx,0
ja s
ret
disp endp
code ends
end start
第四题:
data segment
score dw 76,69,84,90,73,88,99,63,100,80
S6 dw 0
S7 dw 0
S8 dw 0
S9 dw 0
S10 dw 0
data ends
code segment
main proc far
assume cs:code,ds:data
start: push ds
sub ax,ax
push ax
mov ax,data
mov ds,ax
s1: mov cx,10
call fenlei
mov ax,1
ret
main endp
fenlei proc near
mov si,0
s2: mov ax,score[si]
mov bx,10
div bl
mov bl,al
sub bx,6
sal bx,1
inc S6[bx];S6为S6,S7,S8,S9,S10的首地址
add si,2;根据((socre)/10-6)*2决定该成绩送给哪一个单元
loop s2
ret
fenlei endp
code ends
end start
第五题:
data segment
x db '123456'
y db 0
data ends
code segment
main proc far
assume cs:code,ds:data
start: push ds
sub ax,ax
push ax
mov ax,data
mov ds,ax
mov ax,2
IF (y-x) gt 5
rept 10
add ax,ax
endm
endif
mov bx,1
ret
main endp
code ends
end start
第六题:
datarea segment
M dw 0
datarea ends
;------------------------------
program segment
main proc far
assume cs:program,ds:datarea
start:
push ds
sub ax,ax
push ax
mov ax,datarea
mov ds,ax
;get interrupt vector
mov al,1ch
mov ah,35h
int 21h
push es
push bx
;set interrupt vector
push ds
mov ax,seg count
mov ds,ax
mov dx,offset count
mov al,1ch
mov ah,25h
int 21h
pop ds
;--------------------------
int 1ch
int 1ch
int 1ch
int 1ch
;in al,21h
;and al
;out 21h,al
;sti
;------------------------
;mov di,1000
;delay:
;dec di
;jnz delay
;reset interrupt vector
pop dx
pop ds
mov al,1ch
mov ah,25h
int 21h
ret
main endp
count proc near
sti
inc M
iret
count endp
program ends
end start
第七题:
data segment
score db 7,5,9,1,3,6,8,0,2,4
buffer db 10 dup(1)
data ends
code segment
main proc far
assume cs:code,ds:data
start: push ds
sub ax,ax
push ax
mov ax,data
mov ds,ax
mov si,0
mov cx,10
lea bx,score
input: mov ah,1
int 21h
cmp al,0dh
jz exit
sub al,30h
jb input
cmp al,09h
ja input
xlat;[(bx)+(al)]->al
mov buffer[si],al
inc si
loop input
exit: mov ax,ax
ret
main endp
code ends
end start