【实验提要】 以下列举的10个实验,都是以intel的8086及后续系列微处理器的指令系统为核心,采用宏汇编工具masm6. x以及调试工具debug或debug32,针对本教材所述内容进行相关的上机实践。旨在帮助学生加深认识和理解理论教学知识,通过大量的上机实验熟悉8086 cpu的指令功能、用途和使用技巧,进而提高汇编语言程序设计的能力。
(带*号的为选作内容)
实验目的。通过实验掌握下列知识:
指令: mov,add,adc,sub,sbb,daa,xchg的功能;
2、debug命令: a,d,e,f,h,r,t,u的使用;
3、bcd码、ascii码及用十六进制数表示二进制码的方法;
4、寄存器: ax,bx,cx,dx,flags,ip。
内容及步骤。
注:本次实验可以参照教材上关于debug的叙述内容进行。
一、debug 命令使用。
1、开机后,切换到命令提示符窗口下,出现提示符后键入命令debug, 进入调试环境, 显示提示符 '-
2、用命令 f 200 220 'ab' 将'ab'的两个ascii码循环填入内存。
注:第一个参数200是当前段的起始偏移地址,第二个参数220是终了偏移地址,第三个参数‘ab’是被填入的数值,若不给出第二个参数则填入128(8行)个字节。
3、用命令 d200 观察内存中的十六进制码及屏幕右边的ascii字符。
4、用命令 f230 23f 12 重复上二项实验,观察结果并比较。
5、用命令 e200 41 42 43 44 45将a-e的ascii码写入地址为200开始的内存单元中,再用d命令观察结果,看键入的十六进制数和ascii码的对应关系。
6、用h命令检查下列各组十六进制数的和与差(补码表示):
(1)56h,34h (2)23h,45h (3)ab,3045h
注:输入 h 12 34 则在下一行显示0046 ffde,即二者的补码和与差。在debug环境下所有数据和地址都是按16进制处理,所以不要加后面的h标志。
7、用r命令检查各寄存器内容,特别注意ax,bx,cx,dx,ip及标志位中zf,cf和af的内容。
注:若在debug32环境下用r16和r32命令分别显示16位和32位寄存器内容。
8、用r命令将ax,bx内容改写为1050h及23a8h。
二、8086常用指令练习。
1、传送指令。
1) 用a命令在内存400h处键入下列内容:
a 0400
***0400 mov ax,1234
***0403 mov bx,5678
***0406 xchg ax,bx
***0408 mov ah,10
***040a mov al,20
***040c mov cx,89ab
***040f xchg ax,cx
注:**为段寄存器cs的当前值,内容是不一定的,每行命令以回车键结束。
2) 用u命令检查键入的程序并记录,特别注意左边的机器码与指令的对应关系。
u 0400
3) 用t命令逐条运行这些指令,每运行一行指令观察各寄存器及ip的变化情况,并注意标志位的变化情况。
t =0400 (注:=400是表示从偏移地址400处开始单步执行)
t (不给出地址,则表示接续上一条指令执行)
t2、加减法指令:
1)用a命令在内存100h处键入下列内容:
mov ah,11
mov al,22
add al,ah
sub al,33
mov cx,1234
mov dx,5678
add cx,dx
sub cx,ax
sub cx,cx
2)用u命令检查键入的程序及对应的机器码。
3)用t命令逐条运行这些指令,检查并记录有关寄存器及zf情况。
3、带进位加减法:
1)用a命令在内存200h处键入下列内容,并用u命令检查:
mov ah,12
mov al,84
mov ch,56
mov cl,78
add al,cl
adc ah,ch
mov dh,a7
mov dl,58
sub dl,7f
sbb dh,34
2)用t命令逐条运行这些指令,检查并记录有寄存器及cf内容。
3)上面这段程序若改用16位操作指令达到同样结果,怎么改?试修改并运行之。
4、bcd码加减法(选作)
1)内容:mov al,65
add al,16
daa2)要求:用a 命令键入,u命令检查,t命令逐条运行并记录有关寄存器及af内容。
注:相加后al值本来是7b,经daa指令调整后变为81,即65和16两个bcd码的和。
实验目的。通过实验掌握下列知识:
1、debug命令:a,t,d,f,g;
2、数据在内存中的存放方式和内存操作数的几种寻址方式;
3、汇编指令:inc,dec,loop,int 3的应用;
4、汇编语言伪指令:byte ptr和word ptr的应用。
实验内容和步骤
一、内存操作数及各种寻址方式使用。
程序内容:mov ax,2000
mov [200],ax
mov bx,210
mov byte ptr[bx],50
mov cl,40
inc bx
mov [bx],cl
dec cl
mov si,5
mov [bx+si],cl
mov [bx+si+1],cl
mov word ptr[bx+si+2],1234
操作步骤 1)用a命令键入上述程序,并用t命令逐条运行。
2)每运行一条有关内存操作数的指令,要用d命令检查并记录有关内存单元的内容并注意是什么寻址方式。
注:d命令显示结果时,双字节数在内存的存放是高地址对应高数据位;
指令**现的byte ptr及word ptr是因为操作数的宽度必须一致。
二、求累加和程序。
程序内容:mov bx,200
mov cx,9
xor ax,ax
add al,[bx] ;按字节相加。
adc ah,0 ;若有进位则到ah中。
inc bx
loop 108
int3操作步骤:
1)进入debug环境。
2)用命令f 200 l10 40 在内存200h-20fh地址处填入一系列值40h。
3)用命令a 100 将上述程序键入到100h开始的内存中。
注:loop指令用到108h号地址,即为add指令的当前地址,构成一个循环。
4)用命令g =100 执行该程序段,程序运行后停在int 3 指令上,此时观察ax寄存器。
的值为240h,即为9个40h的和。
注:int 3指令是一条断点中断指令,程序遇到该指令则停止。
5)用t =100命令单步执行,观察ip、cx及ax寄存器的值,分析程序执行过程。
实验目的。通过实验掌握下列知识:
1、利用简化段定义方法实现程序结构定义;
2、利用dos的21h号中断调用完成输入输出;
3、查表法和查表指令xlat;
4、数据串传送指令movs及重复前辍rep;
5、掌握equ和dup伪指令的用法。
实验内容及步骤。
一、利用查表方法显示内存单元的内容。
1、编辑下列程序:
model small
stackdata
str1 db 'abcdefghij' ;待显示的内存区内容。
str2 db 'please input the number you will display:',10,13,'$
codestartup
mov ah,9
mov dx,offset str2
int 21h显示str2字符串的内容,即提示信息。
mov ah,1
int 21h输入待显示的字符序号(0-9)
mov bx,offset str1
sub al,30h
xlat查str1表,对应序号的字符ascii码进入al
mov dl,al
mov ah,2
int 21h显示对应字符。
exit 0
end2、程序汇编通过后,在运行过程中输入0-9的任意数字,显示str1字符串中对应位置的字符。
3、在debug环境中,用p命令调试执行该程序,察看al寄存器的变化情况及结果的输出, 分析其执行过程。
二、数据串传送程序。
1、编辑下列程序:
model small
stackdata
str1 db 'abcdefghijklmn源串定义。
lengs equ $-str1
str2 db lengs dup目标串。
codestartup
mov ax,ds
mov es,ax使ds和es为同一个段。
cldlea si,str1
lea di,str2
mov cx,lengs
rep movsb串复制。
mov ah,9
mov dx,offset str2
int 21h显示目标串。
exit 0
end2、程序汇编通过后,运行程序察看输出结果。
3、在debug环境中,用p命令调试执行该程序,察看si、di寄存器及相应内存单元的变化情况,分析其执行过程。
4、如果把源串的小写字母复制到目标串的同时再修改为对应的大写字母,该怎么修改程序?
实验附录 ascii码表。
2 5汇编语言程序设计的基本方法
2.5汇编语言程序设计的基本方法。汇编语言的程序结构有4种,即顺序结构 分支结构 循环结构和子程序结构。下面分别介绍这4种结构的程序设计方法。2.5.1顺序程序设计。顺序结构的程序在执行中无分支 无转移 无循环,完全按照顺序逐条执行每一条指令。2.5.2分支程序设计。分支结构的程序比顺序结构的程序有...
C语言程序设计基础》上机实验报告 模版
成都信息工程学院计算机系。课。程。实。验。报。告。通过亲自设计程序,可以令我们熟悉c语言操作,更熟练的掌握c语句。初步体会编程的过程,为将来的程序深入学习打下基础和培养兴趣。tc2.0职工信息管理系统。要求 职工信息包括职工号,姓名,性别,年龄,学历,工资,住址,等 职工号不相等 试设计一职工信息管...
C程序设计上机实验报告
input n 4 input array a 2 1 5 如果a 2 1 的输入改为9,则程序就应该输出 no 四 程序清单。第一题。include int main int n,i,index,max,min int a 10 printf input n scanf d n printf in...
C语言程序设计班级档案管理系统
课程设计报告。课程名称 c语言程序设计 课题名称班级档案管理系统 专业机械设计 班级 0985班 学号 200913090507 姓名黄训益。指导教师王颖 2009年6月25日。湖南工程学院。课程设计任务书。课程名称 c语言程序设计 课题班级档案管理系统 专业班级机械设计0985 学生姓名黄训益。学...