姓名:XXX
学号:XXXXXX
指导教师:XXX
实验一 Debug命令及汇编指令和寻址的应用
一、实验内容
1、设堆栈段指针SP=1000H,AX=4000H,BX=8000H;请编写一段程序将 AX 和BX的内容进行交换。要求:用3种不同的方法实现。
(1)、用记事本编辑程序,保存文件,命名为11.asm(注:文件后缀为asm)
(2)、在dos系统环境下用命令masm 11.asm 汇编文件,生成11.obj文件。
(3)、命令link 11.obj 链接文件,生成11.exe文件
(4)、用命令debug 进入debug调试环境,用命令n 11.exe;l;u 进行反汇编,后用g命令运行。
(5)、运行结果:
三种方法运行结果分别如下:
(6)三种方法的源程序:
方法一:
DATA SEGMENT
BUF DB ?
DATA ENDS
STACK SEGMENT STACK
DB 10 DUP(0)
STACK ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,SS:STACK
START:MOV AX,4000H
MOV BX,8000H
MOV CX,AX
MOV AX,BX
MOV BX,CX
CODE ENDS
END START
方法二:
DATA SEGMENT
BUF DB ?
DATA ENDS
STACK SEGMENT STACK
DB 10 DUP(0)
STACK ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,SS:STACK
START:MOV AX,4000H
MOV BX,8000H
XCHG AX,BX
CODE ENDS
END START
方法三:
DATA SEGMENT
BUF DB ?
DATA ENDS
STACK SEGMENT STACK
DB 10 DUP(0)
STACK ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,SS:STACK
START:MOV AX,4000H
MOV BX,8000H
PUSH AX
PUSH BX
POP AX
POP BX
CODE ENDS
END START
2、分别执行以下指令,比较寄存器寻址,寄存器间接寻址和相对寄存器寻址 间的区别。
MOV BX,1000H
MOV AX,BX
MOV AX,[BX]
MOV AX,20[BX]
要求:在执行以上指令时,记下当时DS数据段的值,记下每条指令执行后的AX的结果。将以上指令的"BX"修改为DX执行指令,观察结果及结果产生的原因。
(1)、打开debug,在debug环境中a命令开始编写程序,编写完成后用g命令运行。
(2)、实验程序和结果:
DS数据段的值为13D8H,MOV AX,BX 执行后AX的值为1000H,MOV AX,[BX] 执行后AX的值为3325H,MOV AX,20[BX] 执行后AX的值为14ABH。第一条指令是将1000H送入BX寄存器中,指令二是将BX中的值送入AX中,指令三是将存储器中地址为13D8H:1000H字单元内的值送入AX中,指令四是将存储器地址为13D8H:1020H字单元的值送入AX中。
3、、已知有如下程序段:
MOV AX,3421H
MOV CL,4
在以上程序段的基础上,分别执行以下指令:
ROL AX,CL
ROR AX,CL
SHL AX,CL
SHR AX,CL
SAR AX,CL
RCL AX,CL
RCR AX,CL
试在DEBUG下用A命令汇编以上程序段,用T命令跟踪,观察以下内容:
(1) 每条指令执行完后,AX寄存器的内容是什么?
(2) 每条指令执行完成后,进位、符号和零标志位的值有什么变化?
运行结果:
ROL AX,CL AX=4213H,CF=1,SF=0,ZF=0;
ROR AX,CL AX=1342H,CF=0,SF=0,ZF=0;
SHL AX,CL AX=3420H,CF=1,SF=0,ZF=0;
SHR AX,CL AX=0342H,CF=0,SF=0,ZF=0;
SAR AX,CL AX=0342H,CF=0,SF=0,ZF=0;
RCL AX,CL AX=4213H,CF=1,SF=0,ZF=0;
RCR AX,CL AX=3342H,CF=0,SF=0,ZF=0;
4、设有以下部分程序段:
TABLE DW 10H,20H,30H,40H,50H
ENTRY DW 4
.
.
.
LEA BX,TABLE
ADD BX,ENTRY
MOV AX,[BX]
要求: (1)将以上程序段补充成为一个完整的汇编程序。
(2)在(1)的基础上编辑、调试并运行程序,记录在执行MOV AX,[BX]后AX的内容。
步骤:
(1)、用记事本编辑程序,保存文件,命名为14.asm(注:文件后缀为asm)
(2)、在dos系统环境下用命令masm 14.asm 汇编文件,生成14.obj文件。
(3)、命令link 14.obj 链接文件,生成14.exe文件
(4)、用命令debug 进入debug调试环境,用命令n 14.exe;l;u 进行反汇编,后用g命令运行。
(5)、运行结果:ax=30h
(6)、实验源程序:
)DATA SEGMENT
TABLE DW 10H,20H,30H,40H,50H
ENTRY DW 4
BUF DB 20 DUP (?)
DATA ENDS
STACK SEGMENT STACK
DB 10 DUP(0)
STACK ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,SS:STACK
START:MOV AX,DATA
MOV DS,AX
LEA BX,TABLE
ADD BX,ENTRY
MOV AX,[BX]
MOV AH,4CH
INT 21H
CODE ENDS
END START
二、实验心得:
通过本次实验,熟练掌握了程序上机过程,熟悉了程序的汇编、链接、调试的步骤,掌握了Debug常用命令的功能及命令格式。在编写程序的过程中,拼写错误是最常发生错误,这就要求我们必须要细心,同时还必须有耐心。
实验二 汇编语言程序的调试与运行
一、实验内容
1、 1、求单元内存中所定义的两个字节变量的连续内容之和。要求使用三种不同的方法实现,下边给出一种方法,请自己编写出另外两种方法的程序(提示:(1)用定义字的形式实现;(2)用直接寻址方法实现。
DATA SEGMENT
A DB 5CH,85H
B DB 43H,0ABH
DATA ENDS
STACK SEGMENT STACK
DB 10 DUP(0)
STACK ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,SS:STACK
START:MOV AX,DATA
MOV DS,AX
MOV SI,0
MOV AL,A[SI]
ADD AL,B[SI]
MOV A[SI], AL
INC SI
MOV AL,A[SI]
ADC AL,B[SI]
MOV A[SI],AL
MOV AH,4CH
INT 21H
CODE ENDS
END START
步骤:
(1)、用记事本编辑程序,保存文件,命名为21.asm(注:文件后缀为asm)
(2)、在dos系统环境下用命令masm 21.asm 汇编文件,生成21.obj文件。
(3)、命令link 21.obj 链接文件,生成21.exe文件
(4)、用命令debug 进入debug调试环境,用命令n 21.exe;l;u 进行反汇编,后用g命令运行。
(5)、源程序:
方法二:
data segment
a dw 855ch
b dw 0ab43h
data ends
stack segment stack
db 100 dup(0)
stack ends
code segment
assume ds:data,cs:stack,cs:code
start: mov ax,data
mov ds,ax
mov ax,b
add a,ax
mov ah,4ch
int 21h
code ends
end start
方法三:
data segment
a db 5ch,85h
b db 43h,0abh
data ends
stack segment stack
db 100 dup(0)
stack ends
code segment
assume ds:data,cs:stack,cs:code
start: mov ax,data
mov ds,ax
mov al,b
add a,al
mov al,b+1
adc a+1,al
mov ah,4ch
int 21h
code ends
end start
3、拆字程序:把偏移地址为1000H中的字内容拆开,并将高字节内容送入4001H单元,将低字节内容送到4002H单元。
步骤:
(1)、用记事本编辑程序,保存文件,命名为23.asm(注:文件后缀为asm)
(2)、在dos系统环境下用命令masm 23.asm 汇编文件,生成23.obj文件。
(3)、命令link 23.obj 链接文件,生成23.exe文件
(4)、用命令debug 进入debug调试环境,用命令n 23.exe;l;u 进行反汇编,后用g命令运行,用d命令查询结果
(5)、实验结果:
(6)、源程序:
data segment
org 1000h
dw 1234h
org 4001h
dw ?
data ends
stack segment stack
db 100 dup(0)
stack ends
code segment
assume ds:data,cs:stack,cs:code
start: mov ax,data
mov ds,ax
mov bx,1000h
mov ax,[bx]
mov bx,4001h
mov [bx],ah
mov [bx+1],al
mov ah,4ch
int 21h
code ends
end start
二、实验心得:
经过实验了解了顺序程序设计的基本方法,进一步明白了各类指令的应用方法。当然还发现对汇编语言命对状态标志位的影响更明确,也明确了字单元的数据在内存中时是高位高字节,低位低字节。
实验三 分支结构程序设计
一、实验内容
1、编写程序,实现将大写字母字符串转换成小写字符串。
设:字符串的首地址为STRING,字符串的长度在LEN单元内。数据段定义如下:
DATA SEGMENT
STRING DB ‘I am a student’
LEN EQU $-STRING
DATA ENDS
步骤:
(1)、用记事本编辑程序,保存文件,命名为31.asm(注:文件后缀为asm)
(2)、在dos系统环境下用命令masm 31.asm 汇编文件,生成31.obj文件。
(3)、命令link 31.obj 链接文件,生成31.exe文件
(4)、直接输入 31.exe 回车执行程序
(5)、实验结果:
(6)、源程序
data segment
string db 'I am a student'
len equ $-string
db '$'
data ends
stack segment stack
db 100 dup(0)
stack ends
code segment
assume ds:data,cs:stack,cs:code
start: mov ax,data
mov ds,ax
mov bx,offset string
mov cx,len
next: mov al,[bx]
cmp al,'A'
jb next1
cmp al,'Z'
ja next1
add al,20h
mov [bx],al
next1: inc bx
loop next
show: mov ah,9
lea dx,string
int 21h
mov ah,4ch
int 21h
code ends
end start
2、从键盘输入一个字符,判断该字符时小写字母、大写字母、数字或其他字符,并给出相应的提示。
步骤:
(1)、用记事本编辑程序,保存文件,命名为33.asm(注:文件后缀为asm)
(2)、在dos系统环境下用命令masm 33.asm 汇编文件,生成33.obj文件。
(3)、命令link 33.obj 链接文件,生成33.exe文件
(4)、直接输入 33.exe 回车执行程序
(5)、实验结果:
(6)、源程序
data segment
ms db 'please input any key from the keyboard!',0dh,0ah,'$'
ms1 db 'this is 0 to 9!',0dh,0ah,'$'
ms2 db 'this is A to Z!',0dh,0ah,'$'
ms3 db 'this is a to z!',0dh,0ah,'$'
ms4 db 'this is others!',0dh,0ah,'$'
data ends
stack segment stack
db 100 dup(0)
stack ends
code segment
assume ds:data,cs:stack,cs:code
start: mov ax,data
mov ds,ax
lea dx,ms
mov ah,9
int 21h
mov ah,1
int 21h
cmp al,0dh
jz exit
cmp al,'0'
jb show4
cmp al,'9'
ja next
mov dx,offset ms1
jmp show
next: cmp al,'A'
jb show4
cmp al,'Z'
ja next1
mov dx,offset ms2
jmp show
next1: cmp al,'a'
jb show4
cmp al,'z'
ja show4
mov dx,offset ms3
jmp show
show4: mov dx,offset ms4
show: mov ah,9
int 21h
jmp start
exit: mov ah,4ch
int 21h
code ends
end start
二、实验心得
通过这次实验,了解了分支结构程序的设计方法,掌握了分支结构相关指令的用法。但也发现存在的问题,在第三题中对字符分类时,将输入字符的ASCII码与其它字符比较时费了好大劲去查各个字符的ASCII码,最后发现完全不用那么麻烦,直接把两个字符进行比较就行了,这也是由于知识点掌握不全面所致,以后会加强。
实验四 循环程序设计
一、实验内容
1、 在数据段变量名为A的数据区内有10个字符,编程实现将这10个字符以相反次序传送到附加段变量名为B的内存区中。
步骤:
(1)、用记事本编辑程序,保存文件,命名为41.asm(注:文件后缀为asm)
(2)、在dos系统环境下用命令masm 41.asm 汇编文件,生成41.obj文件。
(3)、命令link 41.obj 链接文件,生成41.exe文件
(4)、用命令debug 进入debug调试环境,用命令n 41.exe;l;u 进行反汇编,后用g命令运行,用d命令查询结果
(5)、实验结果:
(6)、源程序
data segment
a db '1234567890'
n equ $-a
b db n dup(?)
data ends
stack segment stack
db 100 dup(0)
stack ends
code segment
assume ds:data,cs:code
start:mov ax,data
mov ds,ax
lea si,a
lea di,b
add di,n-1
mov cx,n
move: mov al,[si]
mov [di],al
inc si
dec di
loop move
mov ah,4ch
int 21h
code ends
end start
2、 数据段开始区域中,连续存放着10个无符号数,编写程序找出这10个数中最大的一个数,并将其存放到该数据区的后边。
步骤:
(1)、用记事本编辑程序,保存文件,命名为43.asm(注:文件后缀为asm)
(2)、在dos系统环境下用命令masm 43.asm 汇编文件,生成43.obj文件。
(3)、命令link 43.obj 链接文件,生成43.exe文件
(4)、用命令debug 进入debug调试环境,用命令n 43.exe;l;u 进行反汇编,后用g命令运行,用d命令查询结果
(5)、实验结果:
(6)、源程序
data segment
num db 10,20,105,0,122,45,67,23,99,100
max db ?
data ends
stack segment stack
db 100 dup(0)
stack ends
code segment
assume ds:data,cs:code
start:mov ax,data
mov ds,ax
lea si,num
mov al,num
mov cx,10
next1: cmp al,[si]
ja next
mov al,[si]
next: inc si
loop next1
mov max,al
mov ah,4ch
int 21h
code ends
end start
二、实验心得
本次实验内容是熟悉循环结构程序的编写,明白循环结构相关指令的应用,循环语句很简单,很容易完成,但在程序中要特别注意的是程序的循环次数。但是要灵活应用循环语句,自己还有很长的路要走。
实验六 DOS中断功能调用程序设计
一、实验内容
1、编程实现由键盘输入任意一个字符,将该字符的ASCII码值显示在屏幕上
步骤:
(1)、用记事本编辑程序,保存文件,命名为61.asm(注:文件后缀为asm)
(2)、在dos系统环境下用命令masm 61.asm 汇编文件,生成61.obj文件。
(3)、命令link 61.obj 链接文件,生成61.exe文件
(4)、直接输入61.exe 回车执行程序
(5)、实验结果:
(6)、源程序
stack segment stack
db 100 dup(0)
stack ends
code segment
assume cs:code
start:mov ah,1
int 21h
mov cx,8
next: shl al,1
jc show1
mov dl,'0'
jmp show
show1:mov dl,'1'
show: push ax;
mov ah,2
int 21h
pop ax
loop next
mov dl,'B'
mov ah,2
int 21h
mov ah,4ch
int 21h
code ends
end start
2、编写一程序,实现从键盘输入一个字符,判断其是不是一个数字,如果是则请输出这个数字,如果不是,请输出 “这不是一个数字” 的英文信息
步骤:
(1)、用记事本编辑程序,保存文件,命名为62.asm(注:文件后缀为asm)
(2)、在dos系统环境下用命令masm 62.asm 汇编文件,生成62.obj文件。
(3)、命令link 62.obj 链接文件,生成62.exe文件
(4)、直接输入62.exe 回车执行程序
(5)、实验结果:
(6)、源程序
data segment
ms db 'this is not a number 0-9',0dh,0ah,'$'
data ends
stack segment stack
db 100 dup(0)
stack ends
code segment
assume ds:data,cs:code
start:mov ax,data
mov ds,ax
next: mov ah,1
int 21h
cmp al,0dh
jz exit
cmp al,'0'
jb showms
cmp al,'9'
ja showms
mov dl,al
mov ah,2
int 21h
jmp next
showms:mov dx,offset ms
mov ah,9
int 21h
jmp next
exit: mov ah,4ch
int 21h
code ends
end start
3、从键盘键入10个字符,然后以与键入相反的顺序输出
步骤:
(1)、用记事本编辑程序,保存文件,命名为62.asm(注:文件后缀为asm)
(2)、在dos系统环境下用命令masm 62.asm 汇编文件,生成62.obj文件。
(3)、命令link 62.obj 链接文件,生成62.exe文件
(4)、直接输入62.exe 回车执行程序
(5)、实验结果:
(6)、源程序
data segment
info1 db 0dh,0ah,'input string:$'
info2 db 0dh,0ah,'output string:$'
str db 20 dup(?),'$'
data ends
stack segment stack
db 100 dup(0)
stack ends
code segment
assume ds:data,cs:code
start:mov ax,data
mov ds,ax
mov cx,10
mov dx,offset info1
mov ah,9
int 21h
mov si,0
mov di,19
next: mov ah,1
int 21h
mov str[si],al
mov str[di],al
inc si
dec di
loop next
mov dx,offset info2
mov ah,9
int 21h
mov dx,offset str
add dx,10
mov ah,9
int 21h
mov ah,4ch
int 21h
code ends
end start
二、实验心得
在本次实验中发现对自己对DOS中断功能调用很不熟悉,对各个功能调用入口和出口参数没记清楚,导致了很多错误。在排除这些错误之后发现调用9号功能输出要求字符串后还会跟随很多乱码,最后经过看书才知道9号功能要输出的字符串后必须以“$”结尾。而且编写的程序输入字符时输入一个就结束了,最后经反复改进才可以多次输入。
实验八 存储器扩展实验
一、实验内容
1、使用一片61C256(32K),作为片外扩展的数据存储器,按图8.1流程编写一程序,实现对其进行读、写验证操作。
说明:试验箱已配有一片作为实验程序空间,地址从0000:0000H~7FFFH
2、硬件连接线路图
3、步骤:
(1)、用记事本编辑程序,保存文件,命名为8.asm(注:文件后缀为asm)
(2)、在dos系统环境下用命令masm 8.asm 汇编文件,生成8.obj文件。
(3)、命令link 8.obj 链接文件,生成8.exe文件
(4)、按照原理图连接电路
(5)、把8.exe文件装载到试验箱内存
(6)、运行程序后,刷新8000h后的存贮单元,应为程序中所置的测试数据
(7)、源程序
code segment
org 1000h
assume cs:code
start: mov al, 12h
mov cx,1000h
mov bx,8000h
next: mov [bx],al
inc bx
loop next
mov ah,4ch
int 21h
code ends
end start
二、实验心得:
本次完成的存储器扩展实验重点在于扩展电路的连接,但本实验只需进行一片存储器扩展,比较简单,而且测试程序也十分简单,只是实验系统很不稳定,容易出现故障,即使一切操作都正确,也得经反复多次尝试才能成功。
微机原理与接口技术实验指导书班级学号099074姓名安徽工业大学计算机学院实验一存贮器读写实验一实验内容对指定地址区间的RAM40…
实验题目8253定时计数器实验一实验目的与要求1学会8253芯片和微机接口原理和方法2掌握8253定时器计数器的工作方式和编程原理…
微机原理实验报告实验一两个多位十进制数相加的实验一实验目的学习数据传送和算术运算指令的用法熟悉在PC机上建立汇编链接调试和运行汇编…
微机原理及接口技术实验报告20xx20xx学年第一学期班级姓名学号指导教师实验一Emu8086软件的使用一实验目的1熟悉汇编语言开…
大连理工大学本科实验报告课程名称计算机原理课程设计学院系电气工程学院专业电气工程及其自动化班级学号学生姓名20xx年12月30日大…
1程序DATASEGMENTXDW7A8FHDATAENDSCODESEGMENTMAINPROCFARASSUMECSCODED…
SDU微机原理与接口技术实验报告梁聚仁20xx00120xx0微机原理与接口技术实验报告实验一上机练习实验目的1掌握用编辑软件编辑…
计算机在金属材料中的应用实验山东科技大学材料学院目录一调试程序DEBUG二熟悉80486指令系统三熟悉汇编语言汇编程序上机过程四汇…
洛阳理工学院实验报告12345洛阳理工学院实验报告678洛阳理工学院实验报告9101112洛阳理工学院实验报告1314洛阳理工学院…
大连理工大学本科实验报告课程名称计算机原理课程设计学院系电气工程学院专业电气工程及其自动化班级学号学生姓名20xx年12月30日大…
微机原理与应用课程实验报告实验分工报告人同组人实验时间20xx1210课程设计一题目要求1在数据段首址为0100H开始的内存区1按…