版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、汇编语言程序设计实验报告课程名称汇编语言程序设计班 级学 号指导教师把这些数据记录下来。-d F F F F F一 3 3 3 3 3- d 7 7 7 7 7二 0 0 0 0 0B88BFF000533 00 8B 0440 FD 8B 40 FF FF FF FF 00 14 00 188B 44 0Z-8B 44 10 92 O1-01 01 FF FF FF-FF FF 00 3F 07-FF FF02Al 25 GO 8B 01 00 OZ FF FF FF FF 00 GO 00 FF FF 0O 00 0O假设BX和SI中的内容分别是12和17,判断一下程序运行后的结果是什么?
2、跟踪程 序,记录AX寄存器中的内容,与你预计的结果相符么?答:预测最后AX的值变为相对DS中的基址偏移量为20+12+17/0=39的值运行结果:AX=FFFF与预测相同。AX=O1O1 BX=OO1ZDS=O?3F ES=0?3F O73F:O006 8B440Z-tCX=000O DX=O0OO SP=0OFDSS=073F CS=073F IP=OOG8MOUAX, CSI*OZBP=0QOO SI=001? DI=0000 NU UP EI NG MZ NA PE NC DS:0019=0101AX=O101 BX=0O1ZDS=O?3F ES=0?3F O?3F:O0OB A1Z5O
3、O-tCX=O0OO DX=OOOO SP=OOFDSS=0?3F CS=073F IP=GOOBMOUAX,0025BP=O0OO S1=001? D1=0000MU UP EI NG NZ NA PE NCDS:0025=FFFFAX=FFFF BX=0O1ZDS=O?3F ES=073F O73F:O0OE 8B00 -tCX=0O0O DX=0OOO SP=0OFDSS=073F CS=073F IP=OOGEMOUAX, BX*SUBP=OO00 SI=001? DI=0OGO NU UP EI NG MZ NA PE NC DS:OOZ9=FFFFX=FFFFPS=073FBX=0
4、O1ZES=073FCX=000O DX=OOOO SP=OOFDSS=0?3F CS=073F IP=OO1OO73F:OO10 8B40FD -tMOUAX, BX*SI-03BP=O0OO SI=0017 DI=0O0O NU UP EI NG NZ MA PE NC DS:00Z6=FFFFX=FFFFPS=O?3FBX=O01ZES=0?3FCX=G0OO DX=O000 SP=O0FD BP=OOOO SI=G017 DI=0OOOSS=0?3F CS=073F IP=OO13O73F:0013 8B401OMOUNU UP EI MG MZ NA PE NCDS:O039=FFF
5、F5 .堆栈.将程序输入内存中以地址CS:OOOO为起始的代码段中:MOV BX,22MOV AX,33PUSH AXPUSH BXMOV AX,0MOV BX,0POP AXPOPBXINT3跟踪程序,记录发现的变化。不要忘记运行前要把IP的内容变为Oo步骤AXBXSP堆栈内容1OH22HOOFDH空233H22HOOFDH空333H22HOOFBH0033H433H22H00F9H0033H 0022H5022H00F9H0033H 0022H60000F9H0033H 0022H722H0OOFBH0033H822H33HOOFDH空增加什么语句,能够使AX和BX的内容在程序运行后被恢复
6、。push axpush bx pop ax pop bx(ii)重启 Debug将指令“INT3”在代码段地址CS:100中输入。输入记录堆栈段和代码段的参数:SS:073FH SP:00FD H CS:073FH IP:0010H将堆栈段中SS:FFE0 FFFF的内容显示出来,记录堆栈段中的有效数据。 地址:-d ss:ffe0 ffff973F : FFE0 00 GO 00 OO OQ OO 00 00-00 OO OO 00 GO 0Q 00 OO 973F: FFF0 OG 00 00 OO OO OO 00 00-00 OO OO OG 00 0Q 00 OO 内容:-d ss
7、:00f0 0110373F:00F0 00 00 GO 00 00 00 00 00-00 00 00 00 00 00 00 009?3F:010G CC 00 00 00 00 00 00 00-00 00 GO 00 00 00 AE FE 373F:O110 00.执行,INT3”指令,引起CPU的软件中断。相应的中断程序被调用。中断服务程序的最 后一条指令是“RET”,它告诉CPU中断服务结束。一步步跟踪“NT 3直到“RET”指令被执行。注意寄存器SP中内容的变化,记录被推 入堆栈的内容,以及中断程序终止时,弹出命令将什么内容送到什么地方?根据观察,能找 到INT3中断向量的内容
8、么?中断服务程序的起始地址是什么?答: 推入堆栈的内容:073F F202INT 3指令执行后CS变为0070X=0000 BX=0000S=073F ES=073FCX=0000 DX=0000 SP=00F7SS=073F CS=O070 IP=0008170:0008 FE38BX+SUBP=0000 SI=0000 DI=000ONU UP DI PL NZ NA P0 NCDS:0000二CDY 0Oe0 0100i?3F:OOE0 0O GOi?3F:O0F0 00 0073F:010O CCi?3F:OOE0 0O GOi?3F:O0F0 00 0073F:010O CC00 0
9、0 00 00 00 00-00 00 0000 00 00 00 00 01-01 3F 072.IRET指令执行,即中断服务结束后弹出命令将堆栈中的073F送入CS恢复原来的程序的 执行地址。IX=0000BX=0000CX=0000DX=0000SP=O0FDBP=0000 SI=0000 DI=0000iS=0?3FES=073FSS=073FCS=073FIP=01O1MU UP EI PL MZ NA P0 MC173F:0101 0000ADD BX+SI,ALDS:OO0O=CD3.INT 3中断向量的内容是CC。4.中断服务执行时CS指向0070, ip=0008,所以中断服
10、务的起始地址是708H.汇编语言程序设计实验一DEBUG程序使用技巧.寄存器和内存开始Debug程序。输入“Q1 ”退出程序。再次启动Debugo输入来显示CPU的当前状态和寄存器中的当前内容。输入“r AX1”和“1234”,AX寄存器中的内容变为1234。输入“r DS1”和“2000”,DS寄存器中的内容变为2000。输入“d DS: 10001”来显示数据段中80H字节数据,把数据抄在这里:000:1000000:1010000:10Z0000:1030000:1040000:1050000:1060000:107000 00-0000 00-0000 00-0000 00-0000
11、00-0000 00-0000 00-0000 00-000000000000000000输入“f DS: 1000 1100 771”再显示一次这80H字节。判断这条指令的作用是什么?答:从DS:1000地址七,将1100H字节的内容赋值为77H 再输入“d 2000:10001”来显示数据段中80H字节数据。观察与前面的数据有无不同。Hd 2000:10002000:1000 2000:1010 2000:1OZO 2000:1030 2000:1040 2000:1050 2000:106。 2000:10702000:1000 2000:1010 2000:1OZO 2000:1030
12、 2000:1040 2000:1050 2000:106。 2000:107077 7777 7777 7777 7777 7777 7777 7777 777777777777777777777777777777777777777777777777777777777777777777777777777777777777-7777-7777-7777-7777-7777-7777-7777-777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777
13、777777777777UJUUJUUJUJUJUJUUJUJUJUJMJUJ UJUJUJUJUJUUJUJUJUJUJUJUUUJUJ UMJUJUJUJUJUJUJUJUJUUJUUJUJ UUUUUUUUUUUJUUUUUUJUUJUUJUJUJUUJUJUJUUJUJUJUJ UJUUJUUMJUJUUJUJUJUUJUJUJ UUJMJUJUJIJUJUUJUJUUJUJMJ输入“d 1900:0100和“d lfTO:0100L来显示两个存储段中的内容。比拟其中2000:0000 段中的数据。相同段落中的数据相同么?根据你的观察,得出结论,是否程序员可以用不同 的段起始地址和偏移
14、量组合,把不容内容存入相同的内存段中。答:相同段落中的数据相同,程序员可以用不同的段起始地址和偏移量组合,把不容内容存 入相同的内存段中。.输入机器码,使用单步和断点退出Debug,再重新启动Debugo输入“1观察CPU的状态,下一条指令是什么??3F:01O0 0000ADD BX+SI,AL答:下一条指令是ADD BX+SI,AL使用两种方式输入一段程序,第一种方式:直接输入机器码。输入来显示程序段中的指令序列。然后输入“dCS:100i”来显示代码段中的数据。观察显示内容。“uCS:100 106i”做反汇编,就是显示出汇编语句。将这几句汇编语句记录下来:-u cs:100 10607
15、3F:0100 0000ADDBX+SUAL073F:010Z 0000ADDBX+SUAL073F:0104 0000ADDBX+SUAL073F:01O6 0000ADDBX+SUAL使用输入观察CPU的状态,使用来跟踪程序,直至最后一条指令执行完毕。注 意,跟踪程序前,耍让IP寄存器中的值是100H。一直监视AX和IP寄存器的内容变化, 尤其是标志位的变化。标志位(外语缩写)标志位名称及外语全称=1=0CF进位标志/Carry FlagCY/Carry/进位NC/No Carry/无进位PF奇偶标志/Parity FlagPE/Parity Even/偶PO/Parity Odd/奇AF
16、辅助进位标志/AuxiliaryCarry FlagAC/Auxiliary Carry/进位NA/No Auxiliary Carry/无进位ZF零标志/Zero FlagZR/Zero/等于零NZ/Not Zero/不等于零SF符号标志/Sign FlagNG/Negative/负PL/Positive/非负TF跟踪标志/Trace FlagIF中断标志/Interrupt FlagEl/Enable Interrupt/允许Dl/Disable Interrupt/禁止DF方向标志/Direction FlagDN/Down/减少UP/增加OF溢出标志/Overflow FlagOV/O
17、verflow/iaiHNV/Not Overflow/未溢出第二种方式,是输入汇编语句。重启Debug程序。先输入“aCS:100然后输入:MOV AX, FF00ADD AX.01F0MOV BX,AXNEG BXADD AX,BX输入“uCS:100 10A3就可以得到这几条语句的机器码。把机器码记录下来:-u cs : 100 10a073F:01O0 B800FFMOUAX,FF0O0?3F:0103 G5F0O1ADDAX,01FO073F:01O6 89c3MOUBXAX073F:O108 F7DBNEGBX073F:01G)A 01D8ADDAX.BX使用命令“r ipi”再输
18、入“1001”,可以将寄存器IP中的内容置为“100H”。再输入观 察CPU的状态,然后反复输入宣,跟踪程序,直到程序结束。解释为什么标志位内容会 有改变?另外,说明这段程序完成什么任务?答:执行完指令:add ax,OlfO后 结果为lOOfOH发生了进位,进位标志位发生改变,并且二 进制的lOOfOH中1的个数为偶数,所以奇偶标志位发生了改变。执行完指令:negbx即求补指令,bx由正数变为负数,符号标志位发生改变;二进制的1 的数量有偶数变成奇数,奇偶标志位发生改变。(3)执行完指令:add ax,bx, ax由OOfOH变为10000H,符号标志位发生改变,零标志位发 生改变,奇偶标志
19、位发生改变。重新把寄存器IP的内容变为100H,不使用跟踪命令t”,改用“g 10c”来完成程序。卜 g 10chx=0000 BX=FF10DS=073F ES=073FD73F:01QC 0000hx=0000 BX=FF10DS=073F ES=073FD73F:01QC 0000CX=0O0O DX=00O0 SP=O0FD BP=0O0O SI=0000 DI=O0O0 SS=073F CS=073F IP=010cMU UP EI PL ZR NA PE CYADD BX+SU,ALDS:FF1O=0O程序中还可以加断点,做法是在程序中加入“int3”这条指令。如果这条指令在程序的
20、末尾, 我们可以通过输入“gi”来完成运行程序。这样就不需像上面需要告诉Debug程序最后机 器码字节的地址偏移量了。“int 3”是Debug中很有效的返回控制指令。把这条指令放在程 序中必要的位置上,在这条指令后面的代码在不允许时就不会运行。. ASCII字符码,从键盘输入,从显示器输出(i)标准 ASCII (American Standard Code for Information Interchange )码使用 7- bit 二进制 数来代表字符。一般文本信息经常用ASCII编码。使用命令aCS:100i”,输入下面的代码:MOV BX,0MOV BX,BLINC BXCMP B
21、H,1JNE 103INT3使用“dDS:0 IO。”命令,显示程序运行前相应内存段中的数据。运行上面的程序来填充 DS:0000-00FF这段内存中的内容。再次输入“dDS:0 100,命令来显示填充的内容。在窗 口的右边,可以看到相应的ASCII码字符。-d ds:0 100 973F:OOO0 973F:O010 973F:00ZO973F:O030973F:0O40373F:O050973F:0060973F:0070973F:0080973F:0090973F:OOA0 973F:00B0973F:O0C0973F:0OD0973F:O0E0 973F:O0FO973F:O1O0Z0
22、3EA700EAFF-AD DE 4F03A3018A03011703A30101-01 01 01000ZFFFFFFFFFFFFFFFFFF-FF FF FFFF00000000001400180007-FF FF FFFF00000000000000000000-00 00 000000000000Z1CB00000000-00 00 000000Z0Z0Z0Z0Z0Z0Z0Z0Z0Z020-00 00 000000Z0Z0Z0Z0Z0Z0Z0Z0Z0Z020-00 00 000000000D0000000000-00 00 00000000000000000000-00 00 0000
23、0000000000000000-00 00 00000000000000000000-00 00 00000000000000000000-00 00 00000000000000000000-00 00 00000000000000000000-00 00 00000000000000000000-00 00 000000BB-d ds:0 10005 06 07-08 09 QA 0B 0C 0D 0E OF 973F:000000 01 0Z03 04973F:001010 11 1213 1415 16 17-18 19 1A IB IC ID IE IF 973F:O0Z0Z0 Z
24、1 ZZZ3 24Z5 Z6 Z7-Z8 29 ZA ZB ZC ZD ZE ZF()*,-./973F:003030 31 3Z33 3435 36 37-38 39 3A 3B 3C 3D 3E 3F 01Z3456789:;?973F:004040 41 4Z43 4445 46 47-48 49 4A 4B 4c 4D 4E 4F eABCDEFGHIJKLWO973F:005050 51 5Z53 5455 56 57-58 59 5A 5B 5C 5D 5E 5F PQRSTBUWXYZ_973F:006060 61 6263 6465 66 67-68 69 6A 6B 6C 6
25、D 6E 6Fabcdefghijkimno973F:007070 71 7Z73 7475 76 77-78 79 7A 7B 7C 7D 7E 7F pqrstuuwxyzf;.373F:008080 81 8Z83 8485 86 87-88 89 8A 8B 8C 8D 8E 8F 373F:009050 91 9ZS3 9495 96 97-98 99 9A 9B 5C 9D 9E 9F 373F:00A0A0 Al AZA3 MA5 A6 A7-A8 AS AA AB AC AD AE AF 9?3F:GOBOB0 Bl BZB3 B4B5 B6 B7-B8 B9 BA BB BC
26、 BD BE BF 973F:00C0CO Cl CZC3 C4C5 C6 C7-C8 C9 CA CB CC CD CE CF 973F:00D0D0 DI DZD3 D4D5 D6 D7-D8 D9 DA DB DC DD DE DF 373F:OOE0E0 El EZE3 E4E5 E6 E7-E8 E9 EA EB EC ED EE EF 973F:OOF0F0 Fl FZF3 F400 00 0B-01 3F 07 A3 01 FD FE FF ?973F:0100BB*如果填充的内容不是字符,显示就用点表示。用类似方法,如何将字符串“How are you? ” 写入计算机内存呢答
27、:使用如下汇编指令:mov bx,0mov al,48mov bx,al inc bxmov al,6f mov bx,al inc bxmov al,77 mov bx,alinc bxmov al,61 mov bx,alinc bxmov al,72 mov bx,al inc bxmov al,65 mov bx,al inc bxmov al,79 mov bx,al inc bxmov al,6f mov bx,al inc bxmov al,75 mov bx,al inc bx mov al,3f mov bx,alinc bx int 3(ii)计算机的BIOS ( Basi
28、c Input / Output System )程序有很多子程序,用来通过标准外设 处理输入和输出,比方,键盘和显示器。BIOS的程序都可以通过称为系统中断的特殊指令被调用。例如:INT 16H返回值是把下一个键盘输入值送入寄存器ALINT 10H当BH = 0时,将光标移到由寄存器DH和DL内容所指定的行和列的位置上INT21H当AH = 2时,将DL中的内容作为ASCII码的字符显示出来INT21H当AH = 9时,将位于DS:DX的内容显示为字符串(一个ASCII码序列由$符作结束符)。(ii)(a)将以下代码输入程序段CS:0100中:MOV AH,0INT 16HINT 3JMP
29、100使用“uCS:100 110J命令,将程序转换为机器码。其中“JMP 100”的机器码是“EBF9”。如果使用的是相对寻址方式,我们可以猜想出机器码中“F9”的含义么?相对寻址方式比绝对 地址方便的地方是什么?-7的补码是F9H即向上跳转到前面7字节单元的位置。使用相对寻址可节省指令中的地址位数,也便于程序在内存中成块搬动重置IP的内容为100H,再输入“g,来执行程序。程序中断时,输入字母检查寄存 器AL中的内容为:62H重复上面的动作,但输入不同字母,记录下每次AL中的内容,能不能判断出来,这段程 序的功能是什么?答:读入键盘键入的一个字母,送入寄存器ALo(ii)(b)将下面的代码输入CS:200中:MOV BH,0MOV DL,0MOV DH,0MOV AH,2INT 10MOV DX,0MOV AH,9INT21INT3通过命令eDS:O 68 65 6c 6c 2124T农内存数据段中输入了一个字符串,将IP设为200,输入“gT来运行程序,在屏幕左上角能找到输入的字符串是什么:hell!这个程序是用来做什么的?
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 原材料采购部门管理制度
- 采购灶具经营者验收制度
- 药品采购出入库制度
- 粮油企业采购制度
- 警用装备采购管理制度
- 营销用品采购及管理制度
- 合约采购部资料管理制度
- 采购权限审批制度
- 精二类药品采购验收制度
- 外购商品采购管理制度
- 内蒙古房屋市政工程施工现场安全资料管理规程
- 钢结构构件运输与吊装方案
- 北斗卫星导航系统科普应用
- 月嫂岗前培训课件班
- 旋挖钻孔灌注桩全护筒跟进施工工艺主要施工方法及技术措施
- 第四单元应用文写作《说明书》(教学设计)-【中职专用】高二语文上(高教版2023职业模块)
- 急救中心建设标准
- 矿安益学习题库
- 食品微生物学基础课程标准(一)
- 中医风湿痹症课件讲稿
- 配电第一种工作票(10kV线路投运停电填写样本)
评论
0/150
提交评论