四川大学计算机学院学生实验报告实验名称:汇编课程设计报告指导教师:唐宁九姓名:廖偲学号:0943111209班级:软件09级一班日期:20101114实验报告班级______________姓名_______________学号_________一、实验一:DEBUG基本命令与数据传输指令二、实验的目的和要求:• 1.熟练掌握DEBUG的基本调试命令,能够使用DEBUG编写、调试汇编语言程序片段。
• 2.在理解数据传输指令的基础上按照实验内容中指定的程序片段对程序进行调试和记录;三、实验的环境:1.硬件环境:cpu2.26gHZ、内存2G、显存1G、64位总线笔记本电脑2.软件环境:win7 32位操作系统、8086/8088指令集系统(在windows系统中)、masm的汇编工具。
四、源程序清单:•MOV AL, 01H•MOV SI, 0002H•LEA SI, [SI]•MOV BYTE PTR [SI], 80H•LAHF•XCHG AL, AH•SAHF•XCHG AH, [SI]•SAHF五、操作内容:1.从cmd在debug下进入用A命令进行汇编格式: A [地址]功能:从键盘输入汇编程序, 并逐条地把汇编指令翻译成机器代码指令存入对应内存单元。
如果不指定汇编地址, 则以CS:IP为地址2. 反汇编命令U使用格式: U [地址]/[地址范围]功能: 将指定地址范围内的机器代码翻译成汇编源程序指令显示出来, 并同时显示地址及代码。
注意: 反汇编时一定确认指令的起始地址, 否则得不到正确的结果。
3.寄存器查看/编辑命令r或r寄存器名称功能: 显示当前所有寄存器内容, 状态标志及将要执行的下一条指令的地址、代码和汇编指令形式。
4. 跟踪运行命令T格式: T [=起始地址] [指令条数]功能: 逐条跟踪程序的运行, 同时显示出各寄存器的内容、状态标志和下一条要执行的指令, 当执行够指定的指令数后就暂停程序的运行。
说明: 如果不指定起始地址, 则从CS:IP处开始执行。
不指定指令条数时, 认为只执行一条指令。
六、运行结果:1.debug中a命令使用2.u命令3.r命令4.t命令七、实验运行情况分析。
1.使用t单步调试时每条指令(DS=1422H)MOV AL, 01H ;AX寄存器低8位至为01H,标志寄存器无变化MOV SI, 0002H ;SI寄存器置为0002H,标志寄存器无变化LEA SI, [SI] ;LEA将16位源操作数有效地址给目的地址,SI不变还是0002H;标寄存器无变化MOV BYTE PTR [SI], 80H ;将一个字节80H存入内存DS:[SI]中(1422H:0002H =80H)LAHF ;将Flag寄存器低8位存入AH中,AX=0201HXCHG AL, AH ;将AL和AH中的数据互换AX=0102HSAHF ; 将AH存入Flag寄存器低8位中为01H,CF标志位变为1XCHG AH, [SI] ; AH和内存中DS:[SI]中数据互换AH=80H,1442H:0002H=01HSAHF ; 将AH存入Flag寄存器低8位中为80H,CF=0,TF=1这个程序片段展示了LEA、LAHF、SAHF、XCHG这几个命令使用,标志寄存器的一些标志位实验报告一、实验二:DEBUG基本命令与算术运算指令二、实验的目的和要求:•熟练掌握DEBUG的基本调试命令,能够使用DEBUG编写、调试汇编语言程序片段。
•在理解算术运算指令的基础上按照实验内容中指定的程序片段对程序进行调试和记录;三、实验的环境:1.硬件环境:cpu2.26gHZ、内存2G、显存1G、64位总线笔记本电脑2.软件环境:win7 32位操作系统、8086/8088指令集系统(在windows系统中)、masm的汇编工具。
四、源程序清单:•MOV WORD PTR [0100H], 5564H•MOV WORD PTR [0102H], 0C279H•MOV AX, [0100H]•PUSH AX•ADD AL, [0102H];说明标志位是如何确定的•ADC AH, [0103H];说明指令执行原理,包括标志位•MOV [0104H], AX•POP AX•SUB AL, [0102H] ;说明标志位是如何确定的•SBB AH, [0103H];说明指令执行原理,包括标志位•MOV [0106H], AX五、操作内容:1. 断点调试命令G格式:g 或g [起始地址][断点地址]功能:从当前CS、IP指示的位置开始连续执行程序,执行到指定断点处(不包括断点地址指示的指令)暂停执行,在屏幕上显示CPU现场。
2. 内存单元查看命令D格式:D (默认)或D [地址]功能:查看指定地址开始的内存区域中各内存单元的内容。
3.内存单元修改命令E格式:E [地址]功能:修改指定地址内存单元的内容。
六、运行结果:1.g命令的使用2.D命令的使用3.E命令的使用七、实验运行情况分析。
MOV WORD PTR [0100H], 5564H ;一个字的内容5564H放到内存中DS:[0100H] MOV WORD PTR [0102H], 0C279H ;同理0c279H放到内存[0102H]中MOV AX, [0100H] ;5564H传入AXPUSH AX ;AX数据送入堆栈段sp指向位置sp自减保存AXADD AL, [0102H] ;64H+79H=DDH源操作数与目的操作数相加结果存入目的操作数;SF=1与最高位保持一致(不为补码时无意义);PF=1二进制中有偶数个一;OF=1判断:最高位和次高位进位异或值;CF=0最高位无进位、借位;其他位无变化;操作数解释为补码时溢出,无符号数不溢出ADC AH, [0103H];DEST+SRC+CF=>DEST,55H+C2H+0=1 17H;CF=1最高位有进位;OF=0 判断:最高位和次高位进位异或值;PF=1有偶数个1;程序员把操作数解释为无符号数溢出,补码不溢出MOV [0104H], AX ;结果存入内存POP AX ;出栈恢复AXSUB AL, [0102H] ;DEST-SRC=>DEST, 64H-79H=0EBH;SF=1 最高位为一;CF=1 最高位有借位;AF=1 第四位有借位;PF=1 1为偶数个;无符号数出现溢出,有符号数无溢出SBB AH, [0103H];DEST-SRC-CF=>DEST, 55H-C2H-1=92H;CF=1最高位有借位;SF=1 最高位为一;OF=1最高位和次高位进位异或值为1;不论为有符号或无符号数都溢出MOV [0106H], AX ;结果存入内存这个小程序演示了ADD、ADC和SUB、SBB连用展示超过8位时两次加减来表示16位加减以及其中对标志位的影响。
实验报告一、实验三:编制完整的汇编语言源程序二、实验的目的和要求:•掌握编写完整汇编语言源程序的方法,掌握汇编、连接等将源程序转换为可执行代码的必要步骤。
•在理解逻辑运算指令原理的基础上,按照实验要求的功能编写完整程序,生成可执行文件后,使用DEBUG对程序进行调试。
三、实验的环境:1.硬件环境:cpu2.26gHZ、内存2G、显存1G、64位总线笔记本电脑2.软件环境:win7 32位操作系统、8086/8088指令集系统(在windows系统中)、masm的汇编工具、emu8086(8086模拟器)。
四、源程序清单:DATA segmentVAR1 db 35hVAR2 dd 0E2597455HRES1 db 0RES2 db 0DATA endscode segmentASSUME DS:data,cs:codestart:mov ax,datamov ds,axMOV CL,4MOV AH,VAR1MOV AL,VAR1AND AL,0FHMOV RES2,ALAND AH,0F0HSHR AH,CLMOV RES1,AHMOV CX,2LOOP1: SHL VAR2,1RCL VAR2+2,1LOOP LOOP1MOV AH,4CHINT 21Hcode endsend start五、操作内容:•编写一个完整源程序完成如下功能:1)设定字节型变量VAR1的内容为35H,编写程序将VAR1的高4位与低4位分离,分别作为低4位保存在RES1和RES2中,这两个变量高4位置0。
2)设定32位(二进制)数据0E2597455H(注:最高位为E)保存在变量VAR2中,将该变量中的内容算术左移2位,所得结果仍然保存在VAR2中。
六、运行结果:运行前运行后七、实验运行情况分析。
1)在VAR1处理过程中使用AND、SHR指令:AND指令分别用0FH、0F0H提取VAR1低和高四位放入AL、AH,在用SHR让AH右移四位最高位依次补0。
分别存入RES1、RES2中。
AND AL,0FH ;AL=05H PF=1AND AH,0F0H;AH=30H PF=1SHR AH,CL;标志位无变化AH03H2)在VAR2处理过程中使用SHL、RCL对32位VAR2实现左移。
(分析第一次循环)LOOP1: SHL VAR2,1 ;左移一位最低位补0 VAR2 = CC;SF=1 OF=1 CF=0 PF=1RCL VAR2+2,1 ;加上CF左移最高位移入CF,CF移入最低位;CF=1 SF=1 PF=1 OF=0LOOP LOOP13)如果VAR2解释为有符号数乘以4为负数结果为负数未出现溢出(SF=1)解释为无符号数乘以4结果溢出实验报告一、实验四:分支与循环结构程序设计二、实验的目的和要求:•掌握分支、循环结构程序设计方法,重点掌握结合程序流程图设计分支、循环结构入、出口的方法。
•掌握使用DEBUG调试分支、循环结构的方法。
三、实验的环境:1.硬件环境:cpu2.26gHZ、内存2G、显存1G、64位总线笔记本电脑2.软件环境:win7 32位操作系统、8086/8088指令集系统(在windows系统中)、masm的汇编工具,emu8086。
四、源程序清单:编写的统计数组中奇数和偶数的个数,统计结果分别保存在ODDNUM和EVENNUM单元中。
DATA segmentVAR DB 14,-25,66,-17,78,-33,46DB -96,71,80ODDNUM DB 0EVENNUM DB 0DATA endscode segmentASSUME DS:data,cs:codestart:MOV AX,DATAMOV DS,AXMOV BX,0MOV CX,0AHLEA SI,VARLO: MOV AL,[SI]CMP AL,0JG L1NEG ALL1: TEST AL,01HJZ L2INC BLJMP L3L2: INC BHL3: INC SILOOP LOMOV ODDNUM,BLMOV EVENNUM,BHMOV AH,4CHINT 21Hcode endsend start五、操作内容:1)1.无条件跳转指令段内直接转移:JMP 标号或JMP NEAR 标号指令功能:(IP)+(DISP)=>IP指令将程序流程转向目标地址,CPU下一条指令变成目标指令,DISP(-128~127)段内间接转移:JMP 16位通用寄存器或字类型的内存单元指令功能:(16位寄存器)=>IP或(字类型的内存单元)=> IP 将16位的寄存器或内存单元的内容解释为目标地址,送入IP转入目标地址。