计组实验报告-Debug使用进阶及80X86汇编初步
- 格式:doc
- 大小:605.25 KB
- 文档页数:5
实验一 Debug常用命令及80x86指令的使用实验目的:通过实验掌握下列知识:1、DEBUG常用命令: A,U,D,E,R,T,G,Q。
2、80x86寄存器: AX/EAX,BX/EBX,CX/ECX,DX/EDX,FLAG,IP/EIP3、80x86常用指令: MOV/MOVSX/MOVZX,ADD/ADC,SUB/SBB,DAA,XCHG等。
内容及步骤:一、DEBUG 命令使用:1、打 DEBUG 进入 DEBUG 控制,显示提示苻 '_ '。
2、用命令 E 18E4:100 'A' 将'A'的ASCII码填入内存。
3、用命令 D 18E4:100 观察内存中的16进制码及屏幕右边的ASCII字符。
4、用命令 E 18E4:100 41 重复上二项实验,观察结果并比较。
5、用命令 E 18E4:100 30 31 32 …… 3F将30H-3FH写入地址为100开始的内存单元中,再用D命令观察结果,看键入的16进制数是什么字符的ASCII码?6、用R 命令检查各寄存器内容,特别注意AX,BX,CX,DX,IP及标志位中ZF,CF和AF的内容。
7、用R命令将AX,BX内容改写为1050H及23A8H。
二、808x86常用指令练习1、传送指令1)用A命令在内存100H处键入下列内容:MOV AX,1234MOV BX,5678XCHG AX,BXMOV AH,35MOV AL,48MOV DX,75ABXCHG AX,DX2)用U命令检查键入的程序并记录,特别注意左边的机器码。
3)用T命令逐条运行这些指令,每运行一行检查并记录有关寄存器及IP的变化情况。
并注意标志位有无变化。
4)用G命令运行这些指令,每运行一行检查并记录有关寄存器及IP的变化情况。
并注意标志位有无变化。
2、加减法指令:1)用A命令在内存100H处键入下列内容:MOV AH,34MOV AL,22ADD AL,AHSUB AL,78MOV CX,1284MOV DX,5678ADD CX,DXSUB CX,AXSUB CX,CX2)用U命令检查键入的程序及对应的机器码。
汇编实验报告(-)调试程序DEBUG的使用《汇编语言程序设计》实验报告实验一调试程序DEBUG 的使用一、实验目的通过实验掌握下列知识:1、DEBUG命令:A,T,D,F,G;2、数据在内存中的存放方式和内存操作数的几种寻址方式;3、汇编指令:INC,DEC,LOOP,INT 3的应用;4、汇编语言伪指令:BYTE PTR和WORD PTR的应用。
二、内容及步骤1.DEBUG 命令使用表 1.1 DEBUG命令****命令的使用中注意:****①字母不分大小写;②②只使用16 进制数,没有后缀字母;③分隔符(空格或逗号)只在两个数值之间是必须的,命令和参数间可无分隔符;④每个命令只有按了回车键后才有效,可以用Ctrl+Break中止命令的执行;⑤命令如果不符合Debug 的规则,则将以“error”提示,并用“^”指示错误位置。
许多命令的参数是主存逻辑地址,形式是“段基地址: 偏移地址”。
其中,段基地址可以是段寄存器或数值;偏移地址是数值。
如果不输入段地址,则采用默认值,可以是缺省段寄存器值。
如果没有提供偏移地址,则通常就是当前偏移地址。
1、开机后,切换到命令提示符窗口下,出现提示符后键入命令DEBUG, 进入调试环境,显示提示符 '- '。
2、用命令 F 200 220 'AB' 将'AB'的两个ASCII码循环填入内存。
注:第一个参数200是当前段的起始偏移地址,第二个参数220是终了偏移地址,第三个参数‘AB’是被填入的数值,若不给出第二个参数则填入128(8行)个字节。
3、用命令 D200 观察内存中的十六进制码及屏幕右边的ASCII字符。
图1-1 Fill、Dump命令调用对主存操作的命令还支持地址范围这种参数,它的形式是:“开始地址结束地址”(结束地址不能具有段地址),或者是:“开始地址L 字节长度”。
D(Dump)命令显示主存单元的内容,它的格式如下(分号后的部分用于解释命令功能,不是命令本身):D [地址] ;显示当前或指定开始地址的主存内容D [范围] ;显示指定范围的主存内容图1-2 D命令调用左边部分是主存逻辑地址,中间是连续16 个字节的主存内容(16进制数,以字节为单位),右边部分是这16个字节内容的ASCII字符显示,不可显示字符用点“.”表示。
课程名称:汇编语言程序设计实验名称:DEBUG调试程序的使用姓名:胡彬彬专业:计算机科学与技术班级:计算机14级2班学号:1404010210计算机科学与技术学院实验教学中心2016 年 4 月12 日实验项目名称:DEBUG调试程序的使用一、实验目的1.熟悉 DEBUG 调试程序中的常用命令。
2.学会在 DEBUG 下调试运行汇编语言源程序。
二、实验内容1.熟悉DEBUG常用命令的使用: A、U、D、E、R、G、T、L、W、Q常用命令。
2.在DEBUG下编写汇编语言程序,实现多字节(5个字节)十进制加法。
三、实验用设备仪器及材料硬件:计算机软件:DEBUG调试软件四、实验原理及代码-A010013E0:0100 MOV BX,013013E0:0103 MOV SI,014013E0:0106 MOV CX,513E0:0109 MOV AL,[BX]13E0:010B ADD AL,[SI]13E0:010D DAA13E0:010E MOV [BX+20],AL13E0:0111 INC BX13E0:0112 INC SI13E0:0113 LOOP 010913E0:0115五、实验操作步骤1.在【开始菜单】\【程序附件】\【命令提示符】下,进入 DOS环境。
或在【开始菜单】\【运行】下,直接键入cmd进入。
2.在DOS目录下启动DEBUG。
3.熟悉DEBUG常用命令,详细记录每一步所用的命令及查看结果的方法和具体结果。
4.在DEBUG下编写程序,实现多字节十进制加法实验。
六、实验结果分析。
第一个程序实验步骤:一、启动debug程序打开Dosbox,出现Z:\>键入mount c: d:\,回车出现Drive C is mounted as local directory d:\Z:\>键入D:,回车出现D:\>键入debug,回车出现debug程序的提示符,一个短杠二、汇编第一个程序-a100 //将汇编的首地址设为1000AE9:0100 mov dl,1 //将数值01h (系统自带的,笑脸)放进dl寄存器0AE9:0102 mov ah,2 //ah放2,是2号功能,字符输出,并且要输出的字符是已经放在dl 里面的0AE9:0104 int 21 //调用DOS 21号中断2号功能,用来逐个显示装入DL的字符0AE9:0106 int 20 //调用DOS 20号中断,终止程序,将控制权交回给DEBUG0AE9:0108三、用W命令将该程序写入(Write)磁盘中-rbx //查看BX 寄存器的内容BX 0000:-rcx //查看CX 寄存器的内容CX 0000:8 /程序的字节数为8-w //用W命令将该程序写入(Write)磁盘中Writing 00008 bytes四、退出debug-qD:\>五、运行该程序//由于版本问题,直接执行软件显示无响应,故先保存再在DOS环境下打开。
打开debug,打开文件键入mount c d:\回车键入debug 回车-g //go 执行六、反汇编列出该程序-u100 106 //上述执行完后反汇编,会显示上述汇编的代码七、查看寄存器的值-r //read 会显示所有寄存器的值八、退出debug-qD:\>九、用DOS的dir命令查看当前目录下的文件第二个程序——可以将所有ASCII码显示出来的程序二、汇编-a1000AE9:0100 mov cx,0100 //计数寄存器装入循环次数0100,即十进制的1620AE9:0103 mov dl,00 //将要显示的字符00(ACSII码)放入dl寄存器中0AE9:0105 mov ah,02 //调用DOS的2号功能,字符输出,并且要输出的字符是已经放在dl里面的0AE9:0107 int 21 //字符输出0AE9:0109 inc dl //递增指令,dl寄存器的值自值加一,即指向下一地址进行下一操作0AE9:010B loop 0105 //循环指令,每次计数器cx值减1,跳到地址0105进行循环,,直至cx为0才结束循环,即依次输出dl的要显示的字符0AE9:010D int 20 //执行中断0AE9:010F三、保存执行第三个程序——显示字符串,如:UNDERSTAND?一、打开debug,汇编程序D:\>debug-a1000AE9:0100 mov dx,109 //寄存器dx存放的是字符串起始地址1090AE9:0103 mov ah,9 //Dos的09h功能调用,显示首地址存放在寄存器dx的字符串,字符串要求要以‘$’结尾0AE9:0105 int 21 //字符串输出0AE9:0107 int 20 //执行中断0AE9:0109 db 'understand?$' //定义字符串,字符串要求以‘$’结尾,将单引号内所有ASCII码放入内存中0AE9:0115// mov ah,9的作用是显示字符串,但要求dx存放字符串的首地址,而字符串要以‘$’结尾,所以第一二句顺序不要求固定,另外,定义字符串也不强求一定在最后,只是放在最后最方便。
第1 汇编语言程序的运行方式汇编编语言是面向机器的低级语言,它的每条指令都是机器指令的助记符,其上机运行的方式常有两种:一是在借助程序调试工具DEBUG,编写小的汇编语言程序,直接在DEBUG环境下运行之。
二是借助文本编辑器编写汇编语言源程序,然后借助汇编器汇编生成目标代码,再连接生成可执行文件,在命令行(或命令提示符)下运行之。
1.1在DEBUG下运行汇编程序在MS-DOS、WINDOWS 98、WINDOWS 2000和WINDOWS XP中都提供有程序调试工具DEBUG,其文件名是DEBUG.EXE,可以在命令提示符“>”下运行之。
在进入DEBUG的提示符“-”之后,用户可以通过DEBUG的汇编命令输入汇编语言源程序,并将其汇编成机器语言程序加载存储到指定的地址空间,然后便可运行、调试输入的程序。
使用DEBUG运行汇编语言程序简单方便,但只能编写仅含一个代码段的小型程序,这对学习汇编语言的指令,了解、熟悉指令的功能带来极大的方便。
例1.1在DEBUG下运行如下程序:mov dl,33h ;字符“3”的ASCII码送dlmov ah,2 ;使用INT 21H的2号功能int 21h ;进入功能调用,输出“3”int 20h ;BIOS中断,结束当前程序,返回程序系统该程序运行结果是在显示器上输出一个字符“3”。
如果要输出其它字符,可以改变程序中送输入dl中的ASCII码。
下面我们给出在WINDOWS XP下运行该程序的步骤:图1 命令指符窗口⑴进入DEBUG运行附件下的命令提示符,如图1所示。
在提示符下输入DEBUG,即:C:\>debug<Enter>屏幕显示符“-”。
注:“<Enter>”表示按回车键。
⑵输入程序并汇编在DEBUG的指示符下用汇编命令a输入并汇编程序:-a 1000B25:0100 mov dl,33<Enter>0B25:0102 mov ah,2<Enter>0B25:0104 int 21<Enter>0B25:0106 int 20<Enter>0B25:0108<Enter>⑶运行程序用命令g运行输入的程序:-g=1003Program terminated normally说明:程序输入汇编完成后,可以生成一个在命令指示下直接运行的文件,然后在命令提示符下运行。
实验一:Debug使用进阶及80X86汇编初步实验目的:1、通过本次实验熟悉debug工具的使用及DOS系统功能调用。
2、掌握debug编程基本语言,并运用之实现求一些毫无规律任意数的平方和实验仪器:PC机实验内容:课堂上曾书写一个求12+22+……+102的示例程序(见后面附录),请改写该程序,实现求一些毫无规律的任意数的平方和。
将这些数定义在内存中,假设这些数据都是字节型的非零无符号数(即1~255),请选用合适的Debug命令定义它们,约定数据值0作为结束标记。
要求:将结果放在数据寄存器中,请编写程序,并设计实验过程(用合适的debug命令),验证程序执行的正确性;若结果要求存放在内存中,请编写程序,并设计实验过程(用合适的debug命令),验证程序执行的正确性;注:编写程序和定义初始数据、查看程序运行结果都在Debug下直接进行。
每次运行程序时请改变这些平方和数据的值以及数据元素个数,以多方验证程序正确性。
实验提示:程序中需要用到寄存器间接寻址方式,示例语句:MOV SI, 0200;MOV BL, [SI]附:课堂上的示例程序实验步骤:1、启动debug程序鼠标单击“开始->程序->附件->命令提示符”,打开DOS(其实虚拟DOS)窗口,出现命令提示符键入debug并回车,出现debug程序的提示符,一个短杆。
2、在界面内输入如下指令:AMOV DX,0000 将寄存器DX赋值为0MOV SI,0200 将SI赋为0200地址MOV BL,[SI] 将SI地址的值赋给BLCMP BL,00 比较BL 与0的值JZ 0116 当BL值为0时跳转至0116即程序终止MOV AL,BL BL赋给ALMUL BL 做乘方运算ADD DX,AX 把AX的值与DX值相加并传到DX中INC SI SI的值加1JMP 0106 跳至0106进行循环INT 20 结束程序3、对地址的内容赋值如下:E 0200 1 2 3 4 5 0说明:0为中断值,当BL得值为0时程序终止,对SI地址中的值可以任意赋,以达到求一些毫无规律的任意数的平方和。
实验一利用DEBUG调试汇编语言程序段学生姓名:何茂杰学号:2010305104 专业班级:10级计算机本科一班指导老师:文远熔实验日期:实验成绩:一、实验目的1.熟悉DEBUG有关命令的使用方法;2.利用DEBUG掌握有关指令的功能;3.利用DEBUG运行简单的程序段。
二、实验内容1.学会使用debug的A, U, T, D, E等命令。
2.编写一个程序计算Y=(X*U+V)/1000,X、Y、U、V(均为16位有符号二进制数)的存放地址自己确定。
分别使用两种以上的寻址方式对X、Y、U、V寻址。
三、实验环境PC微机DOS操作系统或Windows 操作系统四、实验要求1.仔细阅读有关DEBUG命令的内容,对有关命令,要求事先准备好使用的例子;2.学会使用debug的A, U, T, D, E等命令。
五、主要实验步骤(一)学会使用DEBUG中的简单命令:1.打开DOS,开始——运行——cmd。
2.进入DEBUG,在DOS下输入DEBUG,直接进入。
3.在DEBUG中输入D,查看D命令结果,输入D 1000,查看指定地址的数据。
4.在DEBUG中输入E100,修改地址100的数据,再输入D100,查看修改后的结果。
5.在DEBUG中输入R,查看当前寄存器的内容。
6.在DEBUG中输入A,输入以下代码:mov ax,1234mov [1000],ax输入T显示第一条命令运行结果,再次输入T,显示第二条命令运行结果,输入d1000,验证命令运行结果。
7.在DEBUG中输入A,输入以下代码:mov ax,1234mov [1000],ax输入G [=起始地址] [结束地址]↓,再输入D1000,验证命令运行结果。
8.在DEBUG中输入U [起始地址] [结束地址],从[起始地址]开始进行反汇编。
9.在DEBUG中输入Q,推出DEBUG程序。
(二)用DEBUG验证乘法、除法、加法、减法等功能:1.验证加法和带进位加,使用A命令,在DEBUG中键入以下代码:mov ax,f111mov bx,f222mov cx,2mov dx,3add ax,bxadc cx,dx使用G命令查看结果2.验证减法和带借位减法,使用A命令,在DEBUG中键入以下代码:mov ax,2mov bx,3mov cx,5mov dx,2sub ax,bxsbb cx,dx使用G命令查看结果3.验证乘法和除法,使用A命令,在DEBUG中键入以下代码:乘法:mov al,b4mov bl,11mul bl使用G命令查看结果除法:mov ax,400mov bl,b4div bl使用G命令查看结果六、实验数据及处理结果反汇编:执行情况:七、思考题启动DEBUG后,要装入某一个.EXE文件,应通过什么方法实现?答:进入DOS,输入DEBUG xxx.exe,其中xxx为文件名。
用DEBUG熟悉Intel80x86指令(一)用DEBUG熟悉Intel80x86指令(一) 一、数据传送指令以程序MOV.asm为例DATAS SEGMENT;此处输入数据段代码DATAS ENDSSTACKS SEGMENT;此处输入堆栈段代码STACKS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATAS,SS:STACKS START:MOV AX,DATASMOV DS,AX;此处输入代码段代码MOV CX,8000HMOV AL,DS:[100H]MOV AL,'E'MOV DS:[100H],ALLEA BX,[SI+100H]LDS SI,DS:[12H]LES DI,ES:[12H]MOV AX,DATASMOV DS,AXXCHG BX,[SI]XLATPUSH AXPUSH BXMOV AX,10HMOV BX,10HPOP BXPOP AXPUSHFPOPFLAHFSAHFMOV AH,4CHINT 21HCODES ENDSEND START1、MOV(传送)指令写法:MOV target,source功能描述:将源操作数source的值复制到target中去,source 值不变。
MOV指令的机器语言有7种格式:(1)MOV mem/reg1,mem/reg2双操作数指令不允许两个操作数都使用存储器,因而两个操作数中必须有一个是寄存器。
这种方式不允许指定段寄存器。
(2)MOV reg,datareg指定寄存器,data为立即数。
这种方式也不允许指定段寄存器。
(3)MOV ac,memac为累加器。
(4)MOV mem,ac(5)MOV segreg,mem/regsegreg指定段寄存器,但不允许使用CS寄存器。
(6)MOV mem/reg,segreg(7)MOV mem/reg,dataMOV传送的信息可以从寄存器到寄存器,立即数到寄存器,立即数到存储单元,从存储单元到寄存器,从寄存器到存储单元,从寄存器或存储单元到除CS外的段寄存器(注意,立即数不能直接送给段寄存器),从段寄存器到寄存器或存储单元。
实验一 8086程序设计实验的使用实验1-1 DEBUG1.实验目的:(1) 熟悉8086CPU指令集。
(2) 掌握动态调试程序DEBUG。
(3)掌握简单程序的编制方法。
2.实验内容:(1)先利用修改存储器内容的方法将段地址7000H,偏移地址0000H开始的20H个单元的内容置为00H、01H、02H、03H、00H、01H、02H、......。
然后将此内容传送到段地址8000H,偏移地址0020H开始的单元中去。
并用检查存储器的方法验证是否正确。
(2)编程实现题1的功能。
用跟踪或断点的方法进行调试,观察指令执行后各寄存器的内容变化情况。
(3)编程交换段地址7000H,偏移地址0020H单元和0021H单元的内容。
(4)如果存储器70500H--70503H放有两个16位数字,将其相加,结果送70504H、70505H中。
(5)编程将段地址7000H,偏移地址0000H单元的内容的每一位扩展为两位,传送到段地址8000H,偏移地址0020H单元中去。
扩展后一个字节变为一个字,例如:00H扩展为0000H、FFH扩展为FFFFH、55H扩展为3333H、AAH 扩展为CCCCH、05H扩展为0033H......。
传送时将高字节存放在地址小的单元中,低字节存放在地址大的单元中。
例如:0033H在存放时将00H存放在偏移地址0020H的单元中,33H存放在偏移地址0021H单元中。
试用数据00H、FFH、55H、AAH、05H、50H、0AH、A0H进行调试,并用检查存储器的方法验证是否正确。
(6)AL、DL寄存器内分别为两位的BCD码,1)计算AL-DL,结果存在AL内。
2)计算AL÷DL,结果存在AX内。
实验1-2 分支程序及循环程序1.实验目的:(1) 熟悉8086CPU指令集。
(2) 掌握动态调试程序DEBUG。
(3) 掌握分支程序及循环程序的编制方法。
2.实验内容:(1)编程根据段地址7000H,偏移地址0000H单元的数据内容决定程序转移的目的地址。
80X86汇编语言程序设计实验报告专业:班级:日期:成绩:第二次试验指导老师:学生姓名:学号:一、实验目的(1) 加深对一些常用的汇编指令的理解;(2) 加深对常用DOS功能调用指令的理解;(3) 进一步熟悉TD的使用。
二、实验内容1、《80X86汇编语言程序设计》教材中 P45的 2.3题。
要求:(1) 分别记录执行到“MOV CX,10”和“INT 21H”之前的(BX), (BP),(SI),(DI)各是多少。
(2) 分别记录程序执行初期与退出之前数据段开始40个字节的内容,指出运行结果是否与设想的一致。
2、《80X86汇编语言程序设计》教材中 P45的 2.4题。
要求:(1) 实现的功能不变。
(2) 内存单元中数据的访问采用变址寻址方式。
(3) 记录程序执行到退出之前数据段开始40个字节的内容,检查程序运行结果是否与设想的一致。
3、编写程序利用DOS 10号功能调用输入一个字符串,统计字符串中字符0、1、…、9出现的次数并显示出来(假设每个字符最多出现9次,若大于9次则显示为x)。
三、实验步骤及结果1、输入源程序,如下:.386STACK SEGMENT USE16 STACKDB 200 DUP(0)STACK ENDSDA TA SEGMENT USE16BUF1 DB 0,1,2,3,4,5,6,7,8,9BUF2 DB 10 DUP(0)BUF3 DB 10 DUP(0)BUF4 DB 10 DUP(0)DA TA ENDSCODE SEGMENT USE16ASSUME CS:CODE,DS:DA TA,SS:STACKSTART: MOV AX,DA TAMOV DS,AXMOV SI,OFFSET BUF1MOV DI,OFFSET BUF2MOV BX,OFFSET BUF3MOV BP,OFFSET BUF4MOV CX,10LOPA: MOV AL,[SI]MOV [DI],ALINC ALMOV [BX],ALADD AL,3MOV DS:[BP],ALINC SIINC DIINC BPINC BXDEC CXJNZ LOPAMOV AH,4CHINT 21HCODE ENDSEND START(1)进行单步调试。
实验一Debug和Emu8086软件的使用一、实验目的:(1)熟悉Debug软件和汇编语言开发环境。
(2)掌握Emu8086软件使用方法。
(3)了解汇编语言的程序结构、调试一个简单的程序。
(4)理解寻址方式的意义。
二、实验内容及要求:1、Debug的使用根据课本104页的实验1中的预备知识的说明,学习使用Debug软件。
编程实现:在显示器上显示字符串Welcome to TianHe college!两个64位无符号数相加2、Emu8086的使用(1)打开桌面上的Emu8086的图标,出现如图所示的对话框,选择【继续……】首次打开软件,界面中默认已有一段小程序。
该程序实现在屏幕上显示三段字符串的功能。
若用户需要自己重新编程,可点击工具栏的【new】图标,出现如图所示的对话框,选择编程所采用的模板。
选择不同的模板,在程序源代码中会出现如下标记:#MAKE_COM# 选择COM模板#MAKE_BIN# 选择BIN模板#MAKE_EXE# 选择EXE模板#MAKE_BOOT# 选择BOOT模板#MAKE_COM#最古老的一个最简单的可执行文件格式。
采用此格式,源代码应该在100H后加载(即:源代码之前应有ORG 100H)。
从文件的第一个字节开始执行。
支持DOS和Windows命令提示符。
#MAKE_EXE#一种更先进的可执行文件格式。
源程序代码的规模不限,源代码的分段也不限,但程序中必须包含堆栈段的定义。
您可以选择从新建菜单中的EXE模板创建一个简单的EXE程序,有明确的数据段,堆栈段和代码段的定义。
程序员在源代码中定义程序的入口点(即开始执行的位置),该格式支持DOS和Windows命令提示符。
这两种模板是最常用的模板(2)选择COM模板,点击【确定】,软件出现源代码编辑器的界面,如图所示:在源代码编辑器的空白区域,编写如下一段小程序:DATAS SEGMENTSTRING DB 'Welcome to TianHe college!', 0AH,0DH,'$'DATAS ENDSCODES SEGMENTASSUME CS:CODE,DS:DATASSTART:MOV AX,DATASMOV DS,AXLEA DX,STRINGMOV AH,9INT 21HMOV AH,4CHINT 21HCODES ENDSEND START代码编写结束,点击菜单【文件】【另存为……】,将源代码换名保存。
西安财经学院信息学院《汇编语言程序设计》 实验报告实验名 DEBUG 命令,指令练习 实验 403 实验日期 2013.4.16 一、实验目的及要求熟悉和掌握汇编语言的数据传送类指令、算术指令、逻辑指令、串处理指令、控制转移指令以及处理机控制与杂项操作指令,达到准确有效地运用。
二、实验环境硬件环境:一台微型计算机;软件环境:windows 7,debug 环境,masm 三、实验内容练习dos 环境下debug 命令;指令练习 四、实验过程: 1. 进入debug 环境姓名学号 10051704 班级 计本1004班 指导教师 张娟2.R命令查看寄存器内容的命令。
可以看出,数据寄存器的内容都为0,CS代码段寄存器内容为13BB,IP为0100。
3.RF命令查看标志位寄存器内容并可以进行修改,其中不包含TF,陷阱标志位。
4.D命令查看内存单元内容,此处从内存的13BB段的第0100个单元开始显示。
5.A命令写指令,此处未写。
6.U命令将内存单元的内容以汇编指令的形式表示出来。
7.E命令修改内存单元的内容命令。
这里修改1000的内容为12,并用D命令显示修改后的结果,为12。
8.数据传送类指令(1)MOV指令将1234赋值给累加器AX:指令写在0100开始的内存单元,占用3个字节,IP指向下一条指令的地址0103。
(2)POP指令将累加器AX中的值弹出AX中的值弹出,变为0000,SP堆栈指针由原来的FFEE自动加2后变为FFF0,IP指向下一条指令的内存单元0104。
9.算数指令(以下内容在实验室操作,地址与之前做的有差别)10.算数指令(1)加法指令ADD给累加器AX 的值加上1234h在0100地址写加法指令,执行单步操作,查看到AX的值由0000h变为1234h,IP 指向下一条指令的地址0103h。
(2)减法指令SUB将累加器AX 的值减去0200h,将结果保存到AX中执行单步操作,查看AX的值为1034h,IP指向下一条指令地址0106。
实验一Debug程序的使用一.实验目的1.熟悉DEBUG程序中的命令,学会在DEBUG下调试运行汇编语言源程序。
2.掌握8086/8088的寻址方式及多字节数据的处理方法。
二.实验内容1.利用DEBUG程序中的“E”命令,将两个多字节数“003F1AE7H”和“006BE5C4H”分别送入起始地址为DS:0200H和DS:0204H两个单元中。
2.分别用直接寻址方式和寄存器间接寻址方式编写程序段,实现将DS:0200H单元和DS:0204H单元中的数据相加,并将运算结果存放在DS:0208H单元中。
要求:本次实验的内容均在DEBUG下完成,实现数据的装入、修改、显示;汇编语言程序段的编辑、汇编和反汇编;程序的运行和结果检查。
三.实验过程和程序直接寻址m ov ax,[0200]mov bx,[0202]add ax,[0204]adc bx,[0206]mov[0208],axmov[020a],bx寄存器间接寻址mov si,[0200]mov di,[0204]mov bx,[0208]mov ax,[si]mov dx,2[si]add ax,[di]adc dx,2[di]mov[bx],axmov2[bx],dx四.实验结果(包括必要的截图)五.实验体会通过实验了解到汇编语言的编译、运行方法。
汇编语言的寻址方式有直接寻址,寄存器寻址,基址变址寻址,相对基址变址寻址等等,掌握这些都是编写汇编程序很重要的环节。
在编写汇编程序时,应该注意特别容易出现的错误特别是通过亲自实验,体验到了对内存、寄存器的修改和使用,加深了对内存寻址和寄存器间接寻址的理解,正确认识了在寄存器名中加入“[]”的作用。
实验二汇编语言程序设计(顺序、循环)一.实验目的1.掌握顺序和循环程序结构和设计方法;2.熟悉在PC机上建立、汇编、连接、调试和运行8086/8088汇编语言程序的过程。
二.实验内容1.X、Y、Z、V均为字变量,在X、Y、Z、V字单元中存放是16位带符号数。
计算机组成原理与汇编语言实验四80x86汇编语言程序开发实验计算机组成原理与汇编元程序设计实验报告实验四80x86汇编语言程序开发实验1.汇编语言程序上机过程,实验步骤:(1)用用文字编辑工具(EDITPLUS)将源程序输入,保存文件其扩展名为.ASM;(2)用MASM对源文件进行汇编,产生.OBJ文件和.LST文件。
若汇编时提示有错,用文字编辑工具修改源程序后重新汇编,直至通过;(3)用LINK将.OBJ文件连接成可执行的.EXE文件;(4)在DOS状态下运行LINK产生的.EXE文件;2.编写一个汇编程序,实现下面的功能:(1)在数据段中定义10个标题msg0到msg9,标题的内容任意;(2)采用1号DOS功能子程序,输入0到9中任意1个数值,然后显示对应的msg0到msg9中的某一个标题;(3)如果输入数值10,则显示输出全部10个标题;(4)程序循环执行,直到输入ESC键,程序结束;(5)根据1的步骤,编译链接生产exe文件,并测试程序的功能;源程序代码(截图)data segmentmsg0 db 'xxx',0dh,0ah,'$'msg1 db '学号',0dh,0ah, '$'msg2 db 'q',0dh,0ah, '$'msg3 db 'w',0dh,0ah, '$'msg4 db 'e',0dh,0ah,'$'msg5 db 'r',0dh,0ah,'$'msg6 db 't',0dh,0ah,'$'msg7 db 'y',0dh,0ah,'$'msg8 db 'u',0dh,0ah,'$'msg9 db 'i',0dh,0ah,'$'msg10 db' xxxq w e r t y u i',0dh,0ah,'$'data endscode segmentAssume cs:code,ds:datastart:mov ax,datamov ds,axagain:mov ah,01int 21hcmp al,'0'jz zerocmp al,'1'jz onecmp al,'2'jz twocmp al,'3'计算机组成原理与汇编元程序设计实验报告cmp al,'4' jz fourcmp al,'5'jz fivecmp al,'6'jz sixcmp al,'7'jz sevencmp al,'8'jz eightcmp al,'9'jz ninecmp al, 'a'jz allcmp al,1bhjz exitzero:mov dx,offset msg0 jmp outputone:mov dx,offset msg1 jmp outputtwo:mov dx,offset msg2 jmp output three:mov dx,offset msg3 jmp outputfour:mov dx,offset msg4 jmp outputfive:mov dx,offset msg5 jmp outputsix:mov dx,offset msg6 jmp output seven:mov dx,offset msg7 jmp output eight:mov dx,offset msg8jmp outputnine:mov dx,offset msg9计算机组成原理与汇编元程序设计实验报告all: mov dx,offset msg10jmp outputoutput:mov ah,09int 21hjmp againexit: mov ah,4chint 21hcode endsend start程序功能测试(截图)分析(手写)实验总结(手写):。
80X86汇编语言程序设计实验报告专业:班级:日期:成绩:第三次试验指导老师:学生姓名:学号:一、实验目的(1) 加深对一些常用的汇编指令的理解;(2) 掌握基本的程序设计方法;(3) 进一步熟悉TD的使用。
二、实验内容1、《80X86汇编语言程序设计》教材中 P96的 3.11 题。
(1)请事先指出程序运行结束后,显示器显示的内容。
(2)若将NUM的定义改成如下形式:NUM DB 35显示的结果是什么?(3)若将NUM的定义改成如下形式:NUM DB 59显示的结果是什么?(4)若将NUM的定义改成如下形式:NUM DB 75显示的结果是什么?(5)修改该程序,使之能够以16进制形式显示NUM单元中的内容。
2、设在一个缓冲区BUF1中存放了一个串“123GOOD”, 将其以相反顺序拷贝到另一个缓冲区BUF2中。
(用TD观察程序执行前后的数据区,并记录下来)3、输入一个十进制数字串(假定是无符号的),以四位十六进制的形式输出该串对应的值。
例如:Input: 123↙Output: 007BH要求:(1) 画出程序流程图,给出寄存器、存储单元的分配方法;(2) 给出完整的程序清单,有必要的注释。
三、实验步骤及结果1、(1)、程序运行完之后,得到的结果为:(NUM)=39H。
(2)、程序运行完之后,得到的结果为:(NUM)=23H。
(3)、程序运行完之后,得到的结果为:(NUM)=3;H。
(4)、程序运行完之后,得到的结果为:(NUM)=4;H。
(5)、修改后的程序段如下:C1 SEGMENT USE16 ASSUME DS:A1, SS:B1, CS:C1 BEGIN: MOV AX,A1MOV DS,AXLEA DI,BUF0MOV AL,NUMSHR AL,4CMP AL,0AHJAE L1OR AL,30HMOV [DI],ALL2: INC DIMOV AL,NUMAND AL,0FHCMP AL,0AHJAE L3OR AL,30HMOV [DI],ALL4: INC DIMOV BYTE PTR [DI],'H'INC DIMOV BYTE PTR [DI],'$'LEA DX,BUFMOV AH,9INT 21HMOV AH,4CHINT 21HL1: MOV BYTE PTR [DI],'0'INC DISUB AL,0AHADD AL,'A'MOV [DI],ALJMP L2L3: SUB AL,0AHADD AL,'A'MOV [DI],ALJMP L4C1 ENDSEND BEGIN运行后的结果如下:①、当NUM为35时:②、当NUM为59时:③、当NUM为75时:④、当NUM为0ACH时:2、编写的程序如下:.386DATA SEGMENT USE16BUF1 DB '123GOOD$'BUF2 DB 0DATA ENDSSTACK SEGMENT USE16 STACK STACK ENDSCODE SEGMENT USE16ASSUME CS:CODE,DS:DATA,SS:STACK START: MOV AX,DATAMOV DS,AXMOV DI,OFFSET BUF1MOV BX,OFFSET BUF2MOV CL,[BX]LOPA: MOV DL,[DI]CMP DL,'$'JE L1INC DIJMP LOPAL1: CMP DI,0JE EXITDEC DIMOV DL,[DI]MOV CL,DLMOV [BX],CLINC BXJMP L1EXIT: MOV CL,'$'MOV [BX],CLLEA DX,BUF2MOV AH,9INT 21HMOV AH,4CHINT 21HCODE ENDSEND START运行后的结果如下:运行程序前数据区显示为:运行程序后数据区显示为:3、①、画出流程图如下:开始输入一个数字串将输入的数字串转化为10进制数存储。
HUNAN UNIVERSITY 课程实习报告
题目:Debug使用进阶及80X86汇编初步学生姓名
学生学号
专业班级计算机科学与技术二班
指导老师
完成日期2013年4月14日
实验一(较高要求):Debug使用进阶及80X86汇编初步
一、实验目的
通过对基本要求程序的编写,了解debug的基本指令以及操作方法方法。
通过对较高要求程序的编写,对寄存器、内存单元的一些复制、显示、转存等操作有了熟练的掌握,并且深刻理解debug指令的含义,执行过程。
二、实验要求
任务一:
课堂上曾书写一个求12+22+……+102的示例程序(见后面附录),请改写该程序,实现求一些毫无规律的任意数的平方和。
将这些数定义在内存中,假设这些数据都是字节型的非零无符号数(即1~255),请选用合适的Debug命令定义它们,约定数据值0作为结束标记。
1、将结果放在数据寄存器中,请编写程序,并设计实验过程(用合适的debug
命令),验证程序执行的正确性;
2、若结果要求存放在内存中,请编写程序,并设计实验过程(用合适的debug
命令),验证程序执行的正确性;
注:编写程序和定义初始数据、查看程序运行结果都在Debug下直接进行。
每次运行程序时请改变这些平方和数据的值以及数据元素个数,以多方验证程序正确性。
提示:程序中需要用到寄存器间接寻址方式,示例语句:MOV SI, 0200
MOV BL, [SI] 附:课堂上的示例程序
任务二:
假设有如下约束条件:一旦平方和结果超过16位字长,则报出错信息,在屏幕上显示字符串“Overflow Error!”,并停止计算终止程序。
请在Debug下重新编写程序并调试,验证程序的正确性。
提示:判断结果超长可在加法指令之后,判断进位标志位CF的值,80X86指令集中条件转移指令JC或JB均可做到这点。
三、实验步骤
1、鼠标单击“开始->程序->附件->命令提示符”,打开DOS窗口,出现命令提示符,键入debug并回车,出现debug程序的提示符,一个短杆“-”。
2、开始汇编,在短杆后输入a100,并将如下所示的在记事本中写好的程序复制粘贴到dos界面中。
mov dx,0 //dx存放平方和,赋初值为0
mov si,200 //将200号内存单元给si
mov bl,[si] //将si内存单元中存放的数据给bl
mov al,bl //将bl的值给al
mul bl //计算bl的平方
cmp al,0 //比较al和0的值,若al=0则停止循环求和
jz 0117 //跳到0117地址的命令继续执行
add dx,ax //计算dx=dx+ax
jc 011e //判断是否溢出,若溢出,则跳到011e地址执行其存放的指令
inc si //si自加1
jmp 0106 //跳转到0106进行执行
mov si,240 //将240赋给si
mov [si],dx //将平方和结果sx存到si所对应的内存单元中。
int 20 //中断跳转,回到jz 0117的下一步继续执行。
mov dx,0127 //将0127内存的值给dx
mov ah,9 //将9赋给ah
int 21 //汇编int 21功能调用
int 20 //中断程序
db 'Overflow Error!$' //字符串显示为Overflow Error!
在dos界面中显示为:
3、从内存单元200开始写入任意的数,空格进入下一内存单元,回车结束输入,
并运行程序,如图所示:
4、读取内存单元200中输入的值
-d 200
5、读取240内存单元中中平方和的值。
-d 240
四、实验结论
这个程序成功地实现了将任意数据输入到内存单元中,并求其平方和的功能,并对溢出做出判断和显示错误。
五、实验心得
1、对于基本要求的第一个实验有一个地方不是特别理解,如图所示,
已经给DX的低八位DL赋值为01,但是在读取寄存器的值的时候,dx却等于0000。
为什么没有将01赋值进去呢?在查阅资料和问同学之后,都没有得出清晰明了的答案。
2、做较高要求实验过程中出现了以下问题:
首先,溢出的时候不会显示。
是因为jc后面的地址跟错了,跟成了int 20的地址,所以溢出的时候直接中断了,而没有进行错误显示。
再者,在实验室可以运行的程序,拿回笔记本就无法运行。
原因是xp系统和win7不同,win7中要在,mul bl 后面加一句cmp al,0 。
再依次修改绝对地址的值,经历多次修改,最终得到正确结果。
这次试验让我对debug的基本命令以及操作方法熟练掌握,对较高要求中用到的指令也做了详尽的了解,并熟练掌握,在debug中进行汇编能力有了很大的提高。
虽然最初犯了很多低级错误,但在改正这些错误的同时,自己的汇编能力也得到了质的提升。