8086实验1 设备使用及简单示例程序验证
一.实验目的
1 熟悉软件编程环境和硬件设备资源
2 熟悉工程创建的步骤,其中各个文件作用
3 掌握软件菜单的使用,掌握程序的调试基本步骤。 二.实验内容
以课本例4-1为源文件创建工程
进行工程的调试,查看程序运行过程和结果 三.实验仪器
微机、WAVE6000编程环境,实验箱 注意:
文件不要用中文名称,保存时不要用中文路径(目录),不要放在“桌面”上,源文件和工程要放在同一个文件夹下,文件名称和路径名称不要太长。 调试过程:
2 查看存储器菜单使用:窗口---数据窗口---MEMORY,观察或者修改MEMORY内容。 3 查看CPU寄存器:窗口---CPU窗口,CPU寄存器
4 单步执行:执行---单步执行(F8),每执行一步,查看每条语句涉及到的寄存器和存储器内容的变化结果,是否是指令所要得到的结果,如不是,检查错误原因,修改。
ASSUME CS:CSEG , DS:DSEG , ES:ESEG
SUM DW 2 DUP(?) DUP (duplicate) 含义如下: 定义变量(数组)SUM,类型为字(DW),大小为2,内容不定(?)
编译器设置:编译器将用户定义的数据段分配在0400H(0040H×16)开始的存储器中。数据段段基址寄存器DS(0040H)。 查看数据的方法:
窗口---数据窗口--- MEMORY ---0400的位置就是你定义的数据段的数据:
物理地址=段基址(DS)×16+段内偏移
参考程序及流程图: 见课本例4-1
8086实验2 简单程序设计--存储块移动
一.实验目的
1 熟悉86汇编语言程序结构
2 熟悉循环结构程序的编写,进一步熟悉指令系统寻址方式 3 熟悉编程环境和程序的调试 二.实验内容
将指定源地址和长度(100字节)的存储块移动到目的地址。 三.实验仪器:微机、WAVE6000软件,实验箱
注意:1 源数据块和目的数据块自己在数据段中定义。
2 要查看移动后结果,定义时对源和目的块赋不同的值 S db 25 dup(11h) 含义? dup (duplicate) 定义数组S,大小为25,类型为字节(DB),全部赋值为11h
3 同实验一,数据段分配在0400H开始的存储器中 流程图如右: 两种移动的方式:
1利用循环结构编程移动方式
2利用重复指令(movsb)编程方式
参考程序
利用重复指令(movsb)编程方式 移动 256 字节 data segment
Source db 256 dup(055h) Target db 256 dup(0aah) data ends
code segment
assume cs:code, ds:data, es:data start:
mov ax, data mov ds, ax mov es, ax
mov si, offset Source mov di, offset Target mov cx, 256 rep movsb jmp $ code ends
end start
8086实验3 存储块清零
data segment
Block db 256 dup(55h) data ends
code segment
assume cs:code, ds:data
start proc near
mov ax, data mov ds, ax
mov bx, offset Block ; 起始地址 mov cx, 256 ; 清 256 字节 Again:
mov [bx], byte ptr 0 inc bx
Loop Again ; 记数减一
jmp $
code ends
end start
8086实验4 二进制到BCD码转换
自己定义存放结果的数据空间(段) 百位 十位 个位 参考程序和框图如下:
; 将 AX 拆为三个 BCD 码, 并存入 Result 开始的叁个单元 参考程序如下: data segment
Result db 3 dup(?) 定义长度为3个字节的Result 内容待定 data ends
code segment
assume cs:code, ds:data start:
mov ax, data
mov ds, ax ; 初始化DS
mov ax, 123 mov cl, 100 div cl
mov Result, al ; 除以 100, 得百位数
mov al, ah mov ah, 0 mov cl, 10 div cl
mov Result+1, al ; 余数除以 10, 得十位数 mov Result+2, ah ; 余数为个位数
jmp $
code ends end start
8086实验5 数据排序
一.实验目的
1 了解数据排序的常用算法,掌握冒泡算法。 2 进一步熟悉86编程环境和调试方法。
3 熟悉汇编程序设计,指令系统,伪指令的使用。 二.实验内容
给出一组随机数(10个,类型:字节),将此组数据数按从小到大(升序)排列(采用冒泡算法)。
三.实验仪器 微机、WAVE6000编程环境
注意:在数据段中自定义一组随机数,对自定义的数据排序。 如自定义: ARRAY DB 6,2,4,9,3,7,1,5,8,0 冒泡算法(两层循环,以下是内层循环开始……)。 6,2,9,4,3,7,1,5,8,0
前大后小交换位置如下: 2,6,9,4,3,7,1,5,8,0 前小后大不交换位置如下; 2,6,9,4,3,7,1,5,8,0 前大后小交换位置
2,6,4,9,3,7,1,5,8,0 ……
第一次内层循环结束顺序如下:最大的数9先冒出来
2,6,4,3,7,1,5,8,0,9 接着开始第二次内层循环……
参考程序:
Len equ 10 data segment
Array db 5,2,1,0,2,3,8,6,5,9 Change db 0 data ends code segment
assume cs:code, ds:data start proc near
mov ax, data mov ds, ax Sort:
mov bx, offset Array mov cx, Len-1 mov Change, 0 Goon:
mov al, byte ptr [bx] inc bx
cmp al, byte ptr [bx]
jng Next ; 前小后大, 不交换 mov Change, 1 ; 前大后小, 置交换标志 mov ah, [bx]
mov [bx] ,al ; 交换 mov [bx-1], ah Next:
loop Goon
cmp Change, 0 jne Sort jmp $ code ends end start