实验指导
一.上机实验的一般步骤和要求:
1.上机前对选定的实验题应有所了解,并写好程序。
2.上机过程中对重要方法和步骤、问题和结果应有记录。
3.所有程序原则上都要通过调试手段运行。
4.实验后进行分析和总结,给出实验报告。
二.实验报告的内容一般有:
1.实验题的内容及要求。
2.思路和方法、算法描述及有注释和说明的程序清单。
3.程序调试和运行的重要步骤、问题和结果。
4.分析和总结。
三.实验环境的建立
参看第二章第一节。通常在WINDOWS XP系统下。如果其他操作系统(如WIN 7),不支持汇编程序工作,可安装Masm for Windows集成实验环境asm20125(支持Win2000、WinXP、WinVISTA、WIN7等操作系统)。www.jiaminsoft/
实验1 上机过程及程序调试
实验目的:
1.通过第二章两个简单实例认识汇编语言程序,初步了解程序格式;段定义;标号;
DOS系统功能;操作数;指令;说明语句等作用。
2.掌握汇编语言程序从设计到形成可执行程序文件的方法和步骤。即编辑、汇编、连
接。了解汇编语言的系统工作文件和工作环境。理解汇编程序和连接程序的作用。理解
列表文件内容。
3.初步了解程序的运行和调试方法。学会使用DEBUG主要命令和常用的DOS命令。
实验内容:
【1】编辑第二章两个简单实例,通过汇编、连接。
【2】用DEBUG对hello程序进行调试。
问题:
(1) 该程序在内存中的起始地址是多少?结束地址是多少?共占几个字节?
(2) 0B63:0008表示什么意思?
(3) 程序中定义的串‘HELLO, WORLD !$’在内存中的起始地址是多少?请用DEBUG命
令显示该串。
(4) 如果用带有断点的G命令运行该程序,写出命令。
(5) 用P命令单步执行程序。
(6) 用T命令跟踪程序,在跟踪执行INT 21时出现什么问题?
(7) 用A命令在偏移地址100H处建立该段程序,并运行。
(8) 用W命令把该段程序写成文件,再调入。
实验2 算术及位串处理程序
实验目的:
掌握多数位的算术运算、移位操作、字符串操作等程序的设计,学习使用分支与循环等
基本编程方法,熟练使用DEBUG。
实验内容:
【1】在数据段预先存放16个十六进制数的ASCII码,首地址为ASC。从键盘输入一位十六进制数到BX,用ASC[BX]寻址方式到对应数位的ASCII码,并取出显示。
【指导提示】
(1) 16个十六进制数的ASCII码的定义:
ASC DB 30H,31H,32H,33H,34,35H,36H,37H,38H,39H
DB 41H,42H,43H,44H,45H,46H
(2) 把从键盘输入的一位十六进制数(例如大写的D减37H),得到序号13,用该值去定位ASC表,即用ASC[BX]寻址可得到D的ASCII码44H,取出显示。
【2】用16位指令编制程序,处理32位的加减乘除算术四则运算题。
要求:
(1) 所有变量均定义成字类型,其中应有负数。部分变量也可以使用寄存器,在DEBUG
下临时给出。程序必须在DEBUG下执行,以便验证结果。
(2) 跟踪程序,记录每条指令执行后的ZF,SF,CF,OF标志。回答每条指令执行后ZF,
SF,CF,OF标志设置的理由。
【指导提示】
(1) X DW -6 ;定义16位的负数,在DEBUG下注意观察其值,用R命令设置某寄存器
值。
【3】用字符串处理指令编制程序,处理字符串的比较和查,显示结果。
要求:
(1) 字符串的比较程序中,一个字符串在数据段定义,另一个字符串在程序执行时从键
盘输入,必须定义键盘缓冲区。并指出不相等的位置。
(2) 在字符串中查某个字符,字符串在数据段定义,要查的字符在程序执行时从键
盘输入。并指出到的位置。
【指导提示】
data segment
mess1 DB 9,?,9 DUP(?);定义键盘缓冲区
data ends
ext segment
mess2 db ‘computer software $’
ext ends
code segment
assume cs:code,ds:data,es:ext
start:
mov ax, data
mov ds, ax
mov ax, ext
mov es, ax
lea dx, mess1 ;输入串到键盘缓冲区
mov ah,10
int 21h
mov cx, mess+1 ;实际输入字符的个数
lea si, mess1+2 ;输入串的实际首地址
lea di, mess2
cld
repe cmpsb
。。。。。。
【4】 AL字节内容反向排序。
【指导提示】循环移位指令即可。
实验3 分支程序设计
实验目的:
掌握分支与循环程序等基本编程方法。熟悉数制转换。用LOOP指令、条件转移指令和向量地址法实现程序转移。
实验内容:
【1】把BX寄存器中的二进制数用十六进制数格式显示输出。在DEBUG下设置BX寄存器的值。十六进制数用大写表示。
【指导提示】参看例6.4
【2】分离字数组ARRAY中的正、负数,把其中的正数复制到PDATA数组;负数复制到NDATA数组,并分别统计正、负数个数。
【指导提示】
data segment
array dw 2,-2,3,-3,4,5,0 ;定义3个等长的数组
org 10h
pdata dw 7 dup (?)
org 20h
ndata dw 7 dup (?)
org 30h
p db 0 ;2个变量统计正负数个数
n db 0
data ends
code segment
assume cs:code,ds:data
start:
mov ax,data
mov ds,ax
lea bx,array
lea si,pdata
lea di,ndata
mov cx,7
kk:
mov ax,[bx]
test ax,8000h ;测试正负数
jz zs ;转正数处理
。。。。。。
jmp next
zs:
。。。。。。
next:
add bx,2
loop kk
mov dl,p ;显示正数个数
add dl,30h
mov ah,2
int 21h
mov dl,n
add dl,30h
mov ah,2
int 21h
mov ah,4ch
int 21h
code ends
end start
【3】在数据段定义分支地址表,通过键盘输入数字1~8,实现转移。
要求:
(1) 分支表定义如下:
PTABLE DW P1,P2,P3,P4,P5,P6,P7,P8
(2) P1~P8为标号,如果键盘输入数字3,则从分支地址表PTABLE中取出P3的地址,实现间接转移,标号处的指令只是显示一个信息。汇编table指令什么意思
【指导提示】参看例6.3
实验4 循环程序设计
实验目的:
1.掌握和提高循环程序编程技巧,熟悉键盘输入、显示输出等基本人机交互。
2.利用循环程序延时,测算机器的速度。
实验内容:
【1】从键盘输入一个单个字符,显示该字符的ASCII码(十六进制),回车键退出循环,终止程序。
【指导提示】参看例6.7
【2】从键盘输入7位二进制数,显示对应的字符,回车键退出循环,终止程序。
【指导提示】
code segment
assume cs:code
start:
mov cx,7
mov dl,0
next:
shl dl,1
mov ah,1
int 21h
。
。。。。。
loop next
mov ah,2
int 21h
mov ah,4ch
int 21h
code ends
end start
【3】如果MOV指令占1个时钟周期,INC reg16指令占1个时钟周期,J XX指令占1个
时钟周期,LOOP指令占5个时钟周期。利用上面的指令,设计一个二重循环程序(目的是为
了扩大延时),执行程序,计算出每秒指令条数,评估该台机器的速度。
例如:
;这里是显示程序运行的开始时间
mov di, 100
p2: mov cx, 10000
p1: inc ax
loop p1
dec di
jnz p2
;这里是显示程序运行的结束时间
要求:
(1) 二重循环的计数初值在DEBUG下给出。
(2 程序运行的开始时间和结束时间由DOS功能调用INT 21H(AH=2CH)测出。
【指导提示】
用(AH=2CH)INT 21H 取系统时间看循环耗时,参附录4说明。在DEBUG下运行程序,通过直接看时间,不需用程序显示时间。
mov ah,2ch ;取系统时间
int 21h
mov si, dx ;dx中的系统时间转送si
mov di, 100
p2: mov cx, 10000
p1: inc ax
loop p1
dec di
jnz p2
mov ah,2ch ;取系统时间
int 21h
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论