这里进行的就是
但是最上面的是32位机器 所以不需要ds*10 但是也可以把ds看作是0
那就是将ebp地址所承载的值取出dword位出来也就是4字节 给eax 如果是ax 就是word 1字节 如图
EBP地址是
所指向的值是
所以eax变成
可以看出是将地址中的值倒向放在eax中 这是因为eax是高16位加上低16位 高对高 也就是0018FF8B对应的00与eax第一位对应
loop循坏
这里是算2的10次方
首先 给ax赋值2 然后需要一个控制循坏的变量ecx (在32位机器中 ,cx是在16位机器中)赋值九 每次循坏就会自动减一 所以
9 :4 8:8 7:16 。。。
当ecx变为0时会跳出循坏
loop循坏后面跟要开始循坏的那个地址
2.and和or指令 xor
and就是数学中的与 or就是或 xor是异或
如果是 and FFFF,F0F0 结果就是F0F0 and 00001111b,10100011b 结果是00000011
or F000,0FF0 FFF0 xor 0010b,1011b 1001b
这里可以用来转换字母大小写 根据ASCII
可以看出小写字母和大写字母之间的二进制 有一位不同
1000001->1100001 A->a
所以可以这样通过or来实现转换
mov cx,10 //10位字符串长度
mov al,[bx] //bx是字符串的地址 这里是将字符串取一个字符给al
or al,100000B //进行或运算
inc bx //然后将bx加一 指向下一个字符
loop //循环
3.内存寻址
SI:源变址寄存器可用来存放相对于DS段之源变址指针
列如mov ax,[SI] 这里是DS*10+SI作为地址指向的那个值取出来给ax
DI:目的变址寄存器,可用来存放相对于ES段之目的变址指针
列如mov ax,[DI]:这里是ES*10+DI作为地址
CS:代码段 DS:数据段 ES:附加段
SS:存放栈的段地址
SP:堆栈寄存器SP存放栈的偏移地址
BP:基数指针寄存器BP是一个寄存器,用途有点特殊,是和堆栈指针SP联合使用的,作为SP校准使用的,只有在寻找堆栈里的数据和使用个别的寻址方式时候才使用
SP是栈指针 内容就是 SS*10+SP 所指向的地址的内容
列如
要注意bp不能和bx在一起 一个是用ss 一个是ds 会冲突
可以的组合方式