汇编语言实验教程-ddg
汇编语言实验指导书

MOV AX,13C3
(5) 显示内存单元内容的命令 D,格式为:
-D[地址]或-D[范围]
-d ds:0
13C3:0000 61 61 61 61 61 61 61 61-61 61 61 61 61 61 61 61 aaaaaaaaaaaaaaaa
13C3:0010 61 61 61 61 61 61 61 61-61 61 61 61 61 61 61 61 aaaaaaaaaaaaaaaa
第 1页
该命令从指定地址开始允许输入汇编语句,把它们汇编成机器代码相继存
放在从指定地址开始的存储器中。
例如:
-a
136B:0100 mov ax,100
136B:0103 mov bx,200
136B:0106 mov cx,300
136B:0109 mov dx,400
136B:010C
-
(2) 反汇编命令 U,有两种格式:
第 I页
实验一 DEBUG 命令实验
一.实验目的: 掌握 DEBUG 的基本命令及其功能
二.实验内容: DEBUG 是专门为汇编语言设计的一种调试工具,它通过步进,设置断点等方式为汇编语
言程序员提供了非常有效的调试手段。 1、DEBUG 程序的启动 DEBUG 的命令格式: [drive:][path] DEBUG [d:][p][filename][.ext][param...] 其中: drive: 是指定 DEBUG 文件的磁盘驱动器标识符,DEBUG 是外部 DOS 命令,所以必须把
其余通用寄存器均置为 0,标志寄存器置为下述状态。
NV
UP
EI
PL
NE
NA
PO
NC
汇编语言上机实验指导书

《汇编语言》实验指导书计算机实验中心目录目录::实验一利用DEBUG调试程序调试程序段 (4)实验二分支程序实验 (5)实验三循环程序实验 (8)实验四子程序实验(一) (9)实验五子程序实验(二) (13)实验六字符处理程序实验 (19)实验七输入输出实验 (23)试验八中断程序试验 (28)汇编语言上机实验指导书一、概述上机实验总学时为18学时,其中综合性和设计性实验至少为8学时。
实验的次数暂定为8次,每次2-3学时,可结合实际条件适当增减,但不少于6次。
1.实验辅导的主要内容实验辅导的内容包括每个实验的实验目的;实验内容;对实验的算法及实验方法的必要说明;实验准备;实验步骤;实验报告要求;实验程序及参考框图。
开始的实验介绍较细,后面的实验简要介绍。
2.实验的软硬件要求关于汇编语言程序设计的硬件要求不高,有IBM-PC/XT即可,但应有彩色显示器以便进行图形实验。
软件方面应有MASM.EXE5.0版(包括LINK.EXE),与MS-DOS版本配套的DEBUG 程序和EDIT.EXE编辑软件(其它编辑软件也可以)。
3.加强实践能力的培养实验目的不光是为了验证书本理论,更重要的是对实践能力的培养。
其中包括:实际调试程序的能力,例如修改程序参数的能力,查看结果的能力,设置断点调试运行的能力等;开发汇编语言应用程序的能力,例如应用有关汇编软件的能力,进行系统调用和BIOS 功能调用的能力,进行模块程序设计的能力等。
对某一问题用不同的程序实现的能力,例如我们为每个实验提供了参考程序(或程序段),目的是让每个实验者参照样板程序将实验成功地实现,在掌握其方法后,自己改变程序或本分改变程序加以实现。
实验一利用DEBUG调试程序调试程序段1.实验目的:(1)熟悉DEBUG有关命令的使用方法(2)利用DEBUG掌握有关指令的功能(3)利用DEBUG运行简单的程序段2.实验内容(1)进入和退出DEBUG程序(2)学会DEBUG中的D命令、E命令、R命令、T命令、A命令、G命令等的使用。
汇编语言调试程序DEBUG的练习(二)

汇编语言调试程序DEBUG的练习1.目的要求(1)学习使用DEBUG程序的各种命令。
(2)利用DEBUG学习8086指令系统,理解标志位寄存器的意义。
(3)掌握用DEBUG调试汇编程序的方法2.实验内容(1)完成C=A+B的汇编程序。
(2)练习汇编语言指令的使用以及DEBUG的文件调试方法。
3.实验所用仪器、工具计算机一台4. 实验步骤源程序如下:Data segmentA dw 5773hB dw 98cdhC dw ?Data endsCode segmentAssume cs:code, ds:data Start: mov ax,data Mov ax,aAdd ax,bMov c,axMov ah,4ch Int 21hCode endsEnd start步骤:1)打开edit,保存为TEST.ASM2)masm TEST.ASM生成TEST.OBJ3)link TEST.OBJ生成 TEST.EXE4).调试即对生成的EXE的文件进行调试,方法是使用上节我们所学习的DEBUG。
调试步骤:1)D:\MASM\debug TEST.EXE (后缀名不可省略)进入DEBUG的文件调试状态。
该状态与前面我们直接用DEBUG 调试指令的状态是完全不同的,可以通过R指令进行观察;-R2)DEBUG调试EXE文件开始可直接用U0指令查看TEST的代码。
-U03)对应的结果为:反汇编的程序源程序13CF:0000 B8CE13 MOV AX,13CE MOV AX,DATA 13CF:0003 8ED8 MOV DS,AX MOV DS,AX 13CF:0005 A10000 MOV AX,[0000] MOV AX,A 13CF:0008 03060200 ADD AX,[0002] ADD AX,B 13CF:000C A30400 MOV [0004],AX MOV C,AX13CF:000F B44C MOV AH,4C MOV AH,4CH 13CF:0011 CD21 INT 21 INT 21H13CF:0013 0B87C022 OR AX,[BX+22C0]13CF:0017 74E1 JZ FFFA13CF:0019 8B9EFEFE MOV BX,[BP+FEFE]13CF:001D D1E3 SHL BX,113CF:001F D1E3 SHL BX,1与我们原来编的程序比较有什么不同???在程序中我们使用的是A、B、C,但是在该状态下结果就变成了[0000H],[0002H],[0004H]。
汇编语言程序设计2Windbg调试程序的应用

南昌航空大学实验报告
年月日
课程名称:汇编语言程序设计实验名称: Windbg调试程序的应用
班级:学生姓名:学号:
指导教师评定:签名:
一.实验目的
1)进一步掌握windbg调试器的使用方法;
2)通过windbg观察不同寻址方式的结果;
3)学习编写简单汇编程序。
二.实验内容
编译eg0002.asm
Windbg调试
设置windbg调试环境
载入调试符号
启动程序定位和程序入口点
单步执行命令
查看变量信息
各类调试窗口
三.实验过程和程序
启动编译环境:
输入命令:
cd progs
make32 eg0002
eg0002
结果如下:
打开程序和源文件
打开源文件和程序加载源文件和可执行文件后,结果:
调整好窗口布局
四.实验结果和分析
载入调试符
加载程序和源码后,在windbg中输入
.reload /f
lm
五.
六.载入eg0002.exe程序的调试符号输入命令:
g @$exentry
程序将直接运行,并在程序入口点停止。
输入命令
dt eg0002!*
五.实验体会
进一步掌握windbg调试器的使用方法,知道windbg调试器各种命令输入使用,并且使用windbg目录下的debugger.chm学会了详细的Windbg使用方法,并且根据windbg 帮助文件,整理常用的调试命令等。
汇编语言程序设计实验DEBUG基本命令的使用

ERROR:
MOV AH,9
LEA DX,WARN
INT 21H
JMP RESTINT 21H
CODES ENDS
END START
调试分析
运行截图
教师评阅:
年月日
评分
ASSUME CS:CODES,DS:DATAS
START:
MOV AX,DATAS
MOV DS,AX
RESTORE:
MOV AH,9
LEA DX,HINT
INT 21H
MOV AH,10
LEA DX,STRING
INT 21H
MOV BL,STRING+1
MOV BH,0
LEA SI,STRING+2
MOV BYTE PTR [SI+BX],'$'
MOV CX,BX
MOV BL,2
CHECK:
CMP STRING[BX],'A'
JL ERROR
CMP STRING[BX],'Z'
JG ERROR
ADD BL,1
LOOP CHECK
MOV BL,STRING+1
MOV BH,0
MOV CX,BX
MOV BL,2
《微机原理与汇编语言程序设计》实验(上机)报告
班级·学号姓名实验日期任课教师
实验名称
实验一DEBUG基本命令的使用
验证型
实验目的及要求:
1. 掌握DEBUG的基本命令及功能;
实验内容:
1.编写一个小程序,从键盘接收一个大写字母,存放到指定内存单元BUF1,并转换成为对应的小写字符,存放到内存单元BUF2。上机编辑、汇编、连接并运行。
实验七 汇编语言调试工具使用

实验七汇编语言调试工具使用
一、实验目的:
掌握汇编语言调试工具基本使用方法。
二、实验环境:
1、硬件:PC机或其兼容机。
2、软件:Windows操作系统,OllyDbg调试工具。
三、预备知识
Ollydbg经典入门教程→新手OllyDbg入门文章→OllyDBG 入门系列(一)-认识OllyDBG、OllyDBG 入门系列(二)-字串参考
四、实验内容:
启动OllyDBG,熟悉操作环境和主要调试功能。
1.通过反汇编分析、调试,找出程序crackme3.exe的用户名和注册码,写出完整操作步骤,截图并加以说明。
2.通过反汇编分析、调试,找出程序crackHead.exe的注册码,写出操作步骤,截图并加以说明。
3.总结以上分析实例中所使用的主要方法。
北方工业大学微机原理汇编语言上机过程与DEBUG应用

有错 ? 用EDIT,NOTEPAD等任何文本编辑 器。源程序存为.ASM文件 用MASM宏汇编程序进行汇编。 汇编后生成.OBJ目标文件。 命令格式:MASM <源文件名.ASM>; 用LINK连接程序进行连接。 连接后生成.EXE可执行文件。 命令格式:LINK <目标文件.OBJ>;
-Q
;退出DEBUG
D:\>
-A
1271:0100 MOV AX,1234 1271:0103 -D 0 : 0
;汇编一条指令(向当前IP地址写入汇编后机器码)
;查看0:0~7FH内存块的内容
0000:0000 9E 0F C9 00 65 04 70 00-16 00 EB 07 65 04 70 00 ....e.p.....e.p. 0000:0010 65 04 70 00 54 FF 00 F0-58 7F 00 F0 F5 E7 00 F0 e.p.T...X....… …… -U FFFF : 0 FFFF:0000 CD19 FFFF:0002 E000 …… ;反汇编FFFF:0 处的指令 INT 19 LOOPNZ 0004
-T =100 ; 执行0100处指令,若只输入T,执行当前IP指向的代码 AX=1234 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000271 IP=0103 NV UP EI PL NZ NA PO NC 1271:0103 E9C300 JMP 01C9
DEBUG 主要命令一览
命令 R RF A U T P G D E W L I O Q 功能简介 显示、修改寄存器内容 显示、修改PSW内容 汇编指令 反汇编 单步、多步执行指令 单步、多步执行指令 连续执行指令 显示内存内容 修改内存内容 将内存块写入文件 将文件调入内存 读入端口的内容 将数据写入端口 退出DEBUG,返回DOS
《汇编语言》实验指导书

《汇编语言》实验指导书目录实验一Debug命令的使用 (3)实验二基本汇编指令的使用 (7)实验三汇编语言程序的调试与运行 (10)实验四系统功能调用程序的调试与运行 (15)实验五分支程序设计 (17)实验六循环程序设计 (20)实验七子程序设计 (23)实验八高级汇编语言程序设计 (25)实验九I/O程序设计 (30)实验十中断程序设计 (33)实验十一综合程序设计 (38)实验一Debug命令的使用一、知识点1、DEBUG简介DEBUG.EXE是DOS提供的用于调试可执行程序的一个工具软件。
在汇编语言程序调试中很常用。
DEBUG的提示符是“-”,所有DEBUG调试命令军在此提示符下输入。
DEBUG命令都是一个字母,后跟一个或多个参数,也可使用默认参数。
DEBUG命令的使用注意问题:(1)字母不分大小写(2)只使用十六进制数,但没有带后缀字母“H”(3)命令如果不符合DEBUG的规则,则将以“error”提示,并以“^”指示出错位置。
(4)每个命令只有按下回车键后才有效,可以用Ctrl+Break终止命令的执行。
2、Debug的调入和退出以WIN2000环境为例,点击“开始/运行…”,在“运行”对话框中输入命令:cmd,然后点击“确定”,进入DOS命令行状态:C:\Documents and Settings\lfy>然后输入命令:>Debug进入Debug调试状态,出现Debug命令提示府“-”,在此提示符下可运行所需要的Debug 命令了。
退出Debug的命令:Q3、Debug常用命令(1)汇编命令A,格式为:- A [地址]功能:从指定地址开始允许输入汇编指令,并将该指令汇编成机器指令代码从指定地址开始存放。
若不指定地址,则系统从默认的地址开始存放。
按回车键退出汇编状态应用:用于调试一条指令或几条指令组成的一个程序段。
(2)显示和修改寄存器命令R,格式为:- R [寄存器名]功能:若指定寄存器,则显示指定的寄存器的内容,并可进行修改;若不要修改,则按Enter 健。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验一:熟悉环境及DEBUG应用实验目的:1、复习C/C++的变量、地址、指针、内存空间等概念;2、熟悉基本的DOS命令;3、掌握DEBUG的启动及其使用方法与常用命令。
4、初步认识CPU的寄存器。
实验内容:一、C/C++语言回顾目的:通过C/C++的变量、地址、指针、内存空间等概念的回顾,了解计算机内数据的存放方式和访问方式。
1、编程定义一个整型int、一个双精度型double、一个字符型char的指针,并赋初值,然后显示各指针所指目标的值与地址,各指针的值与指针本身的地址及各指针所占字节数(其中地址用十六进制显示,注意字符指针输出是字符串,必须强制转换为无类型指针)。
要求运行结果如下所示:变量内容首地址长度(字节)cval ‘A’0x0012ff64 1类型:整型: int, short int, short, long int, long, unsigned int, unsigned short, unsigned long实型: float, double, long double字符型: char#include<iostream>using namespace std;int main(){int *ip,ival=100;double *dp,dval=99.9;char *cp,cval='A';ip=&ival;dp=&dval;cp=&cval;cout<<*ip<<'\t'<<&*ip<<'\t'<<sizeof(*ip)<<endl;cout<<*dp<<'\t'<<&*dp<<'\t'<<sizeof(*dp)<<endl;cout<<*cp<<'\t'<<(void*)&*cp<<'\t'<<sizeof(*cp)<<endl;//字符指针输出是字符串,必须强制转换为无类型指针cout<<*cp<<'\t'<<&*cp<<'\t'<<sizeof(*cp)<<endl;//输出A开头的字符串cout<<ip<<'\t'<<&ip<<'\t'<<sizeof(ip)<<endl;cout<<dp<<'\t'<<&dp<<'\t'<<sizeof(dp)<<endl;cout<<(void*)cp<<'\t'<<&cp<<'\t'<<sizeof(cp)<<endl;return 0;}2、编程定义一个一维数组、一个二维数组、一个字符串(字符数组)、一个结构体,并赋初值,然后显示各指针所指目标的值与地址,各指针的值与指针本身的地址及各指针所占字节数(长度)。
补充知识常量(放在代码区,不可修改),用#define定义变量(放在数据区,可以修改)变量类型:整型: int, short int, short, long int, long, unsigned int, unsigned short, unsigned long实型: float, double, long double字符型: char3、在实际系统中,许多控制软件需要将数据封装到一个数据结构中,以节省存储空间。
对于位操作,使用汇编语言实现其访问比较容易,但会增加编程难度,因此现在普遍采用C 语言实现。
使用高级语言编程要特别注意结构的存储格式以及编译器的特性。
下面程序所使用的编译器对变量按声明顺序分配地址,目标机为16位机,即int类型占2个字节。
分析下面所示的C语言代码,回答以下问题。
1:typedef struct2: { int A : 16; //按16位字对齐;3: char B : 8;4: char C : 8;5: char D : 8;6: char E : 8;7: int F; //占16位并按16位字对齐;8: }radartype;9: typedef struct10: { unsigned int X; //占16位并按16位字对齐;11: unsigned int Y;12: unsigned int Z;13: unsigned int U;14: } datatranstype;15: radartype myRadarData[2]=16: {{1, 'a', 'b', 'c', 0, 512}, {2, 'x', 'y', 'z', 0, 1024}};17:18:void main(void)19:{ radartype *p;20:datatranstype *q;21:p = myRadarData;22: q = (datatranstype *)p; 23: q++; 24: }(1)如果处理机按16位编址,请在下图的存储器图表中填入myRadarData 数据的存储内容(十六进制表示)。
(a 、b 、c 字符的ASCII 码分别为:61H 、62H 、63H , x 、y 、z 字符的ASCII 码分别为:78H 、79H 、7AH )(2)在上述程序中,第22行的语句执行完成后,下列语句的结果是多少? q->X = q->Y = q->Z = q->U =若再执行一次q++,则下列语句的结果又是多少? q->X = q->Y = q->Z = q->U =二、DOS 应用常用命令:dir 、cd 、md 、rd 、edit 、del 、rename 、copy 一、DOS 操作1、显示目录内容:dir dir dir /w /p2、改变(切换)目录:cd cd cd .. cd \3、创建文件夹:md15 7 0myRadarData[0]0x5000 0x5002 0x5004 0x500615 7 0 myRadarData[1]0x500C 0x500E0x5008 0x500Amd test4、删除文件夹:rdrd test5、创建编辑文件:editedit test.asm6、复制文件:copycopy test.asm test1.asm7、删除文件:deldel test1.asm8、修改文件名:renamerename test.asm test2.asm当前目录. / 上一级目录:../三、DEBUG操作进入DEBUG中,使用相关的命令,完成如下实验:1)考察ROM BIOS中的数据;2)考察显示LCD;3)检查BIOS数据区(检查400H单元内的数据);4)向内存从B8100H开始的单元中填写数据;5)获得当前日期和时间;6)使用INT完成显示;7)使用Debug,输入汇编代码,并执行;8)简单com程序设计(选做)。
1、考察ROM BIOS中的数据(1)检查版权通告和系列号计算机的版权通告是嵌入在ROM BIOS中的FE000H单元。
在debug下输入: d fe00:0(2)检查ROM BIOS数据机器制造日期是按mm/dd/yy记录的,起点在FFFF5H单元。
在debug下输入: d ffff:5(提示:请找到这个生产日期并试图改变它,向地址C000~FFFF的内存单元中写入数据的操作是无效的,因为这等于改写只读存储器中的内容。
)2、考察显示LCD在debug下输入以下命令:F B800:00 F9F 20 70 全屏白色F B800:00 F9F 20 40 全屏红色F B800:00 F9F 20 20 全屏绿色F B800:00 F9F 20 10 全屏蓝色F B800:00 F9F C5 07 C4 07 全屏白色十字网格F B800:00 F9F C5 04 C4 04 全屏红色十字网格F B800:00 F9F C5 02 C4 02 全屏绿色十字网格F B800:00 F9F C5 01 C4 01 全屏蓝色十字网格3、检查BIOS数据区(检查400H单元内的数据)(1)检查串行与并行端口BIOS数据区的第一个16字节包含串行与并行端口的地址 d 40:00第一个4个字表示串口COM1~COM4,如果有两个串口,则第一个双字是以相反字节顺序排列的F803和F802,端口是在03F8和02F8。
第二个4个字表示并行端口LPT1~LPT4,对于有一个并行端口的系统,第一个字很可能是7803,它对应的端口0378(2)检查Shift状态d 40:17首先,确定NumLock与CapsLock关闭,00 00其次,打开NumLock与CapsLock键60 00(3)检查显示状态第一个显示区:d 40:49第一个字节包含当前显示方式:03表示彩色,第二个字节是屏幕上的列数:50h = 80d 40:84 处显示行数:31h = 504、向内存从B8100H开始的单元中填写数据如:-e B810:0000 01 01 02 02 03 03 04 04(向地址A000~BFFF的内存单元中写数据,就是向显存中写入数据。
)5、获得当前日期和时间访问当前日期的指令时int 21h,功能码是2ah,a 100mov ah, 2aint 21jmp 100键入r显示寄存器,并键入t 执行mov,再键入p 运行到中断程序,结果AL:星期,其中0=星期日CX:年(例如:07D6H=2006)DH:月(01H到0CH)DL:日(01H到1FH)访问当前日期的指令时int 21h,功能码是2Ch,把小时送到CH,把分钟送到CL,把秒送到DH,把百分之一秒送到DL。
6、使用INT完成显示a 100mov ah, 09mov dx, 109int 21jmp 100db ‘your name’, ‘$’//结束显示7、使用Debug,输入机器代码或汇编代码,并执行将下面的程序段(机器码和汇编代码)分别写入内存,逐条执行,观察每条指令执行后,CPU中相关寄存器中内容的变化。