实验一 汇编语言上机环境
实验目的
熟悉汇编语言上机环境
掌握汇编语言上机过程与步骤
实验器材与实验准备
实验器材:
硬件:微机一台
软件:DOS或WIN98/2000/XP
MASM . EXE和LINK . EXE
实验准备:
cs1 segment
assume cs : cs1 , ds : cs1
start: push cs
pop ds
mov ah,0
int 10h
lea dx , str0
mov ah,9
int 21h
mov ah,4ch
int 21h
str0 db 'hello' , '$'
cs1 ends
end start
实验内容和要求
建立汇编源程序文件
逐步汇编,连接生成可执行文件
运行生成的可执行文件
实验步骤:
在记事本中编辑原文件
将MASM . EXE和LINK . EXE以及原文件拷贝在同一目录下
汇编原文件
连接目标文件
执行可执行文件
实验结果分析
在生成可执行文件过程中,一共生成了多少个相关的文件,它们的作用分别是什么?
实验二 DEBUG 的使用
(一)实验目的
1、熟悉 DEBUG 程序中的命令,学会在 DEBUG 下调试运行汇编语言源程
序。
2、掌握 8086/8088 的寻址方式及多字节数据的处理方法。
(二)实验设备
硬件环境:IBM-PC 及其兼容机
软件环境:操作系统 DOS3.0 版本以上
调试程序 DEBUG .COM
(三)实验内容和要求
实验内容:
1、利用 DEBUG 程序中的“E”命令,将两个多字节数“003F1AE7H”和
“006BE5C4H”分别送入起始地址为 DS:0200H 和 DS:0204H 两个单元中。
2 、分 别用 直接寻址方 式和寄存器 间接寻址方 式编写程序 段,实现将 DS:0200H 单元和 DS:0204H 单元中的数据相加,并将运算结果存放在 DS:0208H 单元中。
实验要求:
本次实验的内容均在 DEBUG 下完成,实现数据的装入、修改、显示;汇 编语言程序段的编辑、汇编和反汇编;程序的运行和结果检查。
(四)预习要求
1、复习 DOS 启动方式和 DOS 有关命令的使用;
2、阅读本书后的附录,熟悉掌握 DEBUG 调试程序中的 A、D、E、G、Q、
R、T、U 命令的书写格式及功能;
3、复习寻址方式和相关的数据传送指令及算术运算指令。
(五)实验步骤
1、启动 DOS 操作系统
2、运行 DEBUG.COM 程序(若当前盘为 C)
C>DEBUG↙
– ;“( –”为 DEBUG 提示符,仅当屏幕出现该提示符后,才可输入 DEBUG命令
3、用“A”命令编辑和汇编源程序
–A ↙
186E:0100 MOV AX,[0200]
186E:0103 MOV BX,[0202]
186E:0107 ADD AX,[0204]
186E:010B ADC BX,[0206]
186E:010F MOV [0208],AX↙
186E:0112 MOV [020A],BX↙
186E:0116↙
4、用“U”命令反汇编验证源程序
–U CS:0100↙
186E:0100 A10002 MOV AX,[0200]
186E:0103 8B1E0202 MOV BX,[0202]
186E:0107 03060402 ADD AX,[0204]
186E:010B 131E0602 ADC BX,[0206]
186E:010F A30802 MOV [0208],AX
186E:0112 891E0A02 MOV [020A],BX
186E:0116
注意:
检查源程序是否有错误,若有则返回到第 3 步用“A 地址”命令进 行修改,直到程序无错误。
DEBUG 约定在其命令或源程序中所涉及到的数据均被看作十六进 制数,其后不用“H”说明。
在 DEBUG 下,源程序中不能使用“标号”、“变量”和一些伪指令。
在 DEBUG 下,大小写不敏感。
5、程序未执行前,用“R”命令观察,相关寄存器的内容。
–R↙
如:(AX)= 0 ,(BX)= 0 ,(SI)= 0 ,
(DI)= 0 ,(CS)= 1680 ,(IP)= 0 。
6、在程序未执行前,用“D”命令观察 DS:0200H,DS:0204H、DS:0208H
单元的内容
–D 200 20B ↙
7、用“G”命令运行源程序
–G =110 0116 ↙
8、再用“D”命令观察 DS:0200H~DS:020BH 字节单元中的内容
–D 200 20B↙
9、用“T”单步操作命令对源程序单步执行,观察 AX、BX、CS、IP 寄存 器内容的变化,并与预计的结果相比较。
注意:
z D 命令显示内存数据,注意观察多字节数据在内存中的存放方式。
z 指令执行的时候,IP 寄存器随着变化,注意观察。
(六)实验结果分析
1、程序运行结果:(AX)= 00ab,h(BX)= 00abh
DS:0208H 四字节单元的内容: 00ab00abh
实验三 分支程序设计
(一)实验目的
1、掌握多路分支 IF…Else IF…Else 程序结构和设计方法。
2、学会使用地址表和转移表法写多路分支程序。
(二)实验设备
实验器材:
硬件:微机一台
软件:DOS或WIN98/2000/XP
MASM . EXE和LINK . EXE
(三)实验内容和要求
实验内容:
在内存 Score 缓冲区中存放有20 个学生的成绩数据,为无符号字节数。假 设学生成绩在[90,100]区间为优秀,在[80,90)区间为良好,在[70,80)区间为一 般,在[60,70)区间为及格,在[0,60)区间为不及格,要求统计出不及格,及格, 一般,良好和优秀的人数,分别送入 Notpassed,Passed,Good,Better 和 Best 字节单元。
用普通的跳转语句实现上述功能。
(四)预习要求
1、复习 DOS 启动方式和 DOS 有关命令的使用;
2、阅读本书后的附录,熟悉掌握 DEBUG 调试程序中的 A、D、E、G、Q、
R、T、U 命令的书写格式及功能;
(五)实验步骤
1.编写源程序
data segment
Score db 56,23,94,64,85,61,94,81,76,61,34,94,68,95,84,34,16,49,79,84
len equ $-Score
Notpassed db 0
Passed db 0
Good db 0
Better db 0
Best db 0
data ends
code segment
assume cs:code,ds:data
start: mov ax,data
mov ds,ax
mov cx,len
mov si,0
re: mov al,score[si]
cmp al,60
jae f1
inc notpassed
jmp next
f1: cmp al,70
jae f2
inc passed
jmp next
f2: cmp al,80
jae f3
inc good
jmp next
f3: cmp al,90
jae f4
inc better
jmp next
f4: inc best
en: inc si
loop re
mov ah,4ch
int 21h
code ends
end start
2.汇编源程序
3.连接目标程序
4.调试可执行程序,分析程序的运行结果
(六)实验结果分析
1、确认不及格,及格,一般,良好和优秀的人数总和是否为 20。
(七)编程提示
a) 用普通的跳转语句实现上述功能时,区分不及格,及格,一般,良好和 优秀 5 个区间,是一个 5 分支的结构,至少需要 4 条跳转指令。
b) 注意无符号数和有符号数使用跳转指令的区别。
c) 用地址表和转移表法实现时,必须找出分数与地址表和转移表的偏移的 对应关系。
实验四 循环程序设计
(一)实验目的
1、掌握多重循环程序的结构和设计方法。
2、弄清直接排序的算法。
3、弄清冒泡排序方法。
(二)实验设备
实验器材:
硬件:微机一台
软件:DOS或WIN98/2000/XP
MASM . EXE和LINK . EXE
(三)实验内容和要求
实验内容:
在内存 Score 缓冲区中存放有 20 个学生的成绩数据,为无符号字节数。 设计程序完成如下功能:
将最高和最低的分数分别存放在 MIN 和 MAX 单元中。
(四)预习要求
1、复习 DOS 启动方式和 DOS 有关命令的使用;
2、阅读本书后的附录,熟悉掌握 DEBUG 调试程序中的 A、D、E、G、Q、
R、T、U 命令的书写格式及功能;
(五)实验步骤
1.编写源程序
Data segment
Da dw 4546h,9414h,6445h,8745h,6136h,1264h,5555h
Num dw ($-da)/2 ;填空 (当前地址-da)/2
Max dw ?
Min dw ?
Data ends
Code segment
Assume cs:code ,ds:data
Start:mov ax,data
mov ds,ax
mov cx,num
mov ax,da
mov dx,da
mov si,0
re: cmp da[si],ax
jle skip1 ;如果小于等于就跳过
mov ax,da[si]
skip1: cmp da[si],dx
jge skip2 ;>=跳过
mov dx,da[si]
skip2: add si,2
loop re
mov max,ax
MOV MIN,DX
MOV AH,4CH
INT 21H
CODE ENDS
END START
2.汇编源程序
3.连接目标程序
4.调试可执行程序,分析程序的运行结果
(六)实验结果分析
1、循环次数NUM的定义有何特点
以符号定义,不占用内存空间
2、DEBUG调试分析是否得到正确结果
(七)编程提示
(a) 无符号数的比较是用ja,jc,je
实验五 子程序设计
(一)实验目的
1、掌握子程序的设计方法和调用方式
2、深刻认识堆栈在子程序设计中所起的作用
3、掌握子程序调试的技巧。
(二)实验设备
实验器材:
硬件:微机一台
软件:DOS或WIN98/2000/XP
MASM . EXE和LINK . EXE
(三)实验内容和要求
实验内容:
将数值1234和56H,用十进制将它们显示,要求用子程序的方式来实现显示功能.
(四)预习要求
1、复习 DOS 启动方式和 DOS 有关命令的使用;
2、阅读本书后的附录,熟悉掌握 DEBUG 调试程序中的 A、D、E、G、Q、
R、T、U 命令的书写格式及功能;
(五)实验步骤
1.编写源程序
;要求编写一个子程序,这个子程序能自动将 AX的数值以十进制的形式输出
CODE SEGMENT
ASSUME CS:CODE
START:
MOV AX,1234
CALL PRI
mov dl,10;换行
mov ah,2
int 21h
mov dl,13;回车
mov ah,2
int 21h
MOV AX,56H
CALL PRI
mov ah,4ch
int 21h
pri proc near
push bx
push cx
push dx
mov bx,10;十进制
mov dx,0;被除数的高16位
mov cx,0;位数
rediv: div bx ;dxax / bx
push dx;余数
mov dx,0
inc cx
cmp ax,0
jnz rediv
mov ah,2
reout: pop dx
add dl,30h;将数值位-〉字符 1-'1'
int 21h
loop reout
pop dx
pop cx
pop bx
ret
pri endp
code ends
end start
2.汇编源程序
3.连接目标程序
4.调试可执行程序,分析程序的运行结果
(六)实验结果分析
1、理解 寄存器参数传递方式各有什么特点
使用简单方便
数量少,难以传递多个数据
(七)编程提示
(a) 二进制显示也可采用移位并判断该位的方式进行。
(b) 十进制数采用除以 10 取商的方式。
(d) 注意去掉最高位的“0”。
实验六 中断程序设计
(一)实验目的
1、中断服务子程序的编写。
2、BIOS 和 DOS 中断调用。
(二)实验设备
硬件环境:IBM-PC 及其兼容机 软件环境:操作系统 DOS3.0 以上
编辑程序 EDIT 或其它编辑程序 汇编程序 MASM.EXE 6.1X 连接程序 LINK.EXE
调试程序 DEBUG.COM
(三)实验内容和要求
实验内容:
1.编写一个完成的程序,用于输入一个小写字母,输出大写字母。
要求:
分别用BIOS 和 DOS 中断调用来实现
实验准备
1、复习 DOS 启动方式和 DOS 有关命令的使用;
2、阅读本书后的附录,熟悉掌握 DEBUG 调试程序中的 A、D、E、G、Q、
R、T、U 命令的书写格式及功能;
3、分析BIOS 和 DOS 中断调用的功能和区别
(五)实验步骤
1.编写源程序
;DOS功能调用输入字符,如果是小写,就改成大写
code segment
assume cs:code
start:
MOV si,5
re:
mov ah,1
int 21h
push ax
mov dl,13;回车
mov ah,2
int 21h
mov dl,10;
mov ah,2
int 21h
pop ax
cmp al,'a'
jb skip
cmp al,'z'
JA SKIP
SUB AL,32
SKIP:
MOV AH,2
MOV DL,AL
INT 21H
mov dl,13;回车
mov ah,2
int 21h
mov dl,10;回车
mov ah,2
int 21h
sub si,1
jnz re
MOV AH,4CH
INT 21H
CODE ENDS
END START
;BIOS功能调用输入字符,如果是小写,就改成大写
code segment
assume cs:code
start:
MOV si,5
re:
mov ah,0
int 16H
push ax
mov Al,13;回车
mov ah,E
int 10h
mov Al,10;
int 10h
pop ax
cmp al,'a'
jb skip
cmp al,'z'
JA SKIP
SUB AL,32
SKIP:
MOV AH,0
INT 10H
mov Al,13;回车
mov ah,E
int 10h
mov Al,10;
int 10h
sub si,1
jnz re
MOV AH,4CH
INT 21H
CODE ENDS
END START
2.汇编源程序
3.连接目标程序
4.调试可执行程序,分析程序的运行结果
(六)实验结果分析
利用实验中源程序中的输出方法,分析BIOS 和 DOS 中断调用的功能和区别。
BIOS功能调用功能更为强大,但参数设置复杂
DOS功能调用实现相对简单,但功能不如BIOS强
DOS功能调用格式相对固定,根据AH值不同,使得在执行INT 21H指令时有不同功能
BIOS调用对不同的设备,int后所接参数都不一样,而且AH的值也决定其操作