在网上买了两本书 今天刚拿到手 一本汇编语言 一本 加密解密三 哈哈 终于可以开始好好学习啦
2010年5月16日 星期日 小雨(哗啦啦啦的下了一天)
第一章 基础知识
1.2汇编语言的产生
机器指令 1000100111011000 表示把寄存器BX的内容送到AX中,汇编指令则写成 mov ax,bx
操作:寄存器BX的内容送到AX中
机器指令:1000100111011000
汇编指令:mov ax,ba
问: 为什么把BX的内容送到AX的汇编指令写成mov ax,bx 而不是mov bx,ax?
答: mov就是把后面的赋值给前面,格式就是这样的,规定。
感谢 Lelouch、马出门 给予技术支持。。。
1.5 指令和数据
内存中的二进制信息 1000100111011000 计算机可以把它看做大小为89D8H的数据来处理,也可以将其看做指令 mov ax,bx
1000100111011000--->89D8H (数据)
1000100111011000--->mov ax,bx (程序)
问:
在什么情况下是代表数据 在什么情况下代表程序呢?
答:
程序是人写出来的代码,上面的是程序编译出来的机器语言 电脑可以执行上面的 执行不了下面的。
程序=N多指令,每个指令都可以包含数据。
感谢 Lelouch 、 小夏 给予技术支持。。。
监测点:1
(1)一个CPU的寻址能力为8KB,那么它的地址总线的宽度为__13__。
2的1次方=8KB 几位就是 2的几次方。
感谢 痴人说梦 、 鼠标 、 小夏天 给予技术支持 。。。
(2)1KB的存储器有1000个存储单元 存储单元的编号 从0到999
感谢 痴人说梦 、 tRee" 给予技术支持 。。。
(3) 1KB的存储器可以存 8192个bit,1024个byte
感谢 痴人说梦 、 Lelouch 给予技术支持 。。。
(4) 1GB=1073741824B 1MB=1048576B 1KB=1024B
(5) 8080、8088、80286、80386的地址总线分别为:16根 20根 24根 32根 他们的寻址能力分别为 64KB 1MB 16MB 4GB
感谢 c︻$▅▆▇◤ 给予技术支持 。。。
(6) 8080、8088、8086、80286、80386的数据总线分别为:8根 8根 16根 16根 32根则 他们一次可传的速度为
8B 8B 16B 16B 32B
(7)从内存中读取1024字节的数据,8086至少要读取 8 次 ,80386至少要读取 4 次
(8) 在存储器中,数据和程序以 二进制形式存放。
感谢 痴人说梦 给予技术支持 。。。
经过上面的朋友技术指导 不知道自己填写的对不对 今天是第一天学这个 感觉有点吃力 但是 有这么多热心朋友的帮助 我会 学会坚持...
想学汇编的朋友一起来了 不用担心基础差 只要用心学 一定能学会 只是时间问题罢了
2010年5月17日 星期一 小雨转晴
第二章 寄存器
2.1通用寄存器
不同的CPU,寄存器的个数、结构是不相同的。 8086CPU有14个寄存器,每个寄存器有一个名称。这些寄存器是:AX、BX、CX、DX、SI、DI、SP、BP、IP、
CS、SS、DS、ES、PSW。
书上没有对这写寄存器进行一次性的介绍。。。我也没有因为好奇 去翻书查找每一页的介绍 原因很简单 就算现在去查找 看了一边也未必能记住 因为 不能了解
其中原理 只从字面上了解 跟不了解 没什么区别 当然 这个是个人想法 感觉还是按书上的思路走好 虽然进展慢 但是 能或多或少了解其中含义 方便以后在看时
易懂 。。
8086CPU的所有寄存器都是16位的,可以存放两个字节。AX、BX、CX、DX、这四个寄存器通常存放一般性质的数据,被称为通用寄存器。
一个16位寄存器 可以存放16位的数据, 想一想 一个16位寄存器所能存储的数据的最大值为多少?
十六进制是: FFFF 十进制是: 65535 八进制是:177777
怎么得到的呢? 经过高人指点如下:
一个16位寄存器 可以存放16位的数据 最当 当然是 1111111111111111 16个1啦
至于 十六进制 十进制 八进制 完全可以吧 二进制的数 输入到计算器(科学型)里转换嘛
要学会用计算器 明白? (当时看到这句话 彻底的无语了。。。以前总以为傻傻的用脑子跟铅笔头算呢。。。。没想到 原来是这么搞啊!!! 真是学到了一
手。。。。)
感谢 马出门 给予技术支持。。。。
8086CPU的上一代CPU 中的寄存器都是八位的,为了保障兼容,使原来基于上一代CPU编写的程序稍加修改可以运行在8086之上 ,8086CPU的AX、BX、CX、
DX、这四个存储器都可分为两个可独立使用的8位寄存器来使用:
AX可分为AH和AL;
BX可分为BH和BL;
CX可分成CH和CL;
DX可分成DH和DL。
用AX来举例说明下, 8086CPU的16位寄存器分为两个8位寄存器 下面用数字表示下:
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
AX的第8位(0-7) 构成了 AL寄存器,高8位(8-15)构成了AH寄存器。
AH和AL寄存器 是可以独立使用的8位寄存器。
问: 为什么 高八位在前面 第八位在后面?
答:这个东西和很多东西有关 不同的cpu不一样 有地位放低字节的 也有高位放低字节的
感谢 ZW零度 给予技术支持。。。
2010年5月18日 星期二 晴
今天朋友说我 抱着书啃汇编 好像没什么实际效果 郁闷。。。 让我试着离开书本 把王爽的汇编书 当做字典去用。。。。
让我 进入OD调试一些 小东西 然后分析代码的意思。。。结果进去发现 我晕了 什么都看不懂。。。
正好 王爽汇编 2.3 讲的是几条汇编指令。。。。。
堆栈操作指令
堆栈是一个重要的数据结构,它具有“先进后出”的特点,通常用来保存程序的返回地址。它主要有两大类操作:进/压栈操作和出/弹栈操作。
、PUSH
指令格式:PUSH Reg/Mem
PUSH Imm
一个字进栈,系统自动完成两步操作:SP←SP-2,(SP)←操作数;
一个双字进栈,系统自动完成两步操作:ESP←ESP-4,(ESP)←操作数。
、PUSHA
指令格式:PUSHA
其功能是依次把寄存器AX、CX、DX、BX、SP、BP、SI和DI等压栈。
、PUSHAD
指令格式:PUSHAD
其功能是把寄存器EAX、ECX、EDX、EBX、ESP、EBP、ESI和EDI等压栈。
2)、出栈操作
、POP
指令格式:POP Reg/Mem
弹出一个字,系统自动完成两步操作:操作数←(SP),SP←SP-2;
弹出一个双字,系统自动完成两步操作:操作数←(ESP),ESP←ESP-4。
、POPA
指令格式:POPA
其功能是依次把寄存器DI、SI、BP、SP、BX、DX、CX和AX等弹出栈。其实,程序员不用记住它们的具体顺序,只要与指令PUSHA对称使用就可以了。
、POPAD
指令格式:POPAD
其功能是依次把寄存器EDI、ESI、EBP、ESP、EBX、EDX、ECX和EAX等弹出栈,它与PUSHAD对称使用即可。
汇编指令 控制CPU完成的操作 用高级语言的语法描述
mov ax,18 将18送入寄存器AX AX=18
mov ah,78 将78送入寄存器AH AH=78
add ax,8 将寄存器AX中的数值加上8 AX=AX+8
mov ax,dx 将寄存器BX中的数据送入寄存器AX AX=BX
add ax,bx 将AX和BX的数值相加,结果存在AX中 AX=AX+BX
今天由于工作忙 就啃了这么一点。。。。哎 只能自己安慰自己 慢慢消化吧 不知道有没有什么好的方法 有利于灵活运用的?
希望能多多看到一些高手的 成长日记 呵呵。。。期待中。。。
2010 5 20 星期四 晴
这几天笔记有点乱 还没整理出来。。
http://bbs.pediy.com/showthread.php?t=110652 本来打算实践下这个连接里的方法。。。 壳手脱掉了。。。但是为什么在OD里找不到关键的 注册码输入错误 提示? 步骤按链接里说的那样做的。。。为什么不行呢。。我就郁闷了。。。
最近笔记有点乱。。在整理中。。。 2010年5月23日 晴
逻辑运算与AND 逻辑运算或OR 逻辑运算非NOT 逻辑异常运算XOR
逻辑运算与AND 也就是大家说的与运算
相同为1 不同为0 0和0 结果还是0
and 110100,101101
结果是得到 100100
这么看简单:
110100
101101
———
100100
这就是所谓的与运算 也可以看做是 乘法运算
逻辑或OR 是大家常说的或运算
or 也可以看做是加法运算 下面我用机器语言表示给大家看
or 011010,100110
可以看做
011010
100110
———
111110
逻辑非NOT
这个相对来说很简单 非0为1,非1为0
也就是 不是0,那就是1;不是1那就是0
下面用机器语言表示给大家看
not 100110
100110
------
011001
逻辑异常运算(xor)
这个运算是 一样为0,不一样为1
继续用二进制表示
mor 110110,011010
可以这么看:
110110
011010
------
101101
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课