[中学作文]手把手教你用机器码编程.doc_第1页
[中学作文]手把手教你用机器码编程.doc_第2页
[中学作文]手把手教你用机器码编程.doc_第3页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

本文的目的在于让各位了解最基本的机器码知识。例程仅有30字节,尽情揭露各位的本质咔咔方法1:1.开始-运行,输入debug,回车2.复制如下代码并粘贴到debug中去:e100 BA 11 01 B4 09 B9 0A 00 CD 21 E2 FC B4 01 CD 21e110 C3 49 20 61 6D 20 61 20 53 42 2E 0D 0A 24具体的方法是单击debug窗口左上角的命令提示符图标,选择编辑-粘贴,回车即可。3.输入g (运行的意思,括号里面的东西不要傻乎乎打进去啊),回车,看结果吧4.看完结果后按q回车可退出debug。方法2:1.打开UltraEdit32,新建一个文件,输入30个A(或者随便什么字符,仅为下一步做准备)。2.按Ctrl + H切换到HEX编辑模式,定位到第一字节,依次输入下列代码:BA 11 01 B4 09 B9 0A 00 CD 21 E2 FC B4 01 CD 21C3 49 20 61 6D 20 61 20 53 42 2E 0D 0A 243.保存为.com文件,双击运行看看! 代码分析:方法1里,e100,e101是debug的内部命令,暂且不管,其他部分是指令。为了方便分析,首先将地址和代码对应一下:00h: BA 11 0103h: B4 0905h: B9 0A 0008h CD 210Ah: E2 FC 0Ch: B4 010Eh: CD 2110h: C311h: 49 20 61 6D 20 61 20 53 42 2E 0D 0A 24从11h开始实际是I am a SB, CR, LF(回车换行), $的ASCII码,注意偏移地址为11h。这是这个程序的数据段。下面分析指令段。回忆一下计算机文化基础的内容,CPU的指令由操作符和操作数组成,前面已经将每条指令都划分出来了。第一个字节是操作符,后面的是操作数。再普及一个知识,.com文件读入内存时前100h字节是保留的,因此在内存寻址时需要把偏移量加上100h成为绝对地址。知道了这些就可以分析这个程序了。频繁出现的一个指令是CD 21,CD的意思是调用DOS中断,那这个21(注意是16进制)是不是很熟悉啊它就是操作数CD 21就是调用21号DOS中断的意思如果不晓得什么是DOS中断的话,只要知道B4 09, BA指令和CD 21结合可以显示一个字符串,B4 01和CD 21结合可以读入键盘就可以了前2条指令,B4 09让电脑准备打印字符串,(在CD 21时正式开打),BA 11 01将字符串的地址11 01读入寄存器,由于x86架构采用高地址存高位的存储方式,所以这里实际上把I am a SB的绝对首地址0111h读入了寄存器,经过了这两步之后,只要调用CD 21,就可以打印字符串了05h: B9 0A 00和0Ah: E2 FC构成了一个循环。B9指令将循环次数0A 00(即10次)读入循环寄存器,E2是循环跳转指令,将循环寄存器内的值减一,如果寄存器内的数不是0则跳转到相应偏移量的地方去执行,否则继续下一条指令。这里偏移量是FC,即-4,所以向前跳4个字节,即08h的地方执行。若10次打印结束,调用B4 01, CD 21,暂时中断程序,等待从键盘读入一个字符,这里实际上起得是一个Press any key to continue的作用。C3是退出程序的指令。所以整个程序的作用就是,打印一个字符串10次,然后中断程序,在用户按下任意键后退出。事实上也很容易发现,机器码和汇编有很简单的一一对应的关系(至少这个程序里是这样),所以很容易反汇编出它的汇编源程序(执行完方法1后,直接键入u回车即可反汇编):147A:0100 BA1101? MOV? DX,0111147A:0103 B409? MOV? AH,09147A:0105 B90A00? MOV? CX,000A147A:0108 CD21? INT? 21147A:010A E2FC? LOOP? 0108147A:010C B401? MOV? AH,01147A:010E CD21? INT? 21147A:0110 C3? RET;此处开始为数据段,但反汇编器没我们聪明看不出来,依旧照指令的方式反汇编147A:0111 49? DEC? CX147A:0112 20616D? AND? BX+DI+6D,AH147A:0115 206120? AND? BX+DI+20,AH147A:0118 53? PUSH? BX147A:0119 42? INC? DX147A:011A 2E? CS:147A:011B 0D0A24? OR? AX,240A147A:011E 0000? ADD? BX+SI,AL 人工修饰一下得到:ORG? 100h?;伪指令,com文件必须 MOV DX, OFFSET msgMOV AH, 9MOV CX, 10next:INT 21hLOOP next MOV AH, 1INT 21h RET msg? DB I am a SB., 0dh, 0ah, $ 你也可以试试改动机器码写出自己用原汁原味的机器码写出的HelloWorld! P.S.如果没有UltraEdit也可以用C写一个小程序如下:#include int main(void)?char data30 = 0xBA, 0x11, 0x01, 0xB4, 0x09, 0xB9, 0x0A, 0x00, 0xCD, 0x21, 0xE2, 0xFC, 0xB4, 0x01, 0xCD, 0x21, 0xC3, 0x49, 0x20, 0x61, 0x6D, 0x20, 0x61, 0x20, 0x53, 0x42, 0x2E, 0x0D, 0x0A, 0x24;?FILE *F = NULL;?F = fopen(, wb);?fwrite(data, 1, 30, F);?fclose(F);?return 0;值得玩味的是,fopen的模式改成w就不行,wb就可以。经过比较两个模式下生成的文件发现,在wb模式下,文件与data数组的

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论