吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 6119|回复: 15
收起左侧

[其他转载] 我学习汇编的笔记,先转上来!分享给大家,可能有错误!

[复制链接]
悠悠 发表于 2009-12-9 11:04
cs段(指令)寄存器存放段地址 IP存放偏移地址
debug 命令
(1)-r 查看、改变CPU寄存器内容

(2)-d 查看内存中的内容
格式: -d 1000:0000 a     (指定范围查看)
       -d 1000:0000       (指定开始位置查看)

(3)-e 改写内存中的内容
格式: -e 起始地址 数据 数据 数据 ········
       -e 1000:0000 a     (指定范围逐个修改)
       -e 1000:0000 'a' 'b' 'c'    (从某点开始写入字符)

(4)-t 执行cs:ip当前指向内存地址的命令

(5)-u 段地址:偏移地址 (查看机器指令对应的汇编命令)

(6)-a 段地址:偏移地址 (指定开始位置,将汇编命令写入内存)


mov 命令
mov的几种形式
mov ax,0               寄存器←数据
mov ax,bx              寄存器←→寄存器
mov ax,ds:[0]          寄存器←→内存单元
mov ds,ax              段寄存器←→寄存器
mov ds,ds:[0]          段寄存器←→内存单元
mov byte ptr ds:[0],0  内存单元←数据


push(入栈)、pop(出栈) 命令
ss:sp  指向栈顶元素,后进先出
push 先将sp减2,写入数据
pop  先读取数据,sp加2
格式:
push(pop) 寄存器
push(pop) 内存单元


存放数据       内存中逆序存放:
dd 12345678h,  双字型数据32位→78 56 34 12
dw 1234h,        字型数据16位→34 12
db 12h,        字节型数据 8位→12


add,sub(加,减)
add ax,0      寄存器←数据
add ax,bx     寄存器←→寄存器
add ax,ds:[0] 寄存器←→内存单元


SI和DI两个寄存器功能类似bx(基址寄存器)
但不能分为两个8位寄存器使用

bp:因为不能以[sp]的形式寻址,用bp做为过渡
mov bp,sp
mov xx,[bp]
用bp+si、bp+di寻址是可以的
使用[bp]时如果不明确指示出段地址则默认为ss:[bp]


在没有寄存器空闲的情况下的操作命令:
mov                   ds:[0],1
inc     word ptr      [bx]
dec     byte ptr      ds:[0]
add     dword ptr
sub


div(除)
除数为8位时,被除数为16位放在ax中,计算结果al存放商,ah存放余数.
除数位16位时,被除数位32位(dx高16,ax低16),计算结果ax存放商
dx存放余数.


offset 标号(位指令,获得标号处的偏移地址)
如mov ax,offset s
  mov ax,offset start
  mov word ptr ds:[0],offset start


jmp (无条件转移指令)

1.jmp short 标号 (转移到标号处执行指令)   8位
段内短转移,对IP的修改范围为-128~127

2.jmp near ptr 标号
段内近转移,16位位移=标号地址-jmp指令后的首字节
位移范围为-32768~32767
具体位移量由编译器算出

3.jmp far ptr 标号  (操作:cs=标号处段地址 ip=标号所在偏移地址)
段间转移(远转移)

4.jmp 16位寄存器    (ip=16位寄存器)

5.jmp word ptr 内存单元地址(段内转移)
写法:jmp word ptr ds:[0]
      jmp word ptr ds:[bx]

6.jmp dword ptr 内存单元地址(段间转移)
cs=内存单元地址+2  (高位为段地址)
ip=内存单元地址


jcxz (有条件转移指令,所有的有条件转移指令都是短转移,在对应的
机器码中包含转移的位移,而不是目的地址,对ip的修改范围都为:
-128~127)
格式:jcxz 标号  (如果cx=0,转移到标号处执行)
操作:当cx=0时,ip=ip+8位位移
8位位移=“标号”处的地址-jcxz指令后第一个字节地址


loop (循环指令,所有的循环指令都是短转移,在对应的机器码中
      包含转移的位移,而不是目的地址,对IP的修改范围-128~127)
操作:(1) cx=cx-1
      (2) 如果cx不等于0,ip=ip+8位位移


ascii码
大写字母第五位为0                    小写为1
A 41H 01000001                   a 61H 01100001  
        543210                           ↑

大写A+20H=小写a
and设0   or设1




80*25彩色字符模式显示缓冲区
内存地址空间中:B8000H~BFFFFH共32KB的空间
向这个地址空间写入数据,写入的内容将立即出现在显示器上,
该模式下显示器可以显示25行,每行80个字符。
每个字符占2个字节,高位字节为字符属性,低位为ascii码
内存中:
         低8    高8
         41     02
      ascii      7    6 5 4      3    2 1 0
                闪烁  r g b     高亮  r g b
                      背景             前景  000黑  111白


ret (用栈中的数据修改IP,实现近转移)
操作: 出栈并用出栈的数据修改IP    (pop ip)

retf (用栈中的数据修改CS和IP,实现远转移)
操作: 出栈2次 先修改IP再修改CS  (pop ip,pop cs)


call (先将当前的IP或CS压入栈中,然后转移,此命令不能实现近转移) 注意::::call指令执行时是把call xx下一条代码首字节的偏移地址压栈

call 标号 (将当前的IP压栈后,转到标号处执行)
此命令位移为16位 范围-32768~32767

call far 标号  (1 push cs,2 push ip,3 转移到标号处cs:ip)

call 16位寄存器 (1 push ip,2 jmp 16位寄存器)

call word ptr 内存单元地址 (1 push ip,2 jmp word ptr 内存单元地址)

call dword ptr 内存单元地址 (1 push cs,2 push ip,3 jmp dword ptr 内存单元地址)


mul乘法
1.两个相乘的数,要么都是8位,要么都是16位
如果是8位,一个默认放在AH中,另一个放在8位寄存器或内存单元中
如果16位,一个默认放在AX中另一个放在16位寄存器或内存字单元中
2.结果 8位结果默认放在AX中;16位高位存放在DX 低位存放在AX


标志寄存器
15 14 13 12 11 10 09 08 07 06 05 04 03 02 01 00
            OF DF IF TF SF ZF    AF    PF    CF

06位 ZF(零标志)
运算指令的结果,如果为0则ZF=1,不为0则ZF=0

02位 PF(奇偶标志)
相关指令执行后,结果中所有二进制位中1的个数如果为偶数则PF=1
如果为奇数则PF=0    (全为0也算偶数)

07位 SF(符号标志)
相关指令执行后,结果为负则SF=1,非负则SF=0
(结果为0也算非负)

00位 CF(进位标志)   针对无符号运算
借了就1 没借就0    进位看假象更高位的具体数字

11位 OF(溢出标志)   针对有符号运算
溢出1 没溢出0


adc(带进位加法指令)
可以利用CF中记录的进位值进行任意位数的加法运算
adc ax,dx     ax=ax+dx+cf

sbb(带进位减法指令)
可以利用CF中记录的借位值进行任意位数的减法运算
sbb ax,bx     ax=ax-bx-cf

cmp(比较指令)

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

tianlong11 发表于 2009-12-9 12:27
呵呵,看来楼住学进去了啊,这是学破解基本中的基本要学的汇编指令
最硬的石头 发表于 2009-12-9 13:03
 楼主| 悠悠 发表于 2009-12-15 15:36
2# tianlong11

别提了,偶是被论坛里的某个人带的,硬说写外挂多好多好。
结果到CE找偏移 OD调试时候就看不懂了``
才纠着眉毛跟他后面学汇编的`
到现在还是不懂````5555555555555
谁教我的呀```
张无忌 发表于 2009-12-17 21:14
写外挂的?呵呵  我还真没玩过,不过你好好看看任何一本关于汇编的书就应该会了吧?想写挂不会汇编肯定不行的!
silly 发表于 2009-12-18 13:08
4# 悠悠

这种思想要不得....
学习是因爱好而学,如果不喜欢汇编,硬学只会是枯燥~!
cywyx123 发表于 2009-12-19 18:49
。。。还是很难得。。貌似计算机系的估计好学点。。
hezl666 发表于 2010-2-15 15:37
谢谢楼主,我也想学的,参考一下.!!!!!!!
avzhongjiezhe 发表于 2010-2-22 19:07
谢谢分享
tawtg 发表于 2010-2-22 22:57
你学的好像不是win32的汇编吧~
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-16 11:38

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表